【问题标题】:JS instruction - Hex codeJS 指令 - 十六进制代码
【发布时间】:2017-02-14 10:39:18
【问题描述】:

我试图通过 gcc (gcc -c -masm=intel code.s) 将 asm 覆盖为十六进制,但错误:code.s:1: Error: too many memory references for `mov'。 code.s asm:

mov rax , 0x00000000004007E6
js rax

发生了什么?你能指导我覆盖它吗?

【问题讨论】:

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

标签: gcc assembly hex 64-bit


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-04-06
    • 2020-11-29
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2019-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多