我将缩小我的问题范围:这是否始终是GDB调试程序的地址?
GDB中的入口地址对于同一程序(甚至在重新引导和重写源代码之后)保持不变。
这是为什么?
例如0x80483f4是起始地址。
**0x80483f4** <main()> push %ebp │
│0x80483f5 <main()+1> mov %esp,%ebp │
│0x80483f7 <main()+3> sub $0x10,%esp │
│0x80483fa <main()+6> movl $0x3,-0x4(%ebp) │
│0x8048401 <main()+13> movl $0x3,-0x8(%ebp) │
│0x8048408 <main()+20> mov $0x0,%eax │
│0x804840d <main()+25> leave │
│0x804840e <main()+26> ret
除此之外,我们从让说获得的价值,0x80483fa,是永远不变的。
$2 = 0x80483fa <main()+6>
(gdb) x $2
0x80483fa <main()+6>: 0x3fc45c7
(gdb) p 0x3fc45c7
$3 = 66864583 <-- even after reboot.
这是什么暗示我?
我对每次赋值之前和之后的值(比如后面的c = a + b)感兴趣,而不使用断点一次一行地执行。
的源代码:
int main()
{
int b = 3;
int a = 3;
return 0;
}
可有人请给我讲解一下?谢谢。 (我也将此标记为家庭作业,但它确实不是。)
而不使用断点,是否真的有办法查看此时地址0x80483fa中存储了什么值? (使用断点就意味着我正在执行,因此我可以查看寄存器。)谢谢jpalecek – CppLearner
你是对的。但是,我无法直接从源代码使用printf(或cout)。我必须使用GDB来查看内存。我甚至尝试过其他的东西,比如ndisasm和hexdump。他们只告诉我说明。 – CppLearner
你已经有了这个值 - 它是0x3fc45c7。但地址是错的,它指向的是代码,而不是数据。 – jpalecek