13
在openSUSE,CentOS,Fedora和Ubuntu上可以看到gdb:为什么gdb告诉我一个指针在x86-64上是4个字节?
这个gdb被配置为“x86_64-unknown-linux-gnu”。
(GDB)p的sizeof(void *的)
$ 1 = 4
(GDB)p的sizeof(长)
$ 2 = 4
为什么GDB给我的错在我所有的64位系统上的答案?
在openSUSE,CentOS,Fedora和Ubuntu上可以看到gdb:为什么gdb告诉我一个指针在x86-64上是4个字节?
这个gdb被配置为“x86_64-unknown-linux-gnu”。
(GDB)p的sizeof(void *的)
$ 1 = 4
(GDB)p的sizeof(长)
$ 2 = 4
为什么GDB给我的错在我所有的64位系统上的答案?
当你没有调试任何特定的代码时,gdb似乎会选择一些令人惊讶的默认值。如果您加载了一个64位可执行文件,如:gdb /bin/sh
你得到一个,令人惊讶的少的结果:
(gdb) p sizeof(void *)
$1 = 8
你也可以明确告诉gdb来做些什么:
(gdb) show architecture
The target architecture is set automatically (currently i386)
(gdb) p sizeof(void *)
$1 = 4
(gdb) set architecture
Requires an argument. Valid arguments are i386, i386:x86-64, i8086, i386:intel, i386:x86-64:intel, auto.
(gdb) set architecture i386:x86-64
The target architecture is assumed to be i386:x86-64
(gdb) p sizeof(void *)
$2 = 8
惊人。架构默认为i386。 我会报告这个错误... – 2010-07-12 21:26:29