添加/ TSAWARE链接器标志,以我的项目(的Visual Studio 6)之一后,我惊讶地发现,在PE文件(的.idata)一个新的部分。 如果我没有设置标志,进口被合并到.rdata。
为了说明“问题”,我们开始了一个简单的控制台程序:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
:并用编译cl /Og /O1 /GF /WX /c main.c
然后用链接
-
link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:a.exe main.obj
-
link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:b.exe /TSAWARE main.obj
让我们比较DUMPBIN输出:
Dump of file a.exe
File Type: EXECUTABLE IMAGE
Summary
4000 .data
1000 .rdata
5000 .text
Dump of file b.exe
File Type: EXECUTABLE IMAGE
Summary
4000 .data
1000 .idata
1000 .rdata
5000 .text
因此,出于某种原因,链接器决定进口不能合并。
但是,如果我们运行editbin /TSAWARE a.exe
在PE可选头只有DLL特征字段改变。
谁能解释这样对我? 这是一个错误的链接,或者可以通过改变EDITBIN可执行最终没有工作在某些系统上?