在DLL文件中阻塞Reloc表

在DLL文件中阻塞Reloc表,dll,compiler-construction,portable-executable,Dll,Compiler Construction,Portable Executable,我编写汇编程序和编译器,几年后就可以直接编写PE+EXE文件 现在我将其扩展到DLL文件,并且我正在慢慢地实现。我正要开始生成一个块重定位表(我昨天才发现我需要一个) 但是,此表指定分组在4KB块内的重定位。我的问题是,如果一个可重定位字段(32位或64位)跨入下一个4K块,会发生什么?也就是说,从这个4096字节的虚拟地址页面跨越边界进入下一个页面 例如,如果64位可重定位字段在此页中从偏移量0xFFE开始,在下一页中从0x005结束(一个为2字节,另一个为6字节)。搬迁机制会解决这个问题吗?

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

现在我将其扩展到DLL文件,并且我正在慢慢地实现。我正要开始生成一个块重定位表(我昨天才发现我需要一个)

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


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

没关系。我设置了一个测试,看看会发生什么。这是一个大约700个64位地址的数组,故意错位,使一个字可以跨越4K边界,并检查了现有链接器生成的块表。(代码更难,因为我使用的链接器-gcc/ld-注入了大量自己的代码。另一个原因是我需要自己的解决方案)

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


我想这是唯一实用的方法(代码中重新定位的字段通常不会对齐),但如果文档中提到它,那就太好了。n

没关系。我设置了一个测试,看看会发生什么。这是一个大约700个64位地址的数组,故意错位,使一个字可以跨越4K边界,并检查了现有链接器生成的块表。(代码更难,因为我使用的链接器-gcc/ld-注入了大量自己的代码。另一个原因是我需要自己的解决方案)

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

我想这是唯一实用的方法(代码中重新定位的字段通常不会对齐),但是如果文档提到它,那就太好了。n