1

バイナリがi386あり、実行する機会がありません。otool -tv言う:

いくつかの機能または方法:

0001a1e0    pushl   %ebp            ; just prolog
0001a1e1    movl    %esp,%ebp       ; save old ESP
0001a1e3    pushl   %edi            ; save EDI, ESI, EBX
0001a1e4    pushl   %esi            ;
0001a1e5    pushl   %ebx            ;
0001a1e6    subl    $0x4c,%esp      ; allocate 0x4c bytes for local puproses
...                                 ; etc

以下のどこかにある指示

0001a20e    leal    0xe0(%ebp),%eax ; load an address into EAX

がっかりしました!0xe0(%ebp)ポイントはどこですか?正のオフセットがあるため、これはローカル変数ではないと思います。otool私はすべての出力の中でそのようなアクセスを見ることができます。それをどのように解釈しますか?

4

1 に答える 1

3

これはスタックアドレスへの参照ですが、asmは誤解を招く可能性があります(これがAT&T構文が好きではない理由です)。leal 0xe0(%ebp),%eaxバイトシーケンスに変換する8D45 E0と、と同じになりLEA EAX,DWORD PTR SS:[EBP-20]ます。

ローカルスタックバッファー(によって作成されたSUB ESP)へのポインターを作成するか、7番目の関数パラメーターへのポインターを作成しますが、完全なコードが表示されない場合は、前者に賭けます。

于 2012-03-02T07:02:29.433 に答える