我正在阅读http://thestarman.pcministry.com/asm/2bytejumps.htm,但是关于如何对JMP
偏移量进行操作的文本不太清楚(在不使用标签的情况下短暂跳转到相对地址).
让我说我有
NOP
NOP
NOP
NOP
Run Code Online (Sandbox Code Playgroud)
(这是4个字节的指令),我想跳过它们(跳过4个字节).我会写什么?
jmp $+4;
?
jmp $+2+4;
?
一个简短的jmp操作码使用两个字节.组装时,当前位置($
)指向JMP指令的开头,而不是指向下一条指令的开头.
要跳转到下一条指令(实际上没有跳转的跳转),你就可以了
jmp $+2
Run Code Online (Sandbox Code Playgroud)
因此,要跳过JMP指令的N个字节,您将执行以下操作:
jmp $+2+N
Run Code Online (Sandbox Code Playgroud)
在你的例子中,4 NOP
jmp $+6
Run Code Online (Sandbox Code Playgroud)
汇编程序应检测到这是跳转到近地址并将其组合为短跳转.如果想确定,请使用
jmp short $+6
Run Code Online (Sandbox Code Playgroud)