如何在gdb中读取内存地址以进行i7处理器代码反汇编?

时间:2012-02-27 20:06:51

标签: c++ eclipse memory memory-management gdb

我正在尝试在运行时使用gdb中的gdb读取内存中变量的位置,但无法真正看到哪个是正确的地址。这是我反汇编程序时gdb的输出:

                  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。 因此,运行时i在内存中的位置是否为0x7fffffffe250 - 0x4? 或者只是0x7fffffffe250?

1 个答案:

答案 0 :(得分:1)

您的猜测是正确的:在该函数中取%ebp的值,减去4得到i存储的地址。但是,这个地址是不可预测的,因为它取决于堆栈在运行时的位置。

此外,你应该记住,并非所有变量都有一个固定的位置,无论是在内存中还是在寄存器中 - 编译器可能最终在多个位置之间移动一个值,或者如果它是完全优化中间值的话。不必要的。