我有一个正在用gdb调试的c程序。这是在Ubuntu x86上完成的,并且使用gcc编译了c程序。 我一个接一个声明两个int变量
int a = atoi (argv[1]);
int b = atoi (argv[2]);
我传递给这些的值分别是2和4。现在,我打破这些行并进行调试。根据以下数据,似乎int b从地址0xbffff048开始,并占用0xbffff048、0xbffff049、0xbffff04a,0xbffff04b。而且int b从下一个地址0xbffff04c开始也是有意义的。但是,如果我显示这四个地址的值,则返回的十六进制值不等于十进制4(这是在应用程序中确认并在gdb调试中打印的b值)。我在这里解释/做错了什么?
(gdb) display a
2: a = 2
(gdb) display b
3: b = 4
(gdb) display &a
4: &a = (int *) 0xbffff04c
(gdb) display &b
5: &b = (int *) 0xbffff048
(gdb) x 0xbffff048
0xbffff048: 0x00000004
(gdb) x 0xbffff049
0xbffff049: 0x02000000
(gdb) x 0xbffff04a
0xbffff04a: 0x00020000
(gdb) x 0xbffff04b
0xbffff04b: 0x00000200
答案 0 :(得分:3)
您看到的值2在整数指定的4个字节之后。您的输入4就在那里占据第一个半字节。
我认为评论可以更好地解释它。