我的汇编程序似乎没有输出32位代码
问题描述:
这是我遇到的行为的一个例子。我的汇编程序似乎没有输出32位代码
在组装下面的程序:
[BITS 32]
mov eax, 0x1234
使用:
nasm -f bin in.asm -o out.bin
我得到以下二进制输出:
B8 34 12 00 00
B8是操作码 '进入EAX' 和它应该采取一个32位值并将其放在那里(即应该只是B8 34 12
)。但相反,它将额外的00 00
视为一个64位值。
我不知道这是否是NASM特有的问题,因为我没有尝试过其他的汇编程序。
答
你很困惑。你有4个字节。 4个字节是32位。不是64位。那将是8个字节。
一对十六进制数字是一个字节,这就是反汇编输出将它们分组为十六进制数对的原因。
考虑,作为一个反例,
[BITS 64]
mov rax, 0xCAFEBABEDEADBEEF
能够组装(然后转储为十六进制),以产生
0000000 b848 beef dead babe cafe
000000a
妈的,你说得对。直到再过10分钟才能接受答案... – almosnow
还要注意,如果你没有制作一个扁平的二进制文件,你需要使用'-felf64'或其他任何东西,并且这使得[[64位]]成为多余的。 '[bits 32]'可以让你将32位机器码汇编成一个64位的目标文件,但这通常不会有用。 –
@PeterCordes必须在您的最新消息前几秒删除我的无关评论。肯定错过了'不' –