Operating system 打包器-加载exe而不重新定位

Operating system 打包器-加载exe而不重新定位,operating-system,exe,portable-executable,relocation,Operating System,Exe,Portable Executable,Relocation,我试图通过编写一个简单的exe打包程序来更好地理解PE格式 我的第一步是编写一个exe加载器,该加载器将exe文件作为参数加载到地址空间中。 我的问题是,许多exe没有基重定位表,因为它们希望在首选的imagebase地址加载。在我的加载程序(以及后来我想象的简单打包程序)中,加载程序已经在0x400000处加载,这迫使原始exe加载到另一个地址(因此需要重新定位) 我试图看看UPX是如何做到这一点的,但我在源代码中迷失了方向 我看到的一个解决方案是重新定位解包程序(或加载程序),使其加载到一个

我试图通过编写一个简单的exe打包程序来更好地理解PE格式

我的第一步是编写一个exe加载器,该加载器将exe文件作为参数加载到地址空间中。 我的问题是,许多exe没有基重定位表,因为它们希望在首选的imagebase地址加载。在我的加载程序(以及后来我想象的简单打包程序)中,加载程序已经在0x400000处加载,这迫使原始exe加载到另一个地址(因此需要重新定位)

我试图看看UPX是如何做到这一点的,但我在源代码中迷失了方向

我看到的一个解决方案是重新定位解包程序(或加载程序),使其加载到一个地址,该地址将保留首选的exe imagebase地址,以避免以后的任何重新定位,但这似乎有点复杂

还有别的办法吗

UPX是如何做到的

是否可以重建exe的基重定位表

致以最良好的祝愿,
Maxime

您是否尝试过执行exe?在x64上,我不认为这些修正是必要的。据我所知,MSV生成的图像包含RVA或RIP相对地址,因此无需重新定位。您是否尝试过执行exe?在x64上,我不认为这些修正是必要的。据我所知,MSV生成的图像包含RVA或RIP相对地址,因此无需重新定位。