2012-02-17 6 views
0

私は仮定パッカーの始まりである、私はこれを見たのwgetの組み立てを確認しながら:アライメント8はincコマンドを8のステップで作成しますか?

UPX1:004ED812     align 8 
UPX1:004ED818 
UPX1:004ED818 loc_4ED818:        ; CODE XREF: UPX1:loc_4ED829j 
UPX1:004ED818     mov  al, [esi] 
UPX1:004ED81A     inc  esi 
UPX1:004ED81B     mov  [edi], al 
UPX1:004ED81D     inc  edi 

私の質問は次のとおりです。align 8は意味、INC esiが8で各反復をインクリメントするように作るん1バイト?

答えて

3

INCが1増加します。そうでない場合、地獄は間違いなく緩んでしまいます。

具体的には、現在のアセンブリ言語に関する適切なドキュメントが見つかりませんでした。私は、しかし、これを見つけるreference。これによれば、align命令は次の命令オペコードがメモリ内でどのように揃うかを制御するだけです。

これは多くの意味があります。

+0

+1ルース地獄の場合 – hirschhornsalz

1

INC RはRの追加と全く同じであり、1

ALIGN 8命令はのアドレスINC Rに8の倍数になる。これは、ということを確実にするために、コンパイラによって挿入最適化ですジャンプまたはコールのターゲットがキャッシュラインの開始時に落ちるので、プロセッサのパイプラインをより効率的に満たすことができる。

+1

**正確には**同じではありません。 'INC'は常に' CF'フラグの状態を保持しますが、 'ADD'は常に結果に応じて上書きします。 –

関連する問題