WinDbgでbaコマンド(Break on Access)を使用するにはどうすればよいですか?

mbl

私はこの非常に最小限のCプログラムを持っています:

#include <windows.h>

void funAdd() {
    int a = 2; // I want to break here
}

int CALLBACK
WinMain(HINSTANCE Instance,
    HINSTANCE PrevInstance,
    LPSTR CommandLine,
    int ShowCode)
{
    funAdd();
}

WinDbg内のアクセス時にブレークを使用してfunAdd()関数内でブレークしたいと思います。Visual Studioの分解により、int a = 2命令はメモリアドレスにあることがわかります002416BC

ここに画像の説明を入力してください

ここのドキュメントによると:https//docs.microsoft.com/en-us/windows-hardware/drivers/debugger/ba--break-on-access-

コマンドba r4 02416beを作成すると、デバッガーがfunAdd()関数内で中断することが予想されますが、コマンドを入力すると、次のエラーが発生しますData breakpoint must be aligned

私はこれを正しく理解していますか?もしそうなら、r4コマンドオプションに一致させるためにこのアドレスを4バイトに適切に整列させるにはどうすればよいですか?

ブラブ

0x2416beは、命令ポインタまたは命令の仮想アドレスです。

このアドレスにアクセスブレークポイントを設定するには、rまたはwを使用しないでください。eを使用する必要があります。

ba e 2416beこれは、位置合わせもサイズも必要ありません

あなたは、変数のデータブレークポイントを設定したい場合は、A

の仮想アドレス見つける必要があります

コンパイラは通常、変数アドレスを整列するため、通常、整列について心配する必要はありません。

dv / vaを使用します(ローカル変数の表示にはプライベートpdbが必要で
あり、windbgがローカル変数の名前をebp-xxではなくローカル変数に変更したため、プライベートpdbが必要です)

windbgのは次のように結果を吐くだろう地元のVAR A @ XXXXXX

ここで、xxxxxは変数aのアドレスです(2が格納されます)

このアドレスで)

このアドレスで必要に応じてbar4またはr2またはr1使用します

このアドレスはスタックにある可能性があり、このブレークポイントは実際に条件に達する前に何度も発生する可能性があることに注意してください

データ読み取りブレークポイントはグローバル変数に役立ちますが、本質的に動的なローカルアドレスやヒープアドレスにはあまり適していません

dvに任意の関数アドレスを指定して、関数localsを確認できます(private pdbが必要です)

0:000> dv /v /i /t /f funadd!funAdd
prv local  <virtual frame 2ffa84>-0x0004       int myvar

関数開始まで実行

0:000> g funadd!funAdd
eax=767fed5a ebx=7ffd4000 ecx=00000000 edx=01351000 esi=00000000 edi=00000000
eip=01351010 esp=002ffeb8 ebp=002ffebc iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
funadd!funAdd:
01351010 55              push    ebp

ローカルディスプレイを使用する

0:000> dv /V /i /t
prv local  002ffeb0          <virtual frame 2ffeb4>-0x0004       int myvar = 0n0

display typeコマンドを使用すると、ローカルの仮想アドレスも取得されます

0:000> dt -n myvar
Local var @ 0x2ffeb0 Type int
0n0

このアドレスに読み取りブレークポイントを設定できます

0:000> ba r4 0x2ffeb0

実行して、bpがヒットするのを待ちます

0:000> g
Breakpoint 0 hit
eax=767fed5a ebx=7ffd4000 ecx=00000000 edx=01351000 esi=00000000 edi=00000000
eip=01351014 esp=002ffeb0 ebp=002ffeb4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
funadd!funAdd+0x4:
01351014 c745fc02000000  mov     dword ptr [ebp-4],2 <<<<<<<<<  ss:0023:002ffeb0=00000000

値はまだローカルmyvarに書き込まれていません

0:000> bl
     0 e Disable Clear  002ffeb0 r 4 0001 (0001)  0:**** 


0:000> ? myvar
Evaluate expression: 3145392 = 002ffeb0

0:000> ? poi(myvar)
Evaluate expression: 0 = 00000000

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MS Accessでhibernateを使用するにはどうすればよいですか?

分類Dev

if条件でnetcatコマンドの終了コードを使用するにはどうすればよいですか?

分類Dev

AccessでExcel(2007)のトレンド関数を使用するにはどうすればよいですか?

分類Dev

sudoersでCmnd_Aliasでコマンド引数を使用するにはどうすればよいですか?

分類Dev

sudoersでCmnd_Aliasでコマンド引数を使用するにはどうすればよいですか?

分類Dev

Linuxで「source」コマンドで「tee」を使用するにはどうすればよいですか?

分類Dev

Python SQLiteでINコマンドを安全に使用するにはどうすればよいですか?

分類Dev

findコマンドをより効率的に使用するにはどうすればよいですか?

分類Dev

