如何在 gdb 中查看C++整数的二进制内容?
How to view binary content of a C++ integer in gdb?
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
相关文章:
- 从二进制文件中读取整数数组
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?
- 读取二进制文件并解释为整数
- 将较大的整数写为二进制并读回它们会产生不好的结果
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- 将二进制编码的无符号字符转换为整数
- 将整数的二进制数据转换为浮点数
- 将非数字字符串存储为二进制整数
- 如何在 gdb 中查看C++整数的二进制内容?
- 添加两个二进制数(整数数组)
- 将二进制转换为负整数
- 编译器C++如何在二进制代码中表示整数
- 为什么C++标准指定有符号整数在具有混合符号的二进制操作中强制转换为无符号整数
- 读取 64 位整数二进制文件
- 我正在尝试读取一个包含字符串和整数的二进制文件..并打印出与字符串对应的整数
- 将整数转换为二进制字符串
- 将fortran生成的二进制文件读取到C++中的带符号整数数组中
- 将从二进制文件读取的字符串转换为整数
- C++ - 将字符串二进制链转换为整数二进制链
- 将字符串转换为整数(二进制等效)