5

JNZを使用するコードがあります。バイナリをアセンブルしてリンクすると、JNZがJNEに置き換えられていることがわかります。どちらも基本的に同じだと思います。しかし、なぜNASMはそれを変更するのでしょうか?

また、組み立て中にこの変更が発生しないようにするために使用できる構成オプションはありますか?

4

2 に答える 2

11

どちらも基本的に同じだと思います

JNEまたJNZ同じオペコード0x75短いジャンプと0x0f 0x85近いジャンプの場合)があるため、アセンブラーは両方に対して同じマシンコードを作成します。

逆アセンブルするとき、逆アセンブラはソースでどちらが使用されたかを認識しなくなり、そのうちの1つを取得する必要があります。

また、組み立て中にこの変更が発生しないようにするために使用できる構成オプションはありますか?

いいえ、それは実際の「置換」ではなく、同じオペコードの単なる異なるニーモニックであるためですJNEJNZ

于 2013-02-11T06:35:28.243 に答える
2

JNZまったく同じエンコーディングをJNE使用します(インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアルVol。2A 3-419を参照)。したがって、アセンブラでどちらを使用する場合でも、逆アセンブラは1つを選択し、逆アセンブラされたコード全体で同じ表記を使用します。

于 2013-02-11T06:38:31.987 に答える