2012-03-02 9 views
1

私はi386バイナリを持っており、実行する機会がありません。 otool -tvは言う:EBPに対して非常に正のオフセット

一部funcitonや方法を:

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出力の間で見ることができます。それをどのように解釈するのですか?あなたがバイト列にleal 0xe0(%ebp),%eaxを変換する場合

+2

使用された(1バイト)番号で表示されていても、e0が符号付き数値として使用されていると思われます。符号付き数値としてはe0が負となります。 –

答えて

3

このスタックアドレスを参照するが、あなたのASMが誤解されて(私は& T構文AT好きではない理由です)、あなたはある8D45 E0を取得しますLEA EAX,DWORD PTR SS:[EBP-20]と同じです。

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

+0

'[EBP + 8]' - 最初のarg、 '[EBP + C]' - 2番目のarg、 '[EBP + 8]'のように、渡された引数へのアクセスに正のオフセットがあるため、 10] ' - 第3など –

+0

@IvanTeterevkov:7番目の引数へのポインタ、またはスタックバッファへのポインタを作成している可能性があります。私はあまり曖昧ではない答えを修正した – Necrolis

関連する問題