Joh*_*ter 19 c linux elf loader
我正在Linux下编写一个简单的用户空间ELF加载器(为什么?为了'有趣').我的加载器目前非常简单,只能加载包含与位置无关的代码的静态链接的ELF文件.
通常,当程序由内核的ELF加载程序加载时,它会被加载到自己的地址空间中.因此,数据段和代码段可以加载到ELF段中指定的正确虚拟地址.
但是,在我的情况下,我通过内核请求来自内核的地址mmap,并且可能会或可能不会获得ELF段中请求的地址.这对于代码段来说不是问题,因为它与位置无关.但是,如果未在预期地址处加载数据段,则代码将无法正确引用存储在数据段中的任何内容.
实际上,我的加载器似乎可以正常使用不包含任何数据的简单程序集可执行文件.但是一旦我添加数据段并引用它,可执行文件就无法正常运行或SEGFAULTs.
如果可能的话,我如何修复对数据段的任何引用以指向正确的位置?为此目的,是否在(静态)ELF文件中存储了重定位部分?
小智 8
如果修改.got部分中可用的绝对地址,(全局偏移表),程序应该可以工作.确保修改绝对地址计算以满足.text和.data之间的新距离,我担心你需要弄清楚这些信息的来源,对于你的架构.
请参阅:全局偏移表(特定于处理器)
祝好运.
| 归档时间: |
|
| 查看次数: |
4680 次 |
| 最近记录: |