質問:
IDA Pro:パラメーターに構造体を使用する
sqrtsben
2013-11-20 18:57:47 UTC
view on stackexchange narkive permalink

パラメータとして struct が指定された小さな関数があります。 struct は次のようになります。

  struct my_struct {short a; unsigned int b; unsigned int c;};  

配置に注意して、IDAで次の struct を作成します。

  field_0 + 0x0field_1 + 0x4field_2 + 0x8  

コンパイラは、 struct rbp + 0x10 を使用するようにビルドします。 > rbp + 0x14 を2番目になど。事前定義されたIDA struct を命令に適用しようとすると、常に [rbp + struct.field_0 + 0x10] のようなものが表示されるために問題が発生します。 + 0x10 の構造体に実際に何かがある場合、これはさらに複雑になります。これは、 [rbp + struct_fieldX] のみが表示されるためです(これは間違っています)。

質問は次のとおりです。 IDA(6.3を使用)に 0x10 のオフセットで struct を適用するように指示する方法はありますか?

この単純なケースの汚いトリックは、 RIP code用に2つの size_t ダミーフィールドを持つ struct を作成することです。 >と SFP ですが、ここに行くには正しい方法ではないようです。

1 回答:
Jason Geffner
2013-11-20 20:53:02 UTC
view on stackexchange narkive permalink

関数のスタックビューに構造を追加します。

  1. 関数の分解ビューにカーソルを置き、 Ctrl kbd> + K kbd>を押してスタックビューを開きます。
  2. スタックビューで、スタック内で少なくとも +00000010 に到達するのに十分な関数引数が存在することを確認します。 D kbd>を使用して、必要に応じて関数の引数を追加します。
  3. スタックビューの +00000010 行にカーソルを置き、 Alt + Q kbd>は、そのオフセットで my_struct を指定します。
  4. ol>
強調するための注意:ステップ3の間、スタックビューにいる必要があります。 IDAビューの対応するローカル変数にカーソルを置いて `Alt + Q`を押すと、IDAは*関数の内容*を変数ではなく構造として解釈しようとし、関数を破壊します。これは、IDAで構造を学習するときによくある間違いです。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...