短jmp指令的语法

ale*_*nst 4 assembly

我正在阅读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;

mcl*_*fix 7

一个简短的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)