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