將/ TSAWARE鏈接器標誌添加到我的項目之一(Visual Studio 6)後,我驚訝地發現PE文件(.idata)中有一個新節。如果我不設置標誌,則導入將合併到.rdata中。/TSAWARE鏈接器標誌對PE可執行文件做了什麼?
爲了說明 「問題」,我們開始了一個簡單的控制檯程序:
#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更改可執行文件最終不能在某些系統上工作?
這也是我的猜測,除非有人從MS回覆,我想我們永遠不會知道。 – Anders 2009-08-31 16:48:23
根據Microsoft自己的文檔,/ TSAWARE鏈接程序標誌將EXE PE標誌設置爲禁用C:\ Windows主目錄重定向,註冊表重定向和其他TS環境攻擊,旨在保護您在運行不支持TS的應用時一個TS環境。 – 2011-11-21 17:54:18