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