我正在尝试使用内联汇编插入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;
我是集会新手,想知道以另一种方式实现这一目标的方法。
答案 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