按照上一个问题here,当编译器尝试编译以下代码时,我现在有一个“表达式后的错误垃圾”:
u32 jmpAdd = BW::BWFXN_SpendRepairReturnAddress;
//BW::BWFXN_SpendRepairReturnAddress has the following value: 0x0046700D
__asm__ __volatile__
(
"movl ds:0x+57f120(, %eax, 4), %ecx\n\t"
"jmp %0":"=m"(jmpAdd)
);
GCC给了我以下错误:
Error: junk ':0x+57f120' after expression
Error: invalid instruction suffix for 'jmp'
我该如何更正这些错误?
编辑:原始代码如下(我使用ta2as v0.8.2转换它):
__asm
{
mov ecx, dword ptr ds:[eax*4+0x57f120]
jmp BW::BWFXN_SpendRepairReturnAddress
}
答案 0 :(得分:3)
将其更改为以下内容并编译:
__asm__ __volatile__
(
"movl %%ds:0x57f120(, %%eax, 4), %%ecx\n\t"
"jmp *%0" : : "m"(jmpAdd)
);
不幸的是,在查看source之后,您可能会尝试转换它,但实际上并没有实现。 GCC不支持x86目标上的naked
函数。