2010-01-24 72 views
2

我想追加一些二進制數據到我的可執行文件的末尾。這只是爲了讓我的程序變成一個文件。我嘗試使用UpdateResource,但是我用特定的數據觸發了一些內部錯誤,所以我必須使用另一種解決方案。所以我需要知道原始文件大小,以確定是否實際上有任何數據附加到它。是否有可能從PE頭獲取這些信息?通過PE頭找出PE文件結束的位置?

謝謝!

+0

你是什麼意思「我用我的具體數據打到它裏面的一些錯誤」?據我所知UpdateResource只適用於二進制數據塊,因此這些數據的細節應該沒有關係。 – Luke 2010-01-24 19:01:17

+0

'UpdateResource' _can_使用二進制blob數據(類型爲RT_RCDATA)。但是,如果您通過其他方式,數據_do_的具體細節就很重要。例如。 「所有包含字符串或文本的數據都必須採用Unicode格式。」這表明您在拒絕您的ASCII字符串時可能會遇到「bug」。 – MSalters 2010-01-25 13:04:29

+0

僅適用於使用具有字符串數據的預定義數據類型之一。 RT_RCDATA只是一個二進制塊; Windows不知道或關心它包含的數據類型。只要你正確地序列化和反序列化它就可以正常工作。 – Luke 2010-01-25 15:53:51

回答

0

如果你能得到每個塊的大小,你也許能夠。這可能是幫助:

http://msdn.microsoft.com/en-us/library/ms809762.aspx

+0

我試着總結每個塊的大小,有時它幾乎可以工作,有時它給出的結果是文件大小的兩倍。 – bobef 2010-01-26 11:26:14

+0

收回雙文件大小的東西。這是由於加載文件的路徑不同於我的想法。您還需要將nt_header.OptionalHeader.SizeOfHeaders添加到計算中,然後它似乎適用於某些文件:) – bobef 2010-01-26 17:31:48

0

你會發現這個PE文件閱讀器非常有用。 您應該能夠使用此軟件從PE標頭中提取適當的值。 提供完整源代碼。

http://www.objectmedia.ltd.uk/freeSoftware/peFileDLL.html

也有在同一地點PE文件資源管理器(附源碼)。目前我無法發佈多個網址,因爲我沒有足夠的狀態點,因此您必須先解決它。

PE文件瀏覽器允許您瀏覽PE文件的內容。

我寫了我所指的軟件(後來被Matt Pietrek稱爲LIPOsuction的軟件工具啓發了許多許多衛星)。