变量与gdb中的奇怪值

时间:2012-04-27 23:22:15

标签: assembly gdb x86 nasm

我有点像'noob',但我不明白为什么“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

用于汇编代码。

有人有线索吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

感谢您的帮助; - )。