这是我遇到的行为的一个例子。
组装以下程序时:
[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特有的问题,因为我还没有尝试过其他的汇编程序。
答案 0 :(得分:2)
一对十六进制数字是一个字节,这就是反汇编输出将事物分组成十六进制数字对的原因。
作为一个反例,考虑一下
int x = 1;
//would print 2 as first statement will increment x and then x will be stored
int x = ++x;
System.out.println(x);
可以组装(然后转储到十六进制)以生成
[BITS 64]
mov rax, 0xCAFEBABEDEADBEEF