我正在寻找一种方法来查找给定指令(执行内存访问)访问的变量的名称。
使用调试符号,例如addr2line或objdump,它很容易将指令地址转换为源代码文件+行号,但遗憾的是,通常单个源代码行包含多个变量,因此这种方法不会具有足够细的粒度。
我发现objdump能够将指令地址转换为全局变量。但我还没有找到办法为局部变量做这个。例如,在下面的示例中,我想知道地址0x4004c4处的指令正在访问本地变量" local_hello"并且地址0x4004c9处的指令正在访问本地变量" local_hello2"。
HELLO.C:
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你好":
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)
答案 0 :(得分:0)
这可能适用于没有或只有中等优化级别的简单程序,但在编译器优化时会变得很困难。
您可能需要查看gdb源以了解将变量连接到优化编译器输出的工作。
毕竟你的目标是什么?