JMP EBXEBX将跳转到当前代码段内寄存器中存储的地址。 将跳转到所指向的代码段内JMP DWORD PTR DS:[EBX]内存偏移处存储的地址。EBXDS
例如,让DS= 0x0440 , EBX= 0x00006200 ,并且地址0x00006200处的内存的前四个字节为0x00003500 (在小端机器上将存储为00 35 00 00 )。
JMP EBX变成JMP 0x00006200.
JMP DWORD PTR DS:[EBX]变成JMP 0x0440:0x00003500
JMP EBX有以下签名:
JMP r/m32
Run Code Online (Sandbox Code Playgroud)
在这种情况下,跳转地址要么存储在 32 位寄存器中(您的情况),要么作为内存中的 32 位变量存储。处理器通过将值加载到 中,在操作数指定的地址处执行近跳转EIP(在同一代码段中) 。
JMP DWORD PTR DS:[EBX]另一方面,具有以下签名:
JMP ptr16:32
Run Code Online (Sandbox Code Playgroud)
这里跳转地址分为两部分提供。第一个值(冒号之前)给出要跳转到的代码段的地址,第二个值(冒号之后)给出该代码段内的偏移量。该跳转可能会跳转到与当前代码段不同的代码段,因此是远跳转。处理器通过将第一个值加载到CS并将第二个值加载到 来执行跳转EIP。
此外,第二条指令使用,与第一条指令[EBX]相反。EBX这意味着它将在存储的偏移量处读取内存EBX并使用该值。
DWORD PTR是一个大小指令,告诉汇编器应将内存视为 32 位整数。
这是使用第二个跳转的示例。