Gcc JS指令-十六进制代码

Gcc JS指令-十六进制代码,gcc,assembly,hex,64-bit,Gcc,Assembly,Hex,64 Bit,我试图通过gcc(gcc-c-masm=intel code.s)将asm覆盖到十六进制。错误:code.s:1:error:mov的内存引用过多。 代码.s asm: mov rax , 0x00000000004007E6 js rax 发生了什么事?你能给我介绍一下吗?正如Margaret Bloom所说,-masm=intel只是一个代码生成选项,这意味着它会影响编译器从C代码生成何种类型的程序集。它根本不影响装配 您需要在汇编文件中放入.intel\u syntax noprefix

我试图通过gcc(gcc-c-masm=intel code.s)将asm覆盖到十六进制。错误:code.s:1:error:mov的内存引用过多。 代码.s asm:

mov rax , 0x00000000004007E6
js rax

发生了什么事?你能给我介绍一下吗?

正如Margaret Bloom所说,
-masm=intel
只是一个代码生成选项,这意味着它会影响编译器从C代码生成何种类型的程序集。它根本不影响装配

您需要在汇编文件中放入
.intel\u syntax noprefix
指令来切换语法,或者使用复杂的
gcc-Wa,--msyntax=intel,-mnaked reg
方法将参数传递给汇编程序


完成上述操作后,下一个问题是
js-rax
无效,因为x86中没有条件间接跳转。最简单的可能是使用一个相反的条件,
jns
,跳过
jmp-rax

,正如Margaret Bloom所说,
-masm=intel
只是一个代码生成选项,这意味着它会影响编译器从C代码生成何种类型的程序集。它根本不影响装配

您需要在汇编文件中放入
.intel\u syntax noprefix
指令来切换语法,或者使用复杂的
gcc-Wa,--msyntax=intel,-mnaked reg
方法将参数传递给汇编程序


完成上述操作后,下一个问题是
js-rax
无效,因为x86中没有条件间接跳转。最简单的方法可能是使用一个相反的条件,
jns
,跳过
jmp-rax

是否使用英特尔语法?NASM可能更适合此任务,因为它支持Intel语法,并且可以生成原始二进制文件-masm=intel是AFAIK的一个输出选项。
js rax
看起来像是使用
rax
作为标签,但它当然也是一个寄存器。如果将其用作标签,则
mov
将有两个内存引用。是的,我使用英特尔代码。是否使用英特尔语法?NASM可能更适合此任务,因为它支持Intel语法,并且可以生成原始二进制文件-masm=intel是AFAIK的一个输出选项。
js rax
看起来像是使用
rax
作为标签,但它当然也是一个寄存器。如果将其用作标签,则
mov
将有两个内存引用。是的,我使用英特尔代码。