首页 > 解决方案 > 在 gdb 中运行后“main”函数的移动?

问题描述

我在ret0.c.

int main(){
  return 0;
}

通过gdb编译运行,我有以下输出:

(gdb) disas main
Dump of assembler code for function main:
   0x0000000000001119 <+0>: push   %rbp
   0x000000000000111a <+1>: mov    %rsp,%rbp
   0x000000000000111d <+4>: mov    $0x0,%eax
   0x0000000000001122 <+9>: pop    %rbp
   0x0000000000001123 <+10>:    retq   
End of assembler dump.
(gdb) run
Starting program: /home/michael/core/mind/ob/thm/cs/lang/other/c/ret0 
[Inferior 1 (process 14766) exited normally]
(gdb) disas main
Dump of assembler code for function main:
   0x0000555555555119 <+0>: push   %rbp
   0x000055555555511a <+1>: mov    %rsp,%rbp
   0x000055555555511d <+4>: mov    $0x0,%eax
   0x0000555555555122 <+9>: pop    %rbp
   0x0000555555555123 <+10>:    retq   
End of assembler dump.

那么执行一次后,main在内存中的位置发生了变化?这里发生了什么?

标签: cgdb

解决方案


第一个输出是在进程开始之前打印的。在这种情况下,gdb 打印二进制文件中的偏移量。

第二个输出是在进程终止之后,您可以看到进程内存空间中的实际地址。


推荐阅读