IDA Proのアップグレード。 デバッガプラグイン。 パートI.理論







みなさんこんにちは。 私たちの愛するIDA Proの近代化に関する一連の記事を始めることにしました。

各チュートリアルでは、かなり複雑でほとんど研究されていないトピックを明らかにしようとします:異なるモジュールを書く:



そして、 プロセッサモジュールプラグイン 、およびスクリプトがまだあまり公開されていないトピックである場合、他のすべてはほぼ完全に暗闇です( 記事の最後に、少なくとも何かがあるリファレンスとプロジェクトのリストを示します )。



したがって、シリーズの最初の記事は、 デバッガプラグインの作成 、またはむしろ予備的な理論に専念しますIDA SDKの標準配信では、メインデバッガー( WindowsLinuxMac )のソースが既にあります。 しかし、たとえば、 AmigaM68000はどうでしょうか。



この記事は、退屈であまり理論ではない可能性が高いでしょう。 次のように、自分自身をよく理解することを強くお勧めします。 将来の多くのポイントは、一般的な概念を提示することができないため、正確に理解できない場合があります。



手始めに、デバッグプラグインが何であるかを決めましょう。



デバッガープラグインの種類



IDAデバッガプラグインには、主に2つのタイプがあります。



他にもいくつかありますが、これらの記事では考慮されません(または考慮されますか?)。 ここでは、 ローカルデバッガーについてのみ説明します。 リモートのコードは2倍のコード(クライアントとサーバー)を必要とし、まだ十分に研究されていません。



デバッガプラグインのコンポーネント





だから、すべてのコンポーネントについて順番に。



IDA-ビジュアルインターフェイス



実際、 IDA自体は、ユーザーインターフェイスとデバッガーの間のアダプターであり、 コマンドを送信し、反応( メッセージ )を待機します 。 チームは次のようになります。



デバッガープラグイン



プラグインのタスクは、 IDAからのコマンドに応答し( 上記を参照 )、 エミュレータで動作する次のタイプのイベントを送信することです:



メッセージを送信して、 IDAが現在何が起こっているかを把握し、デバッグの現在の状態を表示する必要があります。 たとえば、ブレークまたはステップのイベントが発生した場合、ユーザーからのさらなるアクションを待つために、デバッガーウィンドウを表示する必要があります。



エミュレータ-頭の周り



エミュレータの目的は何ですか? もちろん、命令の実行。 また、コンテキストを維持する方法も知っています。 ブレークポイントに関する情報を保持する場合もあります(保持しない場合もあります- デバッガレベルで実装する必要があります )。 また、 エミュレータ自体には実行を一時停止/継続する機能がなく、何らかの方法でそれを実装する必要があります。 一つのことは良いことです-通常、多くのプラットフォーム用のエミュレーターのソースコードはすでに存在しており、多くの場合、タスクのためにわずかに近代化する必要があります。



そのため、 エミュレーターは、 デバッガー自体にイベントの発生について報告します



イベント



Stepイベントを分析しましょう

  1. IDAで F7キー( ステップイン )を押します。
  2. デバッガーは、 この前に来た最後のイベント完了するコマンドを取得します 。 通常、この場合のデバッガーは、 エミュレーターに実行継続するように指示する必要があります
  3. 次に、 デバッガー、ストリーム内のステップ実行するコマンドを受け取り、1つのエミュレーター命令を実行することでこれに反応します
  4. エミュレーターは、 STEPイベントが発生したことをデバッガーに報告し、イベントキューに配置します( 以下のイベントキューについて読む )。
  5. デバッガーは、ディスパッチされたイベントをイベントキューから取得し、 IDAに報告します。
  6. IDAはイベントに応答します。 この場合、彼はステップが完了したことを認識し、ステップの完了後に起きた現在のEIPアドレスを表示します。
  7. レジスタなどのステータスが表示されたIDAウィンドウが十分に表示され、さらに何かを実行したい場合(たとえば、 F7を押して別のステップ)、最初の項目へのサイクルが再び発生します。


イベントキュー

このようなことは、新しいエミュレーターイベントの発生を見越して、別個のデバッガーストリームで絶えず回転しています 。 新しいイベントを受信すると、エミュレーションを一時停止して(ステップがプロセスの凍結を意味するため)、イベントをIDAに転送する必要があります。 イベントが処理されたことをIDAが報告すると、現在のイベントの処理を完了するコマンドがデバッガーに送信さます



ご覧のとおり、このトピックは非常に濁っており、それほど単純ではありません。 しかし、一見そうそうです。 次の記事では、 デバッガプラグインの作成を開始し、同時に何をどのように理解するかを説明します。



-参照とプロジェクト:






All Articles