名前付きメモリ セクションを使用して通信するプログラムがいくつかあります。ユーザー モードまたはカーネル モードのいずれかで、WinDBG からこの共有メモリ セクションの内容を表示する方法はありますか? 私はそれへのポインターを持っていませんが、名前は知っています。
2 に答える
あなたが望むものを正確に得ることなく、私たちの共有メモリでこれをやろうとしましたが、後世のためにここにメモを入れています:
- 名前からハンドルを取得する簡単な方法は見つかりませんでしたが、「!handle 0 f」を実行して出力を検索すると、カーネル オブジェクトの名前とそのハンドル ID を確認できます: get handle from this .
- 明らかに、共有メモリカーネルオブジェクトにはプロセス固有のアドレスがありませんが、 .call /s KnownFuncWithSamePrototype MapViewOfFileEx は有効なポインターのように見えるものを返します
'.call' を機能させるには完全なシンボルが必要ですが、MapViewOfFile(Ex) にはそれがありません。たまたまコードでポインターを返し、6 つのパラメーターを受け取る関数を見つけたので、再コンパイルする必要はありませんでした。これを機能させるために (これが上記の KnownFuncWithSamePrototype の意味です)。これがあなたにとっての選択肢かどうかはわかりません。
お役に立てれば!
ユーザー モード デバッガーを使用して... 名前付きメモリ セクションへのアクセスを取得する (つまり、OpenFileMapping を呼び出してから MapViewOfFile を呼び出す) 非常に単純なテスト アプリを作成し、そのアプリをデバッガーで実行することは可能でしょうか? セクションへのアクセスを取得するための呼び出しを通り越して、そのセクションのアプリのビューを調べることができるはずです。
(この MSDN ページの「2 番目のプロセス」という見出しに、プロセスが名前付きの共有メモリ セクションにアクセスし、それをアドレス空間にマップするためのサンプル コードが記載されています。)
私は通常、このようなデバッグに役立つ小さなテスト ツールを作成するのが好きです...簡単にしたい場合は、テスト ツールを作成して、接続されているデバッガーを自動的に中断することもできます (DebugBreak などの関数を使用)。 .