0

私はwinappdbgフレームワークを使用してPythonでデバッガーを構築しています。

ブレークポイントを設定するためにevent.debug.break_at(event.get_pid()、address)を使用していくつかのブレークポイントを設定できますが、certinブレークポイントを設定した後(設定中ではなく、プログラムがそれらにヒットすると!)アクセス違反が発生します例外。

たとえば、アクセスポイントを0x48d1eaまたは0x47a001に設定できますが、0x408020に設定すると例外が発生します。

モジュールのベースアドレスは0x400000です。

0048D0BE: xor esi,eax

0048D0C0: call [winamp!start+0x25c1]

760DCC50: add [ebx],dh

Access Violation

Exception event (00000001) at address 779315DE, process 9172, thread 9616

ところで、IDAによって生成されたpidaファイルからブレークポイントを設定するためのアドレスを取得しています。ファイルをリベースしたので、アドレスを揃える必要があります

ありがとう!

4

2 に答える 2

0

私の最初の推測は、命令の途中でブレークポイントを設定しようとしているということです。私の 2 番目の推測では、レジスタの内容も変更しており、それが [ebx] への書き込み時のアクセス違反の原因です。(また、0x779315DE はおそらく winamp.exe ではなく ntdll.dll にあることに注意してください。したがって、まったく別のものである可能性があります)。

しかし、これ以上の情報がないと正確にはわかりません。あなたが言及したアドレスにもコードを投稿していただけますか?例外を続行して、何が起こるかを確認しましたか? Microsoft のデバッガ (ntsd.exe) を試して、問題が WinAppDbg に固有のものであるかどうかを確認する場合と同様に、レジスタの内容も役立ちます。

IDA からのアドレスについては、代わりに相対アドレスを使用して、ASLR での問題を回避できます。たとえば、「winamp」モジュール ベースが 0x400000 で、ブレークポイントが 0x408020 にある場合、次のように「winamp!0x8020」にブレークポイントを設定できます。

address = event.get_process().resolve_label("winamp!0x8020")
event.debug.break_at(event.get_pid(), address)

お役に立てれば!:)

于 2013-03-03T19:43:44.233 に答える