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)
);