NOP オペコードに代わる命令を提供するオンライン ソースを知っている人はいますか?
「xchg axe、ax」など。そのためのツールもあると確信しています。誰かが私にその方向を教えてもらえますか?
このページには、エンコーディングの長さが長くなる NOP の代替案の優れたリストがあります: http://www.asmpedia.org/index.php?title=NOP
一部のシェルコード エンジンにはnop
スレッド ジェネレーターが含まれています (それが必要な場合)。
nop
さまざまな長さの等価物は無数にありますが、網羅的なリストは実用的ではありません。
たとえば、push eax; pop eax
は事実上nop
. esp
(有効ななどを想定)
またはinc eax; dec eax
(オーバーフローがないか、テストしてからオーバーフローフラグをリセットすると仮定します)。
Intel 最適化マニュアルと Intel および AMD の取扱説明書には、すべての no op 同等関数のリストが含まれているはずです。それらのほとんどはマルチバイトのノーオペレーションであり、ブランチやコードキャッシュターゲットなどを整列させるために使用されることに注意してください。
一番上の回答のデッドリンクのインターネットアーカイブから。
90 nop
6690 xchg ax,ax ; 66: switch to 16-bit operand 90: opcode
0f1f00 nop dword ptr [eax] ; 0f1f: 2-byte opcode 00: mod=00 reg=000 rm=000 [EAX]
0f1f4000 nop dword ptr [eax] ; 0f1f: 2-byte opcode 40: mod=01 reg=000 rm=000 [EAX+0x00]
0f1f440000 nop dword ptr [eax+eax] ; 0f1f: 2-byte opcode 44: mod=01 reg=000 rm=100 SIB + 0x00
660f1f440000 nop word ptr [eax+eax] ; 66: switch to 16-bit operand 0f1f: 2-byte opcode 44: mod=01 reg=000 rm=100 SIB + 0x00
0f1f8000000000 nop dword ptr [eax] ; 0f1f: 2-byte opcode 80: mod=10 reg=000 rm=000 [EAX+0x00000000]
(フラグ以外の)何も変更しないさまざまな操作について考えてみてください。レジスタにゼロを追加するか、それ自体のレジスタとそれ自体のレジスタを追加して、レジスタをそれ自体に移動します。0を引くか、ゼロを使用して、〜0を使用します。ビットテストタイプの命令。通常はandですが、宛先は変更されません。