JNZを使用するコードがあります。バイナリをアセンブルしてリンクすると、JNZがJNEに置き換えられていることがわかります。どちらも基本的に同じだと思います。しかし、なぜNASMはそれを変更するのでしょうか?
また、組み立て中にこの変更が発生しないようにするために使用できる構成オプションはありますか?
JNZを使用するコードがあります。バイナリをアセンブルしてリンクすると、JNZがJNEに置き換えられていることがわかります。どちらも基本的に同じだと思います。しかし、なぜNASMはそれを変更するのでしょうか?
また、組み立て中にこの変更が発生しないようにするために使用できる構成オプションはありますか?
どちらも基本的に同じだと思います
JNE
またJNZ
、同じオペコード(0x75
短いジャンプと0x0f 0x85
近いジャンプの場合)があるため、アセンブラーは両方に対して同じマシンコードを作成します。
逆アセンブルするとき、逆アセンブラはソースでどちらが使用されたかを認識しなくなり、そのうちの1つを取得する必要があります。
また、組み立て中にこの変更が発生しないようにするために使用できる構成オプションはありますか?
いいえ、それは実際の「置換」ではなく、同じオペコードの単なる異なるニーモニックであるためですJNE
。JNZ
JNZ
まったく同じエンコーディングをJNE
使用します(インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアルVol。2A 3-419を参照)。したがって、アセンブラでどちらを使用する場合でも、逆アセンブラは1つを選択し、逆アセンブラされたコード全体で同じ表記を使用します。