Aşağıdaki sorunla karşılaşıyorum: backtrace (3) işlevini kullanarak C'de bir backtrace aldığımda, işlevlerin adı döndürülen işlevler cüce kitaplığı ile kolayca belirlenebilir. dladdr (3).Bir C işlevi işaretçisinin işlev adı nasıl elde edilir
sorun basit bir işlevi işaretçisi varsa dladdr + (örneğin o & fonksiyonu geçirilerek) cüce fonksiyonları yardımcı olabilir. İşaretçinin backtrace (3) tarafından döndürüldüğünden farklı olduğu anlaşılıyor (3) (backtrace, bu fonksiyon göstergelerini doğrudan yığından alıyor).
Sorum şu, bu adları da çözmek için bazı yöntemlerin var mı? Ayrıca, iki işaretçi arasındaki farkın tam olarak ne olduğunu bilmek isterim.
Teşekkürler!
GÜNCELLEME: işaretçiler arasındaki
fark oldukça önemli:
Ben backtrace ile elde biridir: 0x8048ca4
doğrudan işaretçi sürümü: 0x3ba838
ikinci bir ihtiyacı Bana göre bir ofset.
İşaretçiler * çok * farklı mı, yoksa biraz mı kapalı? – bstpierre
@bstpierre: Soru güncellendi. – terminus
Yığın üzerinde bulunan işaretçiler genellikle geçerli işleve yapılan çağrıdan hemen sonra komutun adresidir. Bunlar genellikle herhangi bir işlevin girişine işaretçilerle aynı değildir. – RBerteig