Visual Studio 2013项目属性无链接器选项如何启用?
Visual Studio 2013 C#项目无链接器选项的处理方案
- 你之前尝试的修改配置类型调出Linker选项卡的方案仅适用于VC++原生项目,C#/.NET项目属于托管项目体系,默认不会提供原生链接器配置入口,调整输出类型为动态库/应用程序也不会显示该选项,属于项目系统的正常差异,并非操作失误。
- 如果需要为C#项目输出的DLL/EXE调整ASLR(对应
/DYNAMICBASE配置)、DEP(对应/NXCOMPAT配置)特性,不需要调出链接器选项,直接通过VS自带工具即可实现和链接器配置完全一致的效果。
方案1:手动修改已编译文件的PE头标志
- 从开始菜单打开VS2013对应的「Developer Command Prompt for VS2013」开发人员命令行工具
- 进入目标文件所在目录,执行对应命令完成配置:
- 启用ASLR:
editbin /DYNAMICBASE 目标文件名.dll - 禁用ASLR:
editbin /DYNAMICBASE:NO 目标文件名.dll - 启用DEP:
editbin /NXCOMPAT 目标文件名.dll - 禁用DEP:
editbin /NXCOMPAT:NO 目标文件名.dll
- 启用ASLR:
- 配置完成后可执行以下命令校验PE头标志是否生效:
在输出结果中查找DLL characteristics段落,确认对应标志是否符合预期。dumpbin /headers 目标文件名.dll
方案2:配置生成后自动修改
如果需要每次编译项目时自动应用PE标志配置,不需要手动重复操作:
- 右键项目打开「属性」页,切换到「生成事件」栏目
- 在「后期生成事件命令行」输入框中填入对应editbin执行命令,例如需要同时禁用ASLR和DEP时,填入以下内容:
"$(DevEnvDir)..\Tools\bin\editbin.exe" /DYNAMICBASE:NO /NXCOMPAT:NO "$(TargetPath)" - 保存配置后,后续每次编译完成,VS会自动执行命令修改输出文件的PE标志,效果和C++项目中调整链接器对应参数完全一致。
说明:.NET程序的ASLR、DEP实际运行效果同时受运行时策略影响,上述操作修改的是PE文件头的标志位,和原生C++项目通过链接器选项配置的作用层级完全相同。
内容的提问来源于stack exchange,提问作者Prageeth Liyanage
相关产品推荐
相关产品推荐

