2012-11-28 67 views
-3

我遇到了这个汇编代码,当试图编译它时说它有错误。对装配不太了解,我想知道是否有人可以帮助我。提前致谢。汇编代码错误

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

什么是错误以及您使用的汇编程序/体系结构是什么?另外,我建议重新格式化您的代码,以便更清楚地看到所有内容都在这里。 – RonaldBarzell

+1

完整的代码可以在http://www.phrack.com/issues.html?issue=49&id=14找到。 – melpomene

+0

我原来格式化了它,但忘记在帖子中将其标记为“代码” –

回答

0

JMP的目的地并使用它的不断0x1F放置一个标签。或者,知道指令的长度,使用构造如JMP .+length+offset,在这种情况下,长度是2个字节,因此它变成JMP .+0x21。这将被编码为0xeb 0x1f,这是phrack链接显然需要的。在86相对跳转被编码为从下一条指令的开始偏移,如果你不知道的指令长度,你可以把一个标签的指令后,像这样:

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

(局部标签可能会有所帮助,但在这种特殊情况下1f+0x1f本来会令人困惑。)

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