2016-09-26 61 views
0

我在C++中編寫了一個PE打包程序,它將可執行程序加載到其進程空間中,修復了IAT和重定位,然後調用入口點。在從本地進程的.NET PE的內存負載中

我的問題是不支持.NET:我沒有搜索.NET PE格式,它只是一個32位可執行文件,入口點設置爲導入函數(_CorExeMain)。

如果我把它叫做,Windows只是彈出一個錯誤,告訴我,我沒有安裝.NET。

我也讀過.NET PE可執行文件在DataDirectory中有一個特殊的COM頭,但我不知道如何處理它。

我希望有人能幫助我。
在此先感謝

+0

PE只是一個容器格式,就像AVI一樣。它不能保證內部是什麼。它僅僅定義了一個協議,在哪裏以及如何編碼信息。 .NET程序集使用PE文件格式的事實並不意味着,您可以簡單地將它加載爲本地(非託管)DLL。您必須[託管CLR](https://msdn.microsoft.com/en-us/library/ms404385.aspx)以激活託管程序集中的類型。另外,.winmd文件也會重新使用PE文件格式(但不包含任何代碼)。 – IInspectable

+0

相關閱讀:[.NET程序集剖析 - CLR加載程序存根](https://www.simple-talk.com/blogs/anatomy-of-a-net-assembly-the-clr-loader-stub/ )。 – IInspectable

回答

0

很明顯,你的想法並不像.NET那樣工作。

您的「packed」可執行文件只是一個本機可執行文件,其代碼是一個解包器,其數據是壓縮的實際可執行文件。運行時,Windows預計並獲取本機代碼。

對於.Net可執行文件,您顯然應該這樣做:編寫一個.Net可執行文件,其代碼是一個解包器,其數據是壓縮的.Net字節碼。