C ++内联汇编错误

时间:2013-09-22 17:02:28

标签: c++ inline-assembly

我正在尝试使用内联汇编插入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;

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

1 个答案:

答案 0 :(得分:1)

jmp[0] = _asm JMP

JMP操作码(表示指令的字节)依赖于操作数(指令的参数)。请参阅英特尔®64和IA-32架构软件开发人员手册中的Vol. 2A 3-433

看起来你在JMP rel32之后,在这种情况下你应该用0xE9代替_asm JMP

有关详细信息,我建议在网上使用x86指令编码链接的英特尔文档或其他许多来源。例如。 this one from osdev wiki