gpt4 book ai didi

c - 在gdb中运行后 `main`函数的移动?

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:57 25 4
gpt4 key购买 nike

我在 ret0.c 中有以下 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在内存中的位置发生了变化?这是怎么回事?

最佳答案

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

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

关于c - 在gdb中运行后 `main`函数的移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57873573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com