自己动手构造编译系统:编译、汇编与链接1.3.4 链接
这样生成的可执行文件hello便能正常执行了。
我们使用objdump命令查看一下静态链接后的可执行文件内的信息。由于可执行文件中包含了大量的C语言库文件,因此这里不便将文件的所有信息展示出来,仅显示最终main函数的可执行代码。
080482c0 main :
80482c0: 55 push %ebp
80482c1: 89 e5 mov %esp,%ebp
80482c3: 83 e4 f0 and $0xfffffff0,%esp
80482c6: 83 ec 10 sub $0x10,%esp
80482c9: b8 28 e8 0a 08 mov $0x80ae828,%eax
80482ce: 89 04 24 mov %eax,(%esp)
80482d1: e8 fa 0a 00 00 call 8048dd0 _IO_printf
80482d6: b8 00 00 00 00 mov $0x0,%eax
80482db: c9 leave
80482dc: c3 ret
从main函数的可执行代码中,我们发现汇编过程中描述的无法确定的符号地址信息在这里都被修正为实际的符号地址。如“Hello World !”字符串的地址为0x080ae828,printf函数的地址为0x08048dd0。这里符号_IO_printf与printf完全等价,call指令内部相对地址为0x000afa,正好是printf地址相对于call指令下条指令起始地址0x080482d6的偏移。
相关文章
- VS编程常见的编译和链接错误
- 自己动手构造编译系统:编译、汇编与链接1.3 GCC的工作流程
- 自己动手构造编译系统:编译、汇编与链接1.3.2 编译
- 自己动手构造编译系统:编译、汇编与链接2.1.1 词法分析
- 自己动手构造编译系统:编译、汇编与链接2.1.2 语法分析
- 自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析
- 自己动手构造编译系统:编译、汇编与链接2.2 x86指令格式
- 自己动手构造编译系统:编译、汇编与链接导读
- C语言生成可执行文件的过程——预处理、编译、汇编、链接。学习笔记
- 【linux】:老师问什么是爱情,我说了句:软硬链接和动静态库
- 【Linux操作系统】程序的编译和动静态链接
- 下载链接提取
- 恒玄科技BES250解决方案之双耳链接调试总结和源码分析
- vmware--查看链接克隆依赖关系
- Oc 编译错误、符号与链接、加载
- WhatsApp封锁了同行Telegram的链接
- 编译(- c)某个源文件生成目标文件只需要路径有调用函数的头文件,链接(- o)成可执行文件需要加上实现函数的目标文件
- Linux中为什么目录不能创建硬链接
- 地图图表生成工具链接
- Kodi+Alist v3 挂载阿里云盘他人分享链接打造在线影视库