我正在寫一個使用ptrace(singlestep,getregs,pick_text,opcodes比較等)跟蹤所有系統調用和二進制文件(elf)調用的小程序。Printf Symbol Resolution
到目前爲止,我已經成功跟蹤系統調用和簡單的調用,如用戶定義的函數。
但是我沒有從我選擇的地址獲取printf符號的名稱,這要感謝ptrace。
我的問題是:對於像printf,strlen等動態鏈接函數,我如何從elf文件中檢索地址中的符號名稱?
簡單的調用很簡單,我運行.strtab部分,當地址匹配時返回相應的str。
但是對於printf,該符號在.strtab中已知,但地址爲「0」。
objdump -d以某種方式成功地將呼叫鏈接到printf及其地址。
你有什麼想法嗎?
是否涉及動態鏈接? – fuz
在glibc中,由於設防補丁,'printf'的符號實際上被稱爲'__printf_chk'。在調用'printf'的目標文件上運行'nm',你會看到。一般來說,看看如何解析精靈文件的libelf。我建議你不要手動解析它們。 – fuz
我已經在使用libelf。而實際上,如果我使用nm,我可以看到「printf」符號,但沒有看到它的地址,符號標有「未定義」的「U」字母。這是我的問題,我使用該函數的地址來檢索其名稱。但是如果該地址沒有儲存在精靈中,我無法檢索該名稱。是的,libc是動態鏈接的我猜 –