2010-09-14 25 views
1

我想打開一個PE文件(我知道它是一個.Net程序集)並且找到.Net字節碼是(理想情況下從入口點開始)。我知道PE頭數據(入口點RVA)帶我只需要從mscoree.dll調用CorExeMain的存根。如何以編程方式在.Net可執行文件/ dll中找到字節碼(CIL)?

這不是我在找的東西。我想找到由mscorlib運行的字節碼。我怎樣才能使用C++和沒有外部工具,如ildasm,dumpbin等?我已經可以解析PE頭並知道圖像庫/ RVA的含義。我無法弄清楚在哪裏可以找到關於IL字節碼位置的足夠信息。

回答

4

看看ECMA-335 - 文件格式的細節在那裏,在分區II第22-25部分。我似乎記得前一段時間我試圖編寫解析器時發現了一些錯誤,但有一點毅力,它都是可行的。

3

我可能會從mono(cil_coff.h,pedump.c)獲取代碼,而不是從頭開始編寫代碼。

0

在Windows上,它有一個COM API,IMetaDataImport(由支持泛型的IMetaDataImport2擴展)。它的使用的例子,但相當缺乏。看起來不那麼維護但開源的IL調試器/編輯器dile(僅支持每週版本中的.NET 4)使用它,因此您可以查看它的代碼。 Dile的作者也寫了一篇關於使用該API的博客文章,但它很囉嗦。由於垃圾郵件規則而未給出鏈接。 Google用於「從裝配中讀取類型」。

Microsoft的mdbg與.NET SDK一起提供,它也使用它。不幸的是,mdbg源碼僅針對.NET 2.0版本發佈。 Google for mdbgSample21.EXE。

相關問題