每當我用C++ Builder(版本XE4,但以前的版本也這樣做)以發佈模式構建Win32 EXE時,它總是創建一個導出目錄併爲我的項目中的每個單元導出一個Initialize/Finalize條目。這導致成千上萬的不必要的出口。 Win64版本也有類似的問題,但是生成的導出並不是很多。禁用C++ Builder導出單元名稱?
快速檢查與DUMPBIN工具提供了以下(略)輸出:
Section contains the following exports for PROJECTX.exe
00000000 characteristics
0 time date stamp Thu Jan 01 00:00:00 1970
0.00 version
1 ordinal base
1205 number of functions
1205 number of names
ordinal hint RVA name
1046 0 003ECF44 @[email protected]
1077 1 003ED64C @[email protected]
1053 2 003ED0D4 @[email protected]_
1047 3 003ECF5C @[email protected]
1049 4 003ECF88 @[email protected]
...
261 E0 000BD758 @@[email protected]
260 E1 000BD748 @@[email protected]
153 E2 0007EE70 @@[email protected]
152 E3 0007EE60 @@[email protected]
...
我擔心的是除了增加了PE文件的大小和加載時間,這些出口項目提供可能幫助反向元設計我的二進制文件,因此我想刪除它們。
hacky解決方案是在生成PE映像導出目錄後手動刪除它,但是必須在C++ builder IDE /編譯器中爲此解決此問題。
爲什麼C++ Builder會這樣做,以及如何禁用生成這些導出目錄條目?
更新:建立一個空的VCL形式的Win32發佈模式的應用程序默認生成以下出口...
Section contains the following exports for Project1.exe
00000000 characteristics
0 time date stamp Thu Jan 01 00:00:00 1970
0.00 version
1 ordinal base
5 number of functions
5 number of names
ordinal hint RVA name
3 0 000036C8 @@[email protected]
2 1 000036B8 @@[email protected]
5 2 00006974 _Form1
1 3 00001F59 __GetExceptDLLinfo
4 4 000060AC ___CPPdebugHook
我從來沒有見過這種情況。我敢打賭,這不會發生在一個香草項目上。在這種情況下,你的項目有什麼不同? –
我剛剛在發佈模式下構建了一個空的VCL表單應用程序,並且有鍋爐板的Finalize/Initialize導出條目Unit1 TForm類 – QAZ
這對於Delphi不會發生。所以我刪除了Delphi標籤。 –