-3

このアセンブリ コードに遭遇し、コンパイルしようとすると、エラーが発生したと表示されました。組み立てについてよくわからないので、誰かが私を助けてくれるかどうか疑問に思っていました。前もって感謝します。

JMP 0x1F
POPL %ESI
MOVL %ESI, 0x8(%ESI)
XORL %EAX, %EAX
4

1 に答える 1

0

の宛先にラベルを付けてJMP、定数の代わりにそれを使用します0x1F。または、命令の長さがわかっている場合は、 などの構造を使用します。JMP .+length+offsetこの場合、長さは 2 バイトなので、 になりJMP .+0x21ます。0xeb 0x1fこれは、phrack リンクが明らかに望んでいるものとしてエンコードされます。x86 の相対ジャンプは、次の命令の開始点からのオフセットとしてエンコードされます。命令の長さが分からない場合は、次のように命令の後にラベルを付けることができます。

JMP next+0x1f
next:
POPL %ESI
MOVL %ESI, 0x8(%ESI)
XORL %EAX, %EAX

(ローカル ラベルは役立つかもしれませんが、この特定のケースで1f+0x1fは非常に混乱するでしょう。)

コードをアセンブルするときに、ラベルを使用しないと、アセンブラが予期しないエンコーディングを選択し、オフセットを台無しにする可能性があることに注意してください。

于 2012-11-28T15:34:29.187 に答える