0
我试图掩盖ASM与gcc为十六进制(GCC -c -masm =英特尔code.s)通过将其错误:code.s:1:错误:`MOV”太多存储器的引用。 code.s asm:JS指令 - 十六进制代码
mov rax , 0x00000000004007E6
js rax
发生了什么事?你能教我盖吗?
我试图掩盖ASM与gcc为十六进制(GCC -c -masm =英特尔code.s)通过将其错误:code.s:1:错误:`MOV”太多存储器的引用。 code.s asm:JS指令 - 十六进制代码
mov rax , 0x00000000004007E6
js rax
发生了什么事?你能教我盖吗?
正如玛格丽特·布鲁姆说,-masm=intel
只是一个代码生成选项,这意味着它会影响什么样的程序集的编译器从C代码生成。它完全不影响组装。
您需要在程序集文件中添加.intel_syntax noprefix
指令来切换语法,或使用复杂的gcc -Wa,--msyntax=intel,-mnaked-reg
方法将参数传递给汇编程序。
完成上述操作后,下一个问题将是js rax
无效,因为x86中没有条件间接跳转。最简单的可能是使用反转条件jns
跳过jmp rax
。
您在使用英特尔的语法? NASM可能更适合这一任务,因为它支持英特尔语法并可以生成原始二进制文件。 * -masm = intel *是一个输出选项AFAIK。 –
'js rax'看起来像使用'rax'作为标签,但它当然也是一个注册表。如果它*被用作标签,那么'mov'就有两个内存引用。 –
是的,我使用英特尔代码。 –