2012-02-27 28 views
0

我想在Eclipse中使用gdb在运行时读取内存中变量的位置,但无法真正看到哪一个是正确的地址。下面是我反汇编我的程序时的gdb输出:如何在gdb中读取i7处理器代码反汇编的内存地址?

    main(): 
0000000000400634: push %rbp 
0000000000400635: mov %rsp,%rbp 
5     int i = 7; 
0000000000400638: movl $0x7,-0x4(%rbp) 
6     int j = 8; 
000000000040063f: movl $0x8,-0x8(%rbp) 
8     return 0; 
0000000000400646: mov $0x0,%eax 
9    } 

我想要的是变量i在运行时的位置。 我猜这是-0x4(%rbp),但是我怎么才能找出那是什么地址?

我应该采用rbp的当前值并从中减去4吗? 在这种情况下,rbp中的值是0x7fffffffe250。 因此,运行时我在内存中的位置是0x7fffffffe250 - 0x4? 或者它只是0x7fffffffe250?

+0

你有没有在gdb中试过'p&i'? – PlasmaHH 2012-02-27 20:11:06

+0

我没有。我正在尝试使用Eclipse GUI来做到这一点。 – ratsimihah 2012-02-27 20:18:28

+0

好主意,要求如何在gdb中做到这一点,当你不想在gdb中做... – PlasmaHH 2012-02-27 20:20:41

回答

1

你的猜测是正确的:在该函数中取%ebp的值,并减去4得到i正被存储的地址。但是,这个地址是不可预测的,因为它取决于运行时堆栈的位置。此外,您应该记住,并非所有变量都会在内存或寄存器中具有固定位置 - 编译器最终可能会在多个位置之间移动值,或者完全优化中间值这是没有必要的。

+0

明白了,谢谢! – ratsimihah 2012-02-29 20:19:32