メモリ内の値に従ってlldbに条件付きブレークポイントを設定する構文は何ですか?
何かのようなもの:
breakpoint modify -c "memory read -Gx $esp+4 == 0"
または、条件が false の場合に続行するようにブレークポイント コマンドを設定できると思いますが、その構文も見つかりませんでした :)
メモリ内の値に従ってlldbに条件付きブレークポイントを設定する構文は何ですか?
何かのようなもの:
breakpoint modify -c "memory read -Gx $esp+4 == 0"
または、条件が false の場合に続行するようにブレークポイント コマンドを設定できると思いますが、その構文も見つかりませんでした :)
breakpoint modify
の--condition
引数は C++ 式を取り、ブレークポイントにヒットしたときにそれを評価し、結果がゼロ以外 (true) の場合、ブレークポイントは停止します。
(lldb) br s -n foo
Breakpoint 1: where = a.out`foo, address = 0x00001f30
(lldb) br mod -c '*(int*) ($esp+4) == 10'
(lldb) r
Process 11102 launched: '/private/tmp/a.out' (i386)
Process 11102 stopped
* thread #1: tid = 0x42c6f9, 0x00001f30 a.out`foo, queue = 'com.apple.main-thread, stop reason = breakpoint 1.1
#0: 0x00001f30 a.out`foo
a.out`foo:
-> 0x1f30: pushl %ebp
0x1f31: movl %esp, %ebp
0x1f33: pushl %eax
0x1f34: movl 8(%ebp), %eax
(lldb) x/x $esp+4
0xbffffbf0: 0x0000000a
(lldb)
かっこで囲まれて$esp+4
いるのは、ポインター演算が size-of- にならないようにするためint *
です。これらの括弧がないと、式は を逆参照し$esp+16
ます。
引数がレジスタで渡されるプラットフォーム (いくつかの引数については x86_64、armv7、arm64) では、lldb はこれらの種類のブレークポイント条件に便利な便利なレジスタ エイリアス 、 、 などを$arg1
提供します。$arg2