【发布时间】:2014-04-21 22:55:08
【问题描述】:
我正在寻找一种方法来查找由给定指令(执行内存访问)访问的变量的名称。
使用调试符号,例如 addr2line 或 objdump 很容易将指令地址转换为源代码文件+行号,但不幸的是通常单个源代码行包含多个变量,因此这种方法没有足够细的粒度.
我发现 objdump 能够将指令地址转换为全局变量。但是我还没有找到对局部变量执行此操作的方法。例如,在下面的示例中,我想知道地址 0x4004c4 处的指令正在访问局部变量“local_hello”,地址 0x4004c9 处的指令正在访问局部变量“local_hello2”。
你好.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 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)
【问题讨论】:
标签: c debugging gcc static symbols