阻止DLL文件中的重定位表

问题描述

我编写了汇编器和编译器,几年后就可以直接编写PE + EXE文件。

现在,我将其扩展到DLL文件,然后慢慢到达那里。我将要开始生成一个块重定位表(昨天才发现我需要一个)。

但是,此表指定了4KB块内分组的重定位。我的问题是,如果可重定位字段(它将是32位或64位)越过进入下一个4K块,将会发生什么?也就是说,从这个4096字节的虚拟地址页跨越边界进入下一页。

例如,如果64位可重定位字段在此页面的偏移量0xFFE处开始,在下一个偏移量0x005处结束(一个字节为2个字节,另一个字节为6个字节)。搬迁机制会处理吗?如果没有,我该怎么办?

解决方法

没关系。我设置了一个测试,看看会发生什么。这是一个由约700个64位地址组成的数组,它们故意不对齐,以使一个字可以越过4K边界,并检查了现有链接程序生成的块表。 (因为我使用的链接器-gcc / ld-自己注入了很多代码,所以对代码更加讨厌。另一个原因是我需要自己的解决方案。)

确实有一个64位重定位项,它从偏移量0xFFB开始。

我想这是唯一可行的方法(代码中的重定位字段通常不会对齐),但是如果文档中提到它会很好。n

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...