如何在 gdb 中查看C++整数的二进制内容?

How to view binary content of a C++ integer in gdb?

本文关键字:整数 二进制 C++ gdb      更新时间:2023-10-16
int main()
{
int a = 0;
}

我编译:g++ -std=c++14 -g test.cpp

在 gdb 中运行程序:

gdb ./a.out

(gdb) break main

(gdb) run

(gdb) next

我尝试过的:

(gdb) print /t &a

那打印11111111111111111111111111111111101110101111100

这看起来不像正确的数字,我期待0000....0000。如何从整数变量 a 的内存位置打印二进制值?

您正在尝试打印main堆栈帧中的地址,与其值无关。尝试:

print /t a

使用 p/x 打印十六进制内容。 让我们看看 a 已设置为 0。

(gdb) n
28               return(0);
(gdb) p a
$6 = 0

还行

(gdb) p /x a
$7 = 0x0

十六进制确定

(gdb) p /x &a
$8 = 0x7fffffffe3dc

自动内存中 A 的地址(在堆栈上(。

(gdb) p /t &a
$9 = 11111111111111111111111111111111110001111011100

看起来像二进制,在我的机器上和你的机器上略有不同。 好。

(gdb) print /t &a

那打印11111111111111111111111111111111101110101111100

前面

That doesn't look like the right number?
33 个 1,最后 4 位是0xc的。

与十六进制相比,我的看起来是正确的。 0x7fffffffe3dc。

我怀疑你的也是。

如果你期待一堆0,那将是A的值,而不是A的地址

(gdb) p /t a
$10 = 0

GDB 缩小了结果 - 0 确实是一堆 0。

你也可以使用这样的gui来查看它: https://github.com/cyrus-and/gdb-dashboard 如果您没有太多的gdb经验,我建议您这样做。手头的简单备忘单也会有所帮助:http://darkdust.net/files/GDB%20Cheat%20Sheet.pdf