デバッガ
デバッガ・スレッド表示
●ブレークポイントの挿入/削除●VEHデバッガ用ブレークポイントの挿入/削除
●スレッド別レジスタ表示
●スレッド別コールスタック表示
●デバッグ文字列出力を監視
●PEB/TEB表示
●ヒープリスト表示
●.NET パフォーマンスカウンタ表示
●メモリ領域操作を監視
ブレークポイントの挿入/削除
●注意事項 デバッガは通常のアプリケーションと異なる極めてアクロバティックな操作を行います。そのため、操作が適切でない場合システムに重大な悪影響を及ぼす可能性がありますのでご注意ください。 誤操作防止のため、当デバッガ使用にあたり、レジスタ、オペコード、ニーモニック、スタック、例外及びAPI関数等の基本的な事項について理解しておいてください。これらを理解するために有用な、Intel社やMicrosoft社が無償で公開している資料、プログラミング関連用語集サイト及び参考書については、当ソフトウェア公式サイトからリンクしています。 デタッチ有効の設定が無ければ、デバッガダイアログを閉じると、アタッチしたプロセスは強制的に終了されます。この場合は、なるべくデバッガダイアログを閉じる前にデバッグ対象プロセスを終了してください。 マルウェアには、解析されないためにデバッガ検出機能を実装しているものもあります。そのため必要に応じて、解析対象プロセスによるデバッガ検出と解析妨害を無効化する、「ScyllaHide」のスタンドアロン版を、下記の手順で使用して下さい。 当ソフトウェアのデバッガでアタッチ後に、ScyllaHideのスタンドアロン版を実行します。例として、解析対象プロセスが32ビット版「UsaTest2Win.exe」ならば、ScyllaHide実行時のオプション指定は以下のようになります。なお、解析対象プロセスが64ビットならば、ScyllaHideは「x86」ではなく「x64」の方を使用します。このオプション指定内容はショートカットとして保存すると再利用が容易です。また、オプション指定内容をランチャーに登録すると利便性が向上します。 C:\APP\ScyllaHide\InjectorCLIx86.exe UsaTest2Win.exe HookLibraryx86.dll ScyllaHideでより確実にデバッガ検出の無効化を行うならば、あらかじめ当ソフトウェアのメニュー「プロセス」→「プロセスを停止」で、解析対象プロセスを停止してから当デバッガでアタッチし、さらにScyllaHideを実行し、それからメニュー「プロセス」→「プロセスを再開」で解析対象プロセスを再開させてください。あるいは、当ソフトウェア起動時のプロセス選択画面上「実行ファイルを起動」ボタンから、解析対象プロセスをエントリーポイントで実行停止させた状態で起動し、同プロセスを解析対象として選択後、上手順と同様にアタッチ、ScyllaHide実行そして解析対象プロセスを再開させます。また、ScyllaHideの設定ファイル「scylla_hide.ini」の編集が必要になるケースも想定されます。 |
現在開いているプロセスに対して、デバッガとしてアタッチした上でブレークポイントを設定します。ブレーク時には汎用レジスタやフラグレジスタ及び、スタックの内容をエディットボックスに表示します。この機能により、指定したメモリアドレスに書き込み等の処理を行った、プログラム上の処理箇所を特定することが可能になります。さらに、別途出力した逆アセンブルコードリストと判明したプログラム上の処理箇所(アドレス)を照らし合わせることで、プロセスメモリ上の当該処理箇所を書き換えることも可能になります(ゲームでの「無敵化」等)。また、ブレーク後にステップ実行やデバッグ対象プロセスの停止等、処理を選択することもできます。 デバッグ対象プロセスや実行ファイルのことを、一般に「デバッギー」・「デバッギ」と呼びます。 このデバッガでは、ブレーク時にレジスタ等の情報を取得・表示後、自動的に制御をデバッギーに戻します。そのため、フルスクリーンのゲーム等、デバッガがブレーク時にデバッギーの制御を保持すると不具合が生じるケースにも使用可能です。 デバッガ対策として、デバッガから起動されたりブレークポイントが設定されると、それを検出して即終了するアプリケーションが実在しますので、注意して下さい。 スレッド別レジスタ表示を用いることで、ブレーク等で停止しているデバッグ対象プロセスのスレッドに属するレジスタに格納された値やステータス・フラグを編集することが可能です。 モジュール別参照関数表示で対象プロセスが使用するモジュールのエクスポート関数のアドレスを取得し、その関数のアドレスにブレークポイントを設定することも可能です。この手法は、対象プロセスのメインモジュールのインポート関数リストからは把握できない、LoadLibrary関数を用いた関数呼び出しにも対応できます。 ブレーク時に表示されるEIPレジスタには以下の値がロードされています。 基本的に、EIPレジスタはこれから実行されるニーモニックの先頭アドレスが格納されます。
|
●画面説明![]() ●デバッギー操作 ■アタッチ 現在開いているプロセスにアタッチしてデバッグを開始します。下記の「デタッチ有効」オプションが設定されていないならば、アタッチ後にこのデバッガダイアログを閉じると、アタッチされたプロセスは自動的に終了します。 ■実行停止 アタッチしたプロセスを停止します。任意のタイミングでプロセスを停止させて変動検索の効率化を行うことが可能です。 ■実行再開 停止したプロセスの実行を再開します。 ■強制終了 アタッチしたプロセスを強制終了します。DLLリンク解除を行わないためメモリリーク発生の可能性があります。必要最小限の使用にとどめてください。 ■デタッチ有効 デバッガ終了時に、デバッガのスレッドとデバッギーのプロセスを切り離すオプションです。デタッチ後に当ソフトウェアを終了させても、デバッギーは終了しません。 このオプションは、Windows95/98/Me/2000では使用できません。 ●ハードウェアブレークポイント設定 ■ハードウェアブレークポイントのアドレス(エディットボックス) ハードウェアブレークポイントを設定するアドレスを入力します。他の設定済みブレークポイントとは重複設定はできません。ブレークポイントの種類を[実行]にする場合は、必ずニーモニック先頭アドレスを指定する必要があります。また、種類を[書き込み]か[読み書き]の[Word]あるいは[DWord]にする場合は、ブレークポイントを設定するアドレスはWord境界上あるいはDWord境界上に設定してください。 ■ハードウェアブレークポイントの種類(コンボボックス) ハードウェアブレークポイントをどのような条件でブレークさせるか設定します。Byte/Word/DWordはブレークポイント指定アドレスを先頭とする、ブレークポイントの有効範囲サイズです。 ■ハードウェアブレークポイントの対象スレッド(コンボボックス) ハードウェアブレークポイントを設定するスレッドを指定します。初期設定では全スレッドに一括設定するようになっています。単一スレッドへのブレークポイント設定は、[読み書き]のハードウェアブレークポイントを設定した際に、複数のスレッドのうち目的のスレッドとは別のスレッドが高頻度で読み込みを行うため1秒間に数10回ブレークしてしまうようなケース等に有用です。なお、当デバッガはデバッギーのスレッド増減を自動追尾して、ハードウェアブレークポイントの再設定や解除を自動で行います。 ■設定 指定したアドレス・種類・スレッドの情報を元にハードウェアブレークポイントを設定します。最大4箇所まで設定可能です。 ■解除 設定済みのハードウェアブレークポイントを解除します。 ●コード実行(INT3)ブレークポイント設定 ■コード実行ブレークポイントアドレス(エディットボックス) コード実行ブレークポイントを設定するアドレスを入力します。他の設定済みブレークポイントとは重複設定はできません。ブレークポイントのアドレスは、必ずニーモニック先頭アドレスを指定する必要があります。 ■設定済みコード実行ブレークポイントの一覧(コンボボックス) 設定済みのコード実行ブレークポイントを表示します。コード実行ブレークポイントを解除する場合は、この一覧から解除したいコード実行ブレークポイントのアドレスを指定します。 ■設定 指定したアドレスを元にコード実行ブレークポイントを設定します。最大65535箇所まで設定可能です。 ■解除 設定済みのコード実行ブレークポイント一覧の中で選択されたアドレスのブレークポイントを解除します。 ■全解除 設定済みのコード実行ブレークポイント総てを一括解除します。 ●オプション ■ブレーク時に実行一時停止 いずれかのブレークポイントでブレークした場合に、実行を一時停止して、「ステップ実行」、「デバッギー実行再開」、「デバッギー実行停止」から次の処理を選択可能になります。 「ステップ実行」はCPU処理ベースでニーモニックを1つづつ実行するものです。そのため、オペコードがCALL命令の場合は、ステップ実行すると呼び出すルーチンの先頭へ移動します(例外あり)。また、「REP MOVSD」のような、リピートプリフィックス命令がオペコードの場合は、カウンタのECXレジスタが0になるまで同じ命令を繰り返します。 「デバッギー実行再開」は、デバッギーに制御を戻します。 「デバッギー実行停止」は、デバッギーのプロセスを停止させた状態でデバッギーに制御を戻します。この状態で新たにブレークポイントを設定したり、デバッギーのプロセスメモリやレジスタの内容を変更することも可能です。実行再開はデバッグダイアログ上部の[実行再開]ボタンで行います。頻繁にブレークしてしまう場合は、この処理を選択してブレークポイントを解除して下さい。 ■障害発生時に警告表示をスキップ アタッチ後デバッグを行う上で何らかの障害が生じた場合に、警告表示をメッセージボックスで行わずに、デバッグダイアログ最下部のエディットボックスに警告内容を表示して、自動的に処理を続行します。このオプションは、フルスクリーンのゲーム等、デバッガがデバッギーの制御を保持すると不具合が生じる場合には必ず使用してください。 ■デバッグイベントを表示 プロセス生成、スレッド生成やDLLのロード及びアンロード等のデバッグイベントを、デバッグダイアログ最下部のエディットボックスに表示します。なお、一般保護例外等の重要なデバッグイベントは、このオプションの設定に関係なく表示します。 ■デバッグ出力文字列を表示 デバッギーがOutputDebugString関数を使って出力したデバッグ文字列を、出力時刻併記で表示します。 ■WriteProcessMemory関数実行をトレース デバッギーが行ったプロセスメモリ書き換え操作を、当ソフトウェア用の改造コードに変換して表示します。 この機能は『OllyDbg』と当ソフトウェアの連携操作用に実装しました。当デバッガから『OllyDbg』にアタッチして、さらに『OllyDbg』から解析対象となるアプリケーションを起動またはアタッチして下さい。 この機能はWindows9x/Meでは使用できません。 ■WriteProcessMemory関数を無効化 デバッギーが行うプロセスメモリ書き換え操作を総て無効化させます。ただし、関数実行をスキップする訳ではないので、プロセスメモリ書き換え操作のトレースは問題なく行えます。これにより、デバッギーにプロセスメモリの書き換えを一切行わせずに、そのプロセスメモリ書き換え処理内容だけを取得することが可能になります。 この機能はWindows9x/Meでは使用できません。 ■ブレーク時EIPでダンプ表示アドレス変更 ブレーク時のEIPレジスタ格納値を使って、ダンプ表示ウィンドウでの表示・選択アドレスを変更します。このオプションは、特に「選択範囲を逆アセンブル」機能を併用する場合に有用です。また、ダンプ表示ウィンドウ上でこのブレーク時EIPアドレスに栞を設定しておけば、「モジュールを逆アセンブル」機能の逆アセンブル画面上で、簡単にブレーク時EIPアドレス周辺を表示させることができます。 ■デバッグ出力内容指定(コンボボックス) ブレークポイントでのブレーク時やステップ実行時のデバッグ情報出力内容を指定します。ブレーク時のEIPレジスタのみ知りたい場合などに有用です。FPUレジスタの表示にも対応しています。 ●デバッグ情報表示 ■デバッグ情報表示(エディットボックス) ブレークポイントでのブレーク時やステップ実行時及び例外発生時のレジスタ情報等デバッグに関する各種情報や、各オプション設定に伴う出力文字列を表示します。表示する文字列は、既存表示文字列の終端に追加されます。 ●その他 ■終了 デバッガダイアログを閉じます。このボタンはWindows9x/Meでは非表示です(アタッチしたプロセスを安全にかつ強制的に終了させるタイミングを合わせるのが困難なため)。 |
VEHデバッガ用ブレークポイントの挿入/削除
この機能は、プログラム解析においては「VEHデバッガ」と呼ばれます。この機能は、上述のデバッガとは異なる仕組みで、デバッガとしての機能を実現させたものです。特に上述のデバッガで正常なアプローチができないケースへの対処を想定して実装しました。 VEHデバッガ用ブレークポイントの挿入/削除 解説ページ |
スレッド別レジスタ表示
現在開いているプロセスを構成するスレッドの一覧を表示します。さらに、一覧からスレッドを選択した上で、スレッドを強制終了したり、レジスタの値を変更することが可能です。 |
●画面説明![]() ●スレッド一覧 ■スレッド再取得 スレッドの一覧を再取得します。 ■スレッド一覧(リストボックス) 現在開いているプロセスの構成スレッドを一覧表示します。表示するのはスレッドID及びスレッドの実行優先度です。 ■スレッド強制終了 選択したスレッドを強制終了します。この操作はメモリリークを引き起こしかねない危険な操作です。必要最小限の使用にとどめてください。 ●レジスタ ■レジスタ変更 設定した汎用レジスタの値とステータスフラグの状況を元に、レジスタの内容を変更します。必ずデバッガでアタッチしてプロセスを停止させた上で変更を行ってください。 ■汎用レジスタ(エディットボックス) EAXレジスタ等の汎用レジスタの値を16進数で表示します。また、レジスタの内容を変更する場合はこのエディットボックスに変更したい値を入力します。 ■フラグレジスタ(チェックボックス) EFlagsレジスタに格納されたステータスフラグの状況を表示します。また、ステータスフラグの状況を変更する場合は、チェックを入れたり外したりすることで各フラグのONとOFFを指定します。 ステータスフラグの種類:
■TEBのアドレス 選択されたスレッドの「FS:[18]」に相当するTEB(Thread Environment Block)のアドレスを表示します。32Bitであることを明示するため「FS(32)」と表記しています。 ●FPUレジスタ ■FPUレジスタ(エディットボックス) 選択されたスレッドの現在のFPUレジスタ(浮動小数点数レジスタ)の格納値を10進数で表示します。FPUレジスタが使用されていなければ、数値ではなく「空」や「無効」といった表示になります。 |
スレッド別コールスタック表示(新型32ビット版「UsaMimi32.exe」および64ビット版「UsaMimi64.exe」用)
この機能では、解析対象プロセスを構成する各スレッドのスタックの状況から、直近の関数実行状況を取得して表示します。この機能は特にデバッガとの併用を想定して実装しました。 |
●画面説明![]() ●基本操作 画面左側で解析対象スレッドを選択すると、そのスレッドのスタックの状況を取得してリスト表示します。リスト上のアドレス欄には、コードアドレス、スタックアドレス、リターンアドレスおよびフレームアドレスのいずれかを選択して表示可能です。 「ソースコードの該当行情報を表示(要デバッグ情報)」オプション有効時は、解析対象プロセスの実行ファイルと同じフォルダにデバッグ用PDBファイルがあれば、ソースコードの該当行情報を併せて表示します。 状況に応じて、スレッド一覧の「一覧更新」ボタンや、スタックの状況の「再取得」ボタンを使用し、当機能で表示される情報を更新してください。 なお、同様の機能である、メニューの「プロセス」→「プロセスの各種情報を表示」でカテゴリ「スタックトレース」では、コールスタックを全スレッド分一括表示します。 |
デバッグ文字列出力を監視
解析対象プロセスやその他のプロセスがOutputDebugString関数で出力したデバッグ出力文字列を表示します。デバッガとしてのアタッチは行いません。 この機能は、ドライバが出力するデバッグ文字列の表示には対応していません。この場合は出力されたデバッグ文字列の取得にもドライバが必要となるため、需要その他を勘案し対応は見送りました。 デバッグ文字列出力結果リストで表示される時刻情報は、API関数の仕様によりミリ秒の単位でみればさほど精度の高いものではありません。 この機能は、「Kernel32.DLL/Ntdll.DLLモジュール書き替えによるAPIフックを解除」や「SDT(Service Descriptor Table)書き替えによるAPIフックを解除」とは併用しないで下さい。当ソフトウェアがフリーズする可能性があります。この場合は、当ソフトウェアを2重起動して、APIフック解除とデバッグ文字列取得を別個に行ってください。 |
●画面説明![]() ●オプション ■他のプロセスが出力したデバッグ文字列も表示する 現在オープンしているプロセス以外のプロセスもデバッグ文字列出力の監視対象に設定します。 ■強調条件文字列 「強調条件文字列」はデバッグ文字列の先頭に付加される文字列を指します。任意の強調条件文字列を指定して条件を振り分けることで、プログラム開発時にデバッグ出力文字列の絞り込みや視認性を高めることが可能になります。 ■選択強調条件に該当するデバッグ文字列のみ表示する 「強調条件文字列」1~3のうち、チェックが入れられたものに該当するデバッグ出力文字列のみ表示します。 ■PIDをプロセス名に変換して表示する デバッグ文字列出力を行ったプロセスのPIDをプロセス名に変換して表示します。プロセスの作成や終了に伴い、PIDが別のプロセスで再利用されるケースに対処するため、プロセス名への変換はデバッグ文字列出力の都度行っています。 ●モニター開始・停止 ■モニター開始 デバッグ文字列出力の監視を開始します。不要なデバッグ文字列の表示を避けるために、デバッグ文字列出力の監視は任意のタイミングで開始できるようにしました。 ■モニター停止 デバッグ文字列出力の監視を停止します。 ■リストクリア デバッグ文字列出力結果リストの全内容を消去します。 ●ポップアップメニューによるリスト操作(デバッグ文字列出力結果リスト上で右クリック) ■全ての列を選択 全ての列を選択します。 ■全ての列の選択を解除 全ての列の選択を解除します。 ■選択された列を削除 選択列を削除します。 ■選択されていない列を削除 選択されていない列を削除します。 ■フォーカスがある選択列より上の列を削除 フォーカスがある選択列より上の列を全て削除します。 ■フォーカスがある選択列より下の列を削除 フォーカスがある選択列より下の列を全て削除します。 ■選択列の内容をエクスポート 選択列の内容をテキスト形式でエクスポートします。エクスポート時は、「,」と改行で各項目を区切って出力します。 ■全ての列の内容をエクスポート 全ての列の内容をテキスト形式でエクスポートします。エクスポート時は、「,」と改行で各項目を区切って出力します。 ■選択列の内容をクリップボードにコピー 選択列の内容をテキスト形式でクリップボードにコピーします。コピー時は、タブと改行で各項目を区切って出力します。 ■全ての列の内容をクリップボードにコピー 全ての列の内容をテキスト形式でクリップボードにコピーします。コピー時は、タブと改行で各項目を区切って出力します。 ■文字列を検索 デバッグ文字列出力結果リスト上の全メッセージに対して文字列の検索を行います。 |
PEB/TEB表示
対象プロセスがプロセスメモリ上に保持する、プロセスやスレッドの情報を格納した構造体を表示します。PEBは「Process
Environment Block」、TEBは「Thread Environment Block」の略称です。 PEB/TEB構造体のメンバである各項目を左クリックすると、同項目のアドレスでダンプ表示ウィンドウでの表示アドレスを変更します。また、右クリックすれば、その項目の格納値がプロセスの有効アドレスである場合に限り同表示アドレスを変更します。 表示されたリストでカラム(「メンバ」・「アドレス」・「値」と表示されている上端部分)の境界線をダブルクリックすると、「メンバ」や「値」の項目で長さが最大字数のものでも表示できるように、項目部分の長さが変更されます。例えば文字「値」の右側にある境界線をダブルクリックすると、値が8バイトのものでも数値文字列全部が表示されるように「値」項目の長さが変更されます。 PEB/TEBは、OSのバージョンやサービスパックによって、構成する項目が変更されることがあります。当方で色々な資料を参照して正しい内容を表示できるよう努めていますが、使用環境によっては表示項目が正しくない可能性があること、ご了承願います。 この機能はWindows9x/Meでは使用できません。 |
ヒープリスト表示
この機能では、「HeapWalk」、プロセスメモリトレースおよび「Tool Help
API」の3種類の方法で取得した、ヒープに関連する情報を表示します。ヒープ一覧では、左側リストビューにヒープと各ヒープに含まれるセグメントをリストアップします。 リスト中のヒープを選択すると、そのヒープに含まれるセグメントやメモリブロックを右側リストビューに列挙します。「MemTrace」モードの場合は、ヒープではなくセグメントを選択すると、その中に含まれるメモリブロックを列挙します。ただし、Windows Vista以降では、「MemTrace」モードでのメモリブロックの正確な列挙ができません。左側リストビューでの選択可能な項目は、背景色が青色で表示されます。 一つのヒープを構成するセグメントは、複数になることもあります。この場合、2番目以降のセグメントは、ヒープ先頭アドレス(≒1番目のセグメントのアドレス)とは関係がない、全く異なるアドレスとなる可能性に注意してください。 この機能は、Windows95/98/Meでは使用できません。 |
.NET パフォーマンスカウンタ表示
この機能では、対象プロセスが使用する .NET
CLR(共通言語ランタイム)に関する、実行状況を示すパフォーマンスカウンタ情報を表示します。この機能は、.NET Frameworkを用いる、いわゆる「.NET
アプリケーション」専用の機能です。実行環境によっては、当ソフトウェアを管理者権限で起動しないと、この機能が使用できません。 画面左側にあるリストビューでカテゴリを選択すると、そのカテゴリに属するカウンタ情報を右側リストビューに表示します。「.NET CLR Memory」カテゴリでは、参考情報として仮想メモリの使用状況も表示します。表示されたカウンタ情報は、カテゴリを変更するか、カウンタを表示する右側リストビュー上の任意の場所でダブルクリックすれば、最新のカウンタ情報で更新されます。 基本的に、カウンタ情報の取得時には、当ソフトウェアでオープンしているプロセスの識別子(プロセスID)と、カウンタ側に属するプロセスIDを比較して、表示するカウンタを特定します。一部の.NET アプリケーションでは、カウンタ情報に属するプロセスIDが取得できないという問題があります。この場合、プロセス名(拡張子を除く実行可能ファイル名)を基に表示するカウンタを特定します。そのため、プロセスIDが取得不可でしかも複数の同名プロセスが起動しているならば、最初に見つかった同名プロセスのカウンタを表示することになりますので注意が必要です。当機能を再起動すると、複数の同名プロセスが起動している状況でも、正確に表示するカウンタを特定できることがあります。 [パフォーマンスブラウザ起動]ボタンは、.NET CLR を含む、システム全体の各種パフォーマンスカウンタ情報を取得するためのものです。オブジェクト、カウンタおよびインスタンスを選択することで、特定パフォーマンスカウンタの情報が取得可能になります。パフォーマンス情報を取得するための、システムが保有するデータに破損等の問題が生じていると、カウンタ情報の大半が取得できません。 この機能は、Windows95/98/Meでは使用できません。 |
メモリ領域操作を監視
解析対象プロセスが行うメモリ領域の作成・確保・解放・破棄を監視し、その情報を表示します。 この機能は古いWindows用です。Windows 7以降では、当ソフトウェア同梱のプロセスモニター「猫原喜雨」を使用してください。 この機能は、Windows 7以降ではOSの処理と競合が生じ安定した実行が見込まれないため、対象OSはWindows 2000/XP/Vistaとなります。また、対象OS上においても、監視対象プロセスの実行状況によっては、当機能使用時に対象プロセスの不正終了など不具合を招く可能性があります。 この機能は、上記「ヒープリスト表示」機能とは併用しないで下さい。対象プロセスがフリーズする可能性があります。 基本的には、API関数呼び出し時の引数や戻り値の表示は、当機能よりもIAT書き換えによるAPIフックや仲介DLLを製作した方がより安全に行うことが可能です。当機能は、IAT書き換えや仲介DLLでは対応できない、パッカー使用やEXEファイル改ざんチェックがあるケースへの対処を想定して実装しました。しかし、上述のとおり、動的なAPIフックに伴い、対象プロセスの実行状況によっては動作不安定になるケースがあります。特にHeapAlloc/HeapFree/HeapReAlloc関数への動的なAPIフックが動作の不安定化を招きやすいため、これらのAPI関数へのフックを除外するオプションを用意しています。 当機能を使用して、対象プロセスが起動直後に行うメモリ領域確保処理を捕捉するには、対象プロセスをエントリーポイントで停止した状態で起動させ(参照)、その時点で当機能での監視処理を開始する必要があります。 プログラムの処理として作成・確保されるメモリ領域とは別に、プロセス起動時点でOSによって自動的に確保され、プログラムが使用可能なメモリ領域である、EXEモジュールのデータセクション該当領域や、デフォルトヒープがあることに注意が必要です。 当機能では一般的に用いられるメモリ領域操作用API関数を監視します。メモリ領域操作に用いられる関数は、他にもGlobalAlloc関数やCoTaskMemAlloc関数などがあります。 |
●画面説明![]() ●オプション ■監視用DLL名 メモリ領域操作監視に使用するAPIフック用のDLL名を指定します。 ■リスト表示対象API種別指定 監視対象とするAPI関数群を指定します。 ・Heap系:HeapCreate, HeapAlloc, HeapReAlloc, HeapFree, HeapDestroy関数 (「Alloc系除外」で、安全のためHeapAlloc/HeapFree/HeapReAlloc関数を監視対象から除外) ・Virtual系:VirtualAlloc(確保時のみ), VirtualFree関数 ・FileMap:CreateFileMappingA, CreateFileMappingW関数(ともに共有メモリ確保時のみ) ■対象サイズ範囲指定 メモリ領域操作時の領域サイズで、メモリ領域操作結果の表示を絞り込みます。このオプションがオンならば、対象サイズ外のメモリ領域操作は表示されません。メモリ領域サイズは10進数あるいは「0x」接頭辞を使用して16進数で指定可能です。 ■CALL元モジュール指定 メモリ領域操作を行うモジュールを指定して、メモリ領域操作結果の表示を絞り込みます。このオプションがオンならば、対象モジュール以外のメモリ領域操作は表示されません。 ■除外CALL元アドレス指定 メモリ領域操作結果の表示を絞り込むために、不要なアドレスでのメモリ領域操作を表示しないようにします。このオプションがオンならば、[CALL元アドレス追加]ボタンで追加されたアドレスでのメモリ領域操作は表示されません。除外CALL元アドレスのリスト上でアドレスをダブルクリックすると、そのアドレスをリストから削除します。 ■デバッグ文字列で出力 メモリ領域操作結果をデバッグ文字列で出力します。このオプションは、実行権限の問題等で当ダイアログ上での表示ができないケースを想定しています。ダイアログ右下の[デバッグ文字列表示]ボタンで、デバッグ文字列の出力を監視する専用ダイアログを表示します。 ●監視開始・終了 ■アタッチ・監視開始 メモリ領域操作の監視を開始します。 ■デタッチ メモリ領域操作の監視を終了します。対象プロセスの実行状況によっては、このデタッチ処理で対象プロセスが不正終了する可能性があります。 ■終了 当機能を終了し、ダイアログを閉じます。 ●リスト表示・ダイアログ表示 ■リスト表示を中断 デタッチを行わず、メモリ領域操作結果の表示だけを停止します。 ■破棄・解放分を自動削除 HeapCreate関数呼び出しに対する、HeapDestroy関数呼び出しといった、破棄・解放用API関数が呼び出された場合に、対応するメモリ領域の作成・確保を行ったAPI関数呼び出し分をリスト上から削除します。 ■全リストクリア リスト上の表示内容を全て削除します。 ■相対アドレス表示 リスト上で選択されているメモリ領域先頭アドレスによる、ダンプ表示画面上での相対アドレス指定をトグルします。 ■リージョン検索 リージョン検索用ダイアログを表示します。 ■表示アドレス指定 ダンプ表示画面上での表示アドレスを指定するダイアログを表示します。 ■デバッグ文字列表示 デバッグ文字列の出力を監視する専用ダイアログを表示します。 |