1

我有一個可執行文件,它需要一個用於依賴關係的dll文件。我想知道是否可以實際修補一個需要dll的PE文件,該文件可以從位於內存或資源中的指針讀入入口點。如果這可能,我該怎麼做?合併DLL到PE(修補)

感謝您的幫助:)

+0

我猜它比我想象的要複雜。謝謝你的答案。 –

+0

轉貼爲答覆,因爲我猜我寫的不是真正的評論。 –

+1

如果您要實現的是單個重新分發的可執行文件,您可以將DLL作爲資源存儲在可執行文件中,並將其提取到磁盤並在程序第一次運行時加載它。 –

回答

2

這不僅僅是在DLL的依賴可執行需求的切入點。加載DLL時,系統(PE加載程序)僅調用DllMain。動態加載程序在導入地址表等結構中解析導入的地址,並且在運行時,應用程序甚至可以通過GetProcAddress動態解析地址。

理論上可以將DLL重定位/基於內存的某些未使用部分,並將所有對其功能的引用都修補到重定位代碼,但這非常困難,需要對操作系統有深入的瞭解。我不確定你在尋找什麼樣的答案。實現這一目標所需的步驟?這將是非常不平凡的,我不知道它已經完成之前(我看到最接近的是ILMerge這是用於.NET程序集)。從本質上講,如果DLL在編譯時被靜態鏈接,那麼您將代碼轉換爲等效代碼。

相關問題