-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 0x1fphrack 链接显然想要的。x86 中的相对跳转被编码为从下一条指令开始的偏移量,如果您不知道指令长度,您可以在指令之后放置一个标签,如下所示:

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

(本地标签可能会有所帮助,但在这种特殊情况下1f+0x1f会非常混乱。)

请注意,在汇编代码时,汇编器可能会选择您不期望的编码,因此如果您不使用标签,则会弄乱您的偏移量。

于 2012-11-28T15:34:29.187 回答