2017-07-03 59 views
1

这是我遇到的行为的一个例子。我的汇编程序似乎没有输出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特有的问题,因为我没有尝试过其他的汇编程序。

回答

2

你很困惑。你有4个字节。 4个字节是32位。不是64位。那将是8个字节。

一对十六进制数字是一个字节,这就是反汇编输出将它们分组为十六进制数对的原因。

考虑,作为一个反例,

[BITS 64] 

mov rax, 0xCAFEBABEDEADBEEF 

能够组装(然后转储为十六进制),以产生

0000000 b848 beef dead babe cafe    
000000a 
+0

妈的,你说得对。直到再过10分钟才能接受答案... – almosnow

+2

还要注意,如果你没有制作一个扁平的二进制文件,你需要使用'-felf64'或其他任何东西,并且这使得[[64位]]成为多余的。 '[bits 32]'可以让你将32位机器码汇编成一个64位的目标文件,但这通常不会有用。 –

+0

@PeterCordes必须在您的最新消息前几秒删除我的无关评论。肯定错过了'不' –

相关问题