0

我正在尝试使用内联汇编插入 JMP 指令,但我收到一条错误消息:

“预期表达”

// Allocate a place in memory for the bytes 
BYTE *jmp = (BYTE*)malloc(len + 5);

// Copy the bytes of original + length to the allocated memory place:
memcpy(jmp, orig, len);

// Next we want to insert a jump back to the original + length 
jmp += len; // increment to the end of the copied bytes
jmp[0] = _asm JMP   // this is where i get the error

*(DWORD*)(jmp + 1) = (DWORD)(orig + len - jmp) - 5;

我是组装新手,想知道以另一种方式实现这一目标的方法。

4

1 回答 1

1
jmp[0] = _asm JMP

永远不能作为操作码(代表指令的字节)JMP依赖于操作数(指令的参数)。见卷。英特尔® 64 和 IA-32 架构软件开发人员手册中的2A 3-433 。

看起来您正在追求JMP rel32这种情况,您应该0xE9替换_asm JMP.

有关更多信息,我推荐链接的英特尔文档或网上 x86 指令编码的其他众多资源之一。例如这个来自 osdev wiki

于 2013-09-22T17:40:44.150 回答