Gradleを使用してWindowscmdでコマンドを実行するにはどうすればよいですか?

分類Dev

Gradleを使用してWindowscmdでコマンドを実行するにはどうすればよいですか?

分類Dev

`〜/ .profile`でsudoを使用してコマンドを実行するにはどうすればよいですか?

分類Dev

USBを使用してUbuntuで「Make」コマンドを取得するにはどうすればよいですか?

分類Dev

Angularjs Protractorでコマンドライン引数を使用するにはどうすればよいですか?

分類Dev

WindowsコマンドラインでUnicode文字を使用するにはどうすればよいですか?

分類Dev

WindowsでImageMagickコマンドラインを使用するにはどうすればよいですか?

分類Dev

Clojureでコマンドライン引数を使用するにはどうすればよいですか?

分類Dev

Midnight Commanderでコマンドライン補完を使用するにはどうすればよいですか?

分類Dev

コマンドラインでプロキシを使用するにはどうすればよいですか?

分類Dev

Postgresqlコマンドラインでmwdumperを使用するにはどうすればよいですか?

分類Dev

ラテン文字以外でfmtコマンドを使用するにはどうすればよいですか?

分類Dev

Windowsコマンドプロンプトでtelnetを使用するにはどうすればよいですか?

分類Dev

pdfboxを使用して/ UFコマンドをPDFに追加するにはどうすればよいですか?

分類Dev

gcloudinitコマンドを実行せずにgcloudSdkを使用するにはどうすればよいですか

分類Dev

OptionParserを使用してコマンドラインに出力するにはどうすればよいですか?

分類Dev

sedコマンドで変数を使用するにはどうすればよいですか?

分類Dev

sedコマンドでファイル名を使用するにはどうすればよいですか?

分類Dev

findコマンドで正規表現を使用するにはどうすればよいですか?

分類Dev

xargsでエイリアスコマンドを使用するにはどうすればよいですか?

分類Dev

docker runコマンドで環境変数を使用するにはどうすればよいですか?

Related 関連記事

  1. 1

    MS Accessでhibernateを使用するにはどうすればよいですか?

  2. 2

    if条件でnetcatコマンドの終了コードを使用するにはどうすればよいですか?

  3. 3

    AccessでExcel(2007)のトレンド関数を使用するにはどうすればよいですか?

  4. 4

    sudoersでCmnd_Aliasでコマンド引数を使用するにはどうすればよいですか?

  5. 5

    sudoersでCmnd_Aliasでコマンド引数を使用するにはどうすればよいですか?

  6. 6

    Linuxで「source」コマンドで「tee」を使用するにはどうすればよいですか?

  7. 7

    Python SQLiteでINコマンドを安全に使用するにはどうすればよいですか?

  8. 8

    findコマンドをより効率的に使用するにはどうすればよいですか?

  9. 9

    Gradleを使用してWindowscmdでコマンドを実行するにはどうすればよいですか?

  10. 10

    Gradleを使用してWindowscmdでコマンドを実行するにはどうすればよいですか?

  11. 11

    `〜/ .profile`でsudoを使用してコマンドを実行するにはどうすればよいですか?

  12. 12

    USBを使用してUbuntuで「Make」コマンドを取得するにはどうすればよいですか?

  13. 13

    Angularjs Protractorでコマンドライン引数を使用するにはどうすればよいですか?

  14. 14

    WindowsコマンドラインでUnicode文字を使用するにはどうすればよいですか?

  15. 15

    WindowsでImageMagickコマンドラインを使用するにはどうすればよいですか?

  16. 16

    Clojureでコマンドライン引数を使用するにはどうすればよいですか?

  17. 17

    Midnight Commanderでコマンドライン補完を使用するにはどうすればよいですか?

  18. 18

    コマンドラインでプロキシを使用するにはどうすればよいですか?

  19. 19

    Postgresqlコマンドラインでmwdumperを使用するにはどうすればよいですか?

  20. 20

    ラテン文字以外でfmtコマンドを使用するにはどうすればよいですか?

  21. 21

    Windowsコマンドプロンプトでtelnetを使用するにはどうすればよいですか?

  22. 22

    pdfboxを使用して/ UFコマンドをPDFに追加するにはどうすればよいですか?

  23. 23

    gcloudinitコマンドを実行せずにgcloudSdkを使用するにはどうすればよいですか

  24. 24

    OptionParserを使用してコマンドラインに出力するにはどうすればよいですか?

  25. 25

    sedコマンドで変数を使用するにはどうすればよいですか?

  26. 26

    sedコマンドでファイル名を使用するにはどうすればよいですか?

  27. 27

    findコマンドで正規表現を使用するにはどうすればよいですか?

  28. 28

    xargsでエイリアスコマンドを使用するにはどうすればよいですか?

  29. 29

    docker runコマンドで環境変数を使用するにはどうすればよいですか?

ホットタグ

アーカイブ