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

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

2007-11-01から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…

UMDF開発のすゝめ - 4

アーキテクチャに関する説明の部分。 デバイスドライバ まず概念として理解してほしいことは、「Windowsはすべてのものを”オブジェクト”として抽象化している」ことです。例えば私たちは通常、ファイルやディレクトリはそういう”オブジェクト”があるものとし…

UMDF開発のすゝめ - 3

少しずつ書き進めてます。 チュートリアルドキュメント。HelloWorld のソースコードまでできたので、 次はビルド方法です。 その他雑多なファイルを用意する デバイスドライバの本体となるコードは実装し終わりましたが、ビルドするためにはいくつか細かいフ…