2011-09-27 75 views
8

有沒有人注意到,如果你導入一個exe文件作爲資源,它得到重定位,似乎它的PE頭被重建?C++ visual studio 2010 exe中的資源獲取Rebased?

有時候,這是令人討厭的。有誰知道如何禁用rebasing!?

重現步驟在C++:

1)編譯的hello world並手動設置其基地址(在屬性),以讓說0x1000000

2)使第二個項目幷包括世界你好成資源。同樣手動設置其基地址如上。

3)建立第二個項目

4)提取資源的exe和與PE編輯器檢查它!它被設置回0x400000。爲什麼?!

+0

您的配置根據http://msdn.microsoft.com/en-us/library/hh7adf4f.aspx,你可能有問題:請加鏈接器參數。無論如何,我認爲有很多可以重塑PE的程序,所以也許可以考慮嘗試一下...... –

+0

editbin.exe據我瞭解,是一個外部程序,可以在編譯後運行。重建PE頭不會對上述情況產生任何影響。你錯過了這一點。 – Ray

+4

資源編譯器和資源API都不知道有關EXE文件的任何信息。他們把它們當作一個字節塊來對待。因此,他們無法做任何事情來改變基地址。問題在於別處。 –

回答

1

您如何將EXE作爲資源加入到第二個項目中?

使用這些定義:

#define BINFILE 222 
#define IDR_MYFILE 101 

如果我引用的可執行文件在我的.rc文件作爲指向原來的文件,如:

IDR_MYFILE BINFILE "S:\\mysource\\t1\\Release\\t1.exe" 

然後,在提取後,我的嵌入式EXE資源沒有重新設計,但保留了我的設計。

+0

是的。多數民衆贊成我如何參考exe文件。我正在爲此煩惱。正如Hans Passant所建議的,我會尋找其他原因。 – Ray

+0

也許你是如何從編譯後的EXE中提取它的?我用PE資源管理器從EXE 2中提取EXE 1。它只是工作。 – Joe

+0

我使用visual studio本身來導出二進制文件。右鍵單擊該文件並選擇導出。應該是一樣的。我想我縮小了這個問題。我曾經有一個混淆器。也許有些東西因爲這個項目太舊而落後了。 – Ray

相關問題