Visual studio 在VisualStudio中创建无需重新定位的可执行文件

Visual studio 在VisualStudio中创建无需重新定位的可执行文件,visual-studio,visual-c++,compilation,portable-executable,Visual Studio,Visual C++,Compilation,Portable Executable,我为什么在乎?我正在开发与安全相关的应用程序,并已签署。重新定位会弄乱签名,因此在运行时无法对其进行验证 而且我也不需要搬迁。每件事都可以相对地做。也许慢一点 如何说服编译器在不重新定位的情况下发出代码 Visual Studio 2015、C++和NASM的一些部分,X64 .< 编辑:澄清一下,我仍然需要它独立于职位。因为我无法控制程序的加载位置。只需使用相对访问而不重新定位。尝试指定/FIXED标志 根据文件(): 指定/FIXED时,LINK不会在程序中生成重新定位节。在运行时,如果操

我为什么在乎?我正在开发与安全相关的应用程序,并已签署。重新定位会弄乱签名,因此在运行时无法对其进行验证

而且我也不需要搬迁。每件事都可以相对地做。也许慢一点

如何说服编译器在不重新定位的情况下发出代码

Visual Studio 2015、C++和NASM的一些部分,X64 .<


编辑:澄清一下,我仍然需要它独立于职位。因为我无法控制程序的加载位置。只需使用相对访问而不重新定位。

尝试指定
/FIXED
标志

根据文件():

指定/FIXED时,LINK不会在程序中生成重新定位节。在运行时,如果操作系统无法在指定的地址加载程序,则会发出错误消息,并且不会加载程序


很好,但我仍然需要该程序独立于位置。所以这个解决方案对我不起作用。啊!我不确定cl是否支持使用位置无关的代码生成PE二进制文件,不过(也就是说,我很确定它不能这样做,如果需要位置无关的代码,重新定位是唯一的选择)。在这种情况下,您也不能使用任何静态导入(导入会弄乱签名)写位置无关的代码是可能的,但是足够小而且非常有限。你需要非常深刻的内部知识。然而,对于x64,因为它主要使用相对寻址,这比x86更容易实现