【问题标题】:Assembling 64-bit instructions to raw machine code with nasm使用 nasm 将 64 位指令组装成原始机器代码
【发布时间】:2020-08-02 17:13:06
【问题描述】:

我想使用nasm64-bit 汇编指令汇编成原始机器代码。如果这样做,我会收到错误消息:

error: instruction not supported in 16-bit mode

示例输入:

mov rax, 0x12345678

示例命令:

$ nasm input.s -o output

By default, nasm uses the bin output format 假定为16-bit。所有其他选项似乎都支持64-bit,但仅在生成完整的执行/目标文件时而不是在仅生成原始机器代码时。

有没有办法使用二进制格式但用64-bit 代替?

我找到了另一种使用GNU assembler 完成此任务的方法,但我想知道您是否也可以在nasm 中做同样的事情。

【问题讨论】:

  • 您是否在文件顶部添加了BITS 64
  • 不幸的是,没有办法从 NASM 的命令行中执行此操作,默认的 -f bin 平面二进制文件仅适用于默认的 BITS 16。我想你可以使用宏并在源代码中使用 nasm -dBITMODE=64 并使用 bits BITMODE 以便尝试在不同模式下组装相同的代码。
  • @PeterCordes 有趣的想法。我继续修补 NASM 以支持 -b 标志,用于从命令行设置默认位数。但是,我缺乏-b 标志有用的日常情况。任何想法? XD
  • @MargaretBloom:好主意。我忘记了为什么我曾经想要这个。可能只是为了看看一两行是如何组装的,或者从快速的一次性获取机器代码到 hexdump 并轻松尝试不同的模式。

标签: assembly x86 x86-64 nasm


【解决方案1】:

BITS 64 添加到程序集源文件的顶部就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2014-12-17
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多