2016-10-28 6 views
1

をジャンプ:http://ref.x86asm.net/coder32.htmlWin32のアセンブリの条件は、次のオペコード基準に対して

私は条件ジャンプの周りにもう少し理解しようとしています。上記のリンクでは、「ゼロ/等価(ZF = 0)でジャンプする」のオペコードがであることがわかります。そこ

0207FF9F  74 04  JE SHORT 0207FFA5 

いいえ問題:我々はバイナリ(デバッガで)バイトとZFフラグが0に設定されているを挿入する場合したがって、我々は、バイトの短い順方向ジャンプが表示されます。

:後で同じ参照で

は、あなたが条件ジャンプのための同様のバイト長でそのコードをポップがあれば、オペコードを使用して参照同様の条件付きショートジャンプがあり、次の取得します私は明らかにここで何かを理解していないよ
0207FFA5  850441  TEST DWORD PTR DS:[ECX+EAX*2],EAX 

Attempted conditional jump

、誰かが説明することができますか?フラグ値に基づく条件付きショートジャンプは、オペコードに限定されますか〜7F

ありがとうございました!

+0

@mazegenは、上記の参照:*ゼロ/等価*が実際には** ZF = 1で** ZF = 0ではなく、その逆の場合の状態 – vitsoft

答えて

1

2番目のオペコードテーブルの85は、すべてのエントリの先頭に0Fという接頭辞があります。 (near32)version of JZ/JE is 0F 85。 (Oops、HTML抽出はエンコーディングのリストを切り捨てて、0F .. rel32のバージョンのほんの一部にしかなりません)実際には、残りのテーブルの書式は壊れています。あなたが混乱してしまった場合は、マニュアル全体を参照してください(タグwikiのリンク

+0

Peterさん、これをテストして、2バイトのオペコードが動作するように見えます条件付きジャンプを開始するという点では私はバイトジャンプの長さを指定するには?オペコードが4バイトジャンプを開始しなかった後に、04と言うと、実際には無効なメモリアドレスを参照します(この場合、JE 434640A8)。 参照したインテルの元のオペコード・ドキュメントから、参照されるジャンプ条件が* 0F 87 cd *であることがわかります。他の多くのジャンプで使用されている* cd * vs * cb *も調べます。 Thx! –

+0

@SirSaucealot: '0F 85 'は、命令の32ビットディスプレースメントバージョンです。そのために、ショートジャンプ(8ビットディスプレースメント)と32ビットディスプレースメントバージョンが追加されました(遠距離ジャンプとは異なり、CSを変更します)。命令セットのリファレンスマニュアルのエントリを読んでください:エンコーディングについて説明しています。または、アセンブラで命令をアセンブルして、何を得るかを確認します。 –

+0

* cd *がオペコードの後に​​バイト値を参照しているのを見て、読んでテストしています! :) –

関連する問題