我遇到了这个汇编代码,在尝试编译时,它说有一个错误。对组装不太了解我想知道是否有人可以帮助我。提前谢谢。
JMP 0x1F
POPL %ESI
MOVL %ESI, 0x8(%ESI)
XORL %EAX, %EAX
答案 0 :(得分: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
会非常混乱。)
请注意,在汇编代码时,汇编程序可能会选择您不期望的编码,因此如果您不使用标签,则会弄乱您的偏移量。