Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何读取gdb中的内存地址进行i7处理器代码反汇编?_C++_Eclipse_Memory_Memory Management_Gdb - Fatal编程技术网

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

C++ 如何读取gdb中的内存地址进行i7处理器代码反汇编?,c++,eclipse,memory,memory-management,gdb,C++,Eclipse,Memory,Memory Management,Gdb,我试图在运行时使用Eclipse中的gdb读取内存中变量的位置,但实际上看不出哪一个是正确的地址。以下是我反汇编程序时gdb的输出: main(): 0000000000400634: push %rbp 0000000000400635: mov %rsp,%rbp 5 int i = 7; 0000000000400638: movl $0x7,-0x4(%rbp) 6 i

我试图在运行时使用Eclipse中的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内的值为0x7FFFFFE250。 因此,运行时i在内存中的位置是否为0x7fffffe250-0x4?
或者它只是0x7FFFFFE250?

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


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

您试过gdb中的
p&i
吗?我没有。我正在尝试使用EclipseGUI来做这件事。当你不想在gdb中做这件事时,问一下如何在gdb中做这件事是个好主意…@Plasmah你能更具体一点吗?我无法从你的暗示中得到任何有意义的东西。