【发布时间】:2020-08-02 17:13:06
【问题描述】:
我想使用nasm 将64-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 并轻松尝试不同的模式。