1

PEファイル(.Netアセンブリであることがわかっています)を開き、.Netバイトコードがどこにあるか(理想的にはエントリポイントから開始)を見つけたいと思います。PEヘッダーデータ(エントリポイントRVA)を使用すると、mscoree.dllからCorExeMainを呼び出すスタブに移動できます。

これは私が探しているものではありません。mscorlibによって実行されるバイトコードを見つけたいと思います。C ++を使用し、ildasm、dumpbinなどの外部ツールを使用せずにそれを行うにはどうすればよいですか?私はすでにPEヘッダーを解析して、イメージベース/RVAの意味を知ることができます。ILバイトコードの場所に関する十分な情報がどこにあるのかわかりません。

4

3 に答える 3

4

ECMA-335をご覧ください。ファイル形式の詳細は、パーティションIIのセクション22-25にあります。しばらく前にパーサーを書き込もうとしたときに、いくつかのバグを見つけたのを覚えているようですが、少しの忍耐力ですべて実行可能です。

于 2010-09-14T08:48:26.060 に答える
3

おそらく、コードを最初から作成するのではなく、 mono(cil_coff.h、pedump.c)から取得します。

于 2010-09-14T09:01:12.380 に答える
0

Windowsには、そのためのCOM APIであるIMetaDataImport(ジェネリックスをサポートするIMetaDataImport2によって拡張されています)があります。しかし、その使用例はかなり不足しています。一見あまり維持されていないがオープンソースのILデバッガー/エディターダイル(毎週のビルドでは.NET 4のみをサポート)がそれを使用しているため、コードを確認できます。Dileの作者も、そのAPIの使用に関するブログ投稿を書いていますが、それはかなり曲がりくねっています。スパムルールのためにリンクが指定されていません。「アセンブリからタイプを読み取る」ためのGoogle。

.NETSDKに付属しているMicrosoftのmdbgもそれを使用します。残念ながら、mdbgソースは.NET2.0バージョンでのみリリースされています。mdbgSample21.EXEのGoogle。

于 2011-12-11T11:42:24.647 に答える