c - 在 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
在内存中的位置发生了变化?这里发生了什么?
解决方案
第一个输出是在进程开始之前打印的。在这种情况下,gdb 打印二进制文件中的偏移量。
第二个输出是在进程终止之后,您可以看到进程内存空间中的实际地址。
推荐阅读
- html - 与显示同一页面的 hbs 路由
- python - 将对象类型的熊猫数据框列分解为字符串并分成不同的行
- macos - 如何阻止某些 Firefox 处理 tel 内容类型文件并弹出一些操作?
- code-coverage - gcov 得到与注释文件不匹配的戳记
- kotlin - HiveMQ MQTT 客户端:订阅多个主题
- symfony - Symfony 形式:Country State City 三动态下拉
- mysql - 从 SQL COUNT CASE WHEN 查询中删除重复条目
- javascript - 如何使 div 内未使用的空间像按钮一样?
- javascript - 如何使用 get 包在请求正文中传递变量
- python - 如何在 replit.com 上保存项目?