GCC:错误:垃圾`:0x + 57f120'表达后

时间:2014-07-31 14:03:58

标签: c++ gcc assembly compiler-errors

按照上一个问题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
}

1 个答案:

答案 0 :(得分:3)

将其更改为以下内容并编译:

__asm__ __volatile__
(
    "movl %%ds:0x57f120(, %%eax, 4), %%ecx\n\t"
    "jmp *%0" : : "m"(jmpAdd)
);

不幸的是,在查看source之后,您可能会尝试转换它,但实际上并没有实现。 GCC不支持x86目标上的naked函数。

相关问题