C++ GCC:错误:垃圾“:0x+;57f120';表达后

C++ GCC:错误:垃圾“:0x+;57f120';表达后,c++,gcc,assembly,compiler-errors,C++,Gcc,Assembly,Compiler Errors,在我前面的问题之后,当编译器尝试编译以下代码时,我现在遇到了一个“表达式后的错误垃圾”: 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":"=

在我前面的问题之后,当编译器尝试编译以下代码时,我现在遇到了一个“表达式后的错误垃圾”:

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__ __volatile__
(
    "movl %%ds:0x57f120(, %%eax, 4), %%ecx\n\t"
    "jmp *%0" : : "m"(jmpAdd)
);

不幸的是,在看了之后,你可能正试图转换它,但它实际上不会起作用。GCC不支持x86目标上的
函数。

ta2as正在将语法转换为AT&t语法,但不一定转换为GCC中内联汇编的正确格式。我推荐以下两个指南:“0x+57f120”在我看来不是一个有效的十六进制文字,但我对gcc汇编不是很精通。
__asm__ __volatile__
(
    "movl %%ds:0x57f120(, %%eax, 4), %%ecx\n\t"
    "jmp *%0" : : "m"(jmpAdd)
);