私はC#のネイティブコード生成で遊んでいます。私はHeapCreate
とHeapAlloc
を使用して、x86-64命令を書き込む実行可能メモリを割り当てています。次にMarshal.GetDelegateForFunctionPointer
を使用して.NETデリゲートに変換して呼び出します。私は適切に作成し、定数値を返す単純な関数を呼び出すことができます。.NETアプリケーションで割り当てられた実行可能メモリをステップ実行
問題は、私がVS2010でその機能に入ることができないことです。コール・オペコードの逆アセンブリウィンドウで「ステップイン」を使用すると、単にステップオーバーして、逆アセンブルされた機能が表示されることはありません。逆アセンブリウィンドウで実行可能メモリアドレスを参照しようとしましたが、そのアドレスにブレークポイントを追加しましたが、Visual Studioはメモリが実行可能ではないと訴えています。私も "int 3"命令を生成しようとしましたが、警告なしでアプリケーションが終了するだけです(Environment.Exit
が呼び出されたように)。私はC++で同じテクニックを使って関数を生成して呼び出す簡単なテストプログラムを実行しました。問題なく呼び出していくことができます。
.NET Visual Studioプロジェクトで割り当てられた実行可能メモリのチャンクで生成したネイティブ関数にステップインするにはどうすればよいですか?これができないようにするものは何ですか? (私は「私のコード」オプションをチェックしていません)
私はそのような旗しか忘れていないと思った。 Visual Studioはまだ何らかの理由で呼び出しに入ることはありませんが、 "int 3"ブレークポイントをインジェクトすると機能し、そこからステップできます。理想的ではありませんが、私はこのように働くことができます。ありがとう! – Trillian