我为什么要关心?我正在研究与安全性相关的应用程序,并且该应用程序已签名。重定位会使签名混乱,因此在运行时无法对其进行验证。
并不是我需要重新安置。一切都可以相对完成。也许慢一点。
我如何说服编译器发出无需重定位的代码?
Visual Studio 2015,某些部分的C ++和nasm,x64。
编辑:澄清一下,我仍然需要它与位置无关。因为我无法控制程序的加载位置。只是通过使用相对访问而不是重定位。
答案 0 :(得分:1)
尝试指定/FIXED
标志。
根据文档(https://docs.microsoft.com/en-us/cpp/build/reference/fixed-fixed-base-address?view=vs-2015):
指定/ FIXED时,LINK不会在程序中生成重定位部分。在运行时,如果操作系统无法在指定的地址加载程序,则会发出错误消息,并且不会加载程序。