0

我有点“菜鸟”,但我不明白为什么“print WeirdValue”会使用以下代码返回“16777216”(1000000000000000000000000):

section .data

    Var db 0

    WeirdValue db 0

当在

section .data

    Var  dd 0

    WeirdValue db 0

它返回正确的“0”。

我在 64 位系统上,我正在使用命令

nasm -f elf32

用于组装代码。

有人有线索吗?

4

2 回答 2

4

“db”声明一个字节。16777216 不适合一个字节,因此您的打印函数正在打印一个 dword(可以用您在第二个示例中使用的“dd”声明)。它正在打印正确的值(即低位字节为 0),它打印奇数的原因是因为在地址 [WeirdValue + 3] 处有一个字节当时包含 0x01。

编辑-我注意到您两次都使用“db”-我的猜测是后一个代码使 WeirdValue 更接近 8 字节对齐值的边界。

于 2012-04-27T23:35:35.850 回答
0

问题解决了。正如 Score_Under 所指出的,“print WeirdValue”将变量打印为双字,而它是一个字节;不知道为什么。我只是用“x /b &WeirdValue”(/b = byte)检查变量的值。

谢谢你的帮助 ;-)。

于 2012-04-28T12:33:36.463 回答