ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

2007-11-20から1日間の記事一覧

ブレークポイント - 2

普通のデバッガにあるような実行時に止めるブレークポイントは上のように出来ます。 Dr7 の上位16bitを弄ると少し特殊な 特定のアドレスに書き込んだとき 特定のアドレスに読み書きしたとき のブレークポイントを仕掛けることができます。 4bits 4bits 4bits…

ブレークポイントの仕掛け方

デバッガで必要な機能もう1つ。ブレークポイントですね。 これは x86 CPU のデバッグレジスタを利用して実装します。 まず仕掛け。 void SetBreakPoint( HANDLE hThread, DWORD dwAddress ) { CONTEXT ctx = { CONTEXT_DEBUG_REGISTERS }; GetThreadContext(…

シングルステップ実行の仕方

x86 系 CPU のフラグレジスタには、Trap Flag というフラグがあって、 これを立てると次の1命令を実行してトラップ例外を起こします。 void SetSingleStepMode( HANDLE hThread ) { CONTEXT ctx = { CONTEXT_CONTROL }; GetThreadContext( hThread, &ctx ); …

デバッガの作り方

たまにはハックっぽいことをしたいなと思って。 簡単なデバッガ(のコアだけ)を作ってみた。 デバッガを作るために必要なものは2つ。 アタッチする デバッグイベントを処理する デバッガとしてアタッチする まずデバッガからプログラムを起動する場合は PRO…