呼び出しスタックと逆アセンブリの疑い

assembly debugging visual-studio windbg
呼び出しスタックと逆アセンブリの疑い

3つの疑問1)以下のようにコールスタックを取得したとします。

    [email protected]()  + 0x28 bytes
[email protected]()  + 0xb7 bytes
[email protected]()  + 0x51 bytes
[email protected]()  + 0x1b bytes

各関数の最後に記載されているバイトは何ですか? 最初のステートメントのように0x28バイトです。

2)どのようにVSのWindowsシステムDLLにブレークポイントを置くには? windbgでは、WindowsシステムDLLの特定の機能を次のように検索できます。

>x wininet!*funcA*

このコマンドで、この関数のアドレスを取得してブレークポイントを設定できます。 Visual Studioでも同じことができますか?

3)dllのSymbolファイルがありません。 私が逆アセンブルしているコールスタックは

7814XXX0  call        dword ptr [[email protected] (781EXXXXh)]

上記の呼び出しスタックの「+ imp +」とは何ですか? これは、このwindows関数が他のdllにフックされているということですか

  2  0


ベストアンサー

  • 1)*これらは、そのスタックフレーム内で実行されている命令の、関数の開始位置に対するバイトオフセットです。

  • 2)* New Breakpointダイアログに次のように入力します。

{,,user32.dll}[email protected]

ここで、「+ 16+」は、関数が予期するパラメーターのバイト数です(Win32では、これはほとんど常にパラメーターの数の4倍です)。 `+ W `はAPIのUnicodeバージョンを指します。 ANSIアプリケーションをデバッグする場合は、「 A +」を使用します。

  • 3)* + imp +`はDLLインポートテーブルを参照します-現在のモジュールのコードは `+ JMP +`を介して実際のWindows DLLにリダイレクトされ、 `+ imp +`シンボルはその `+ JMP +を参照します。 これらの `+ JMP +`は、呼び出しを行うDLLまたはEXEのテーブルに存在します。

9


質問の最初の部分では、言及されているバイトオフセットは実行中の関数内での位置であり、その結果、後続の呼び出しはスタック内でより高くなります。

1


1)これらは、関数の先頭からスタックトレースが作成されたときに実行されていた行までのオフセットです。

2 ごめんなさい。

0


タイトルとURLをコピーしました