[英]Finding variable name from instruction pointer using debugging symbols
我正在尋找一種查找給定指令(執行內存訪問)所訪問變量的名稱的方法。
使用調試符號和例如addr2line或objdump,可以很容易地將指令地址轉換為源代碼文件+行號,但是不幸的是,單個源代碼行通常包含多個變量,因此此方法的粒度不夠精確。
我發現objdump能夠將指令地址轉換為全局變量。 但是我還沒有找到對局部變量執行此操作的方法。 例如,在下面的示例中,我想知道地址0x4004c4處的指令正在訪問局部變量“ local_hello”,而地址0x4004c9處的指令正在訪問局部變量“ local_hello2”。
你好ç:
int global_hello = 4;
int main(){
int local_hello = 3;
int local_hello2 = 0;
local_hello2 = global_hello + local_hello;
return local_hello2;
}
使用“ objdump -S hello”:
local_hello2 = global_hello + local_hello;
4004be: 8b 15 cc 03 20 00 mov 0x2003cc(%rip),%edx # 600890 <global_hello>
4004c4: 8b 45 fc mov -0x4(%rbp),%eax
4004c7: 01 d0 add %edx,%eax
4004c9: 89 45 f8 mov %eax,-0x8(%rbp)
這可能對沒有或只有中等優化級別的簡單程序有效,但隨着編譯器優化的增加,將變得困難。
您可能需要研究gdb源代碼,以了解將變量連接到優化的編譯器輸出的工作。
畢竟,您的目標是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.