我們有這種情況,我們有大量的相互關聯的DLL構成了我們的產品。這是一個非常「古老」的產品(因爲它已經發展了20年),並且在過去由於Visual Studio的幾個版本的結構打包的不同默認而受到影響。是否有可能找到DLL中聲明的結構的大小?
因此,在DLL頭文件中沒有使用#pragma pack
但在工程屬性中設置了結構對齊的許多情況下,我們可能會遇到導入DLL的項目(通過它lib和header)具有不同的結構對齊,並可能導致結構大小不匹配。
由於「事故」可以正確確定結構的大小,如果結構的所有成員都是unsigned int
,那麼DLL中的pack(4)
和導入項目中的pack(2)
可以正常工作。當然,直到某人修改一個結構來添加一個bool
爲例。
我想通過將#pragma pack
語句添加到所有導出模塊的頭文件中來消除所有這些潛在的混淆,但首先要評估我們當前代碼中是否存在任何此類暴露(考慮難以跟蹤運行時錯誤在這裏)。另外,在構建過程中引入一些自動檢查以確保我們永遠不會遇到這些情況,即使使用第三方DLL或LIB也是有用的。
所以,我的問題:
是否有可能,從編譯的DLL,或其相關LIB,以確定在當時的DLL力是什麼結構對齊編譯?同樣,是否可以發現這個EXE?
我想知道的是,如果PE格式或LIB(是COFF?)中有什麼可用於查找此信息嗎?
UPDATE
好了,沒有什麼好來自檢查庫和DLL與DUMPBIN,所以我要去嘗試從我們產生從我們的發佈版本的PDB文件的一些信息。我found this作爲一個起點...
Dumpbin/HEADERS可能會告訴你,如果確實如此,那麼有一個編程方式可以找到。 –
謝謝@jeffamaphone - 我會做一些虛擬的DLL來看看我可以從輸出中收集什麼。不要屏住呼吸,但它是值得一試。 –