自己动手构造编译系统:编译、汇编与链接2.5.1 地址空间分配
2023-09-11 14:16:02 时间
在汇编器生成的目标文件内,是无法确定数据段和代码段的虚拟地址的,因此将它们的段地址都设置为0。链接器是这些代码和数据加载到内存执行之前的最后一道处理,因此要为它们分配段的基址。
链接器按照目标文件的输入顺序扫描文件信息,从每个文件的段表中提取出各个文件的代码段和数据段的信息。假设可执行文件段加载后的起始地址是0x080408000,链接器从该地址开始,就像“摆积木”似的将所有文件的同类型段合并,按照代码段、数据段、“.bss”段的顺序依次决定每个段的起始地址,此时需要考虑段间对齐产生的偏移以及特殊的地址计算方式(参考第5章关于程序头表的描述)。
图2-18展示了链接器将目标文件a.o和b.o链接为可执行文件ab时,地址空间分配的效果。a.o的数据段大小为0x08字节,代码段大小为0x4a字节;b.o的数据段大小为0x04字节,代码段大小为0x21字节。链接后的可执行文件ab的数据段大小为0x0c字节,代码段大小为0x6d字节(对齐b.o的代码段消耗2字节)。代码段的起始地址为0x08048080,结束地址为0x08048080+0x6d=0x080480ed。数据段起始地址为0x080490f0,结束地址为0x080490f0+ 0x0c=0x080490fc。
图2-18 地址空间分配
相关文章
- Java 使用正则表达式取出图片地址以及跳转的链接地址,来判断死链(一)
- Another Redis Desktop Manager 链接redis,redis集群链接后用显示不全的问题
- 【10】动态链接:程序内部的“共享单车”
- JavaScript实现http地址自动检测并添加URL链接
- 使用Unified Communications Managed API获取Lync在线会议的链接地址
- python模块之HTMLParser解析出URL链接
- vite使用短链接
- 迅捷PDF转换器破解版使用说明,带CSDN资源下载链接(内附破解说明)
- Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL
- Facebook加大力度打击诱饵网站 欺骗性链接降级处理
- HTML 链接
- [数据结构]简单数据结构总结及链接{栈|队列|树|链表}
- centos7 中将执行文件python链接为python3后 如何保证 yum 功能不受影响
- mysql jar包下载(直接链接下载)
- 我的红外arduino链接,!!!!
- 点击链接打开微信
- Google Spreadsheet Add-on Links Extractor 谷歌表格插件链接提取器的制作与发布(附源码)