如何 gdb 如何打印一个地址中的内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何 gdb 如何打印一个地址中的内容相关的知识,希望对你有一定的参考价值。
参考技术A gdb查看指定地址的内存地址的值:examine 简写 x-----使用gdb> help x 来查看使用方式x/ (n,f,u为可选参数)
n: 需要显示的内存单元个数,也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义
f:显示格式
x(hex) 按十六进制格式显示变量。
d(decimal) 按十进制格式显示变量。
u(unsigned decimal) 按十进制格式显示无符号整型。
o(octal) 按八进制格式显示变量。
t(binary) 按二进制格式显示变量。
a(address) 按十六进制格式显示变量。
c(char) 按字符格式显示变量。
f(float) 按浮点数格式显示变量
u:每个单元的大小,按字节数来计算。默认是4 bytes。GDB会从指定内存地址开始读取指定字节,并把其当作一个值取出来,并使用格式f来显示本回答被提问者和网友采纳
如何在 gdb 中禁用程序集标签打印
【中文标题】如何在 gdb 中禁用程序集标签打印【英文标题】:How to disable assembly label printing in gdb 【发布时间】:2022-01-01 10:43:11 【问题描述】:当我用x
检查内存时,我可以看到我正在读取的地址的符号:
(gdb) x/16zw &pt_table
0x102000 <pt_table>: 0x00000000 0x00000000 0x00000000 0x00000000
0x102010: 0x00000000 0x00000000 0x00000000 0x00000000
如何禁用标签的打印(或移动到自己的行)以正确对齐数据?我在手册上找不到任何内容。
例子:
(gdb) x/16zw &pt_table
0x102000: 0x00000000 0x00000000 0x00000000 0x00000000
0x102010: 0x00000000 0x00000000 0x00000000 0x00000000
或者:
(gdb) x/16zw &pt_table
<pt_table>:
0x102000: 0x00000000 0x00000000 0x00000000 0x00000000
0x102010: 0x00000000 0x00000000 0x00000000 0x00000000
【问题讨论】:
pipe x/16zw &pt_table | sed 's/ <.*>//'
适合您吗?它可以放在用户定义的命令中,以便于键入。
谢谢,该解决方案会失去着色。
【参考方案1】:
如何禁用标签的打印(或移动到自己的行)以正确对齐数据?
我查看了当前的 GDB 源 (print_address_symbolic
),没有任何方法可以禁止打印 symbol
或 symbol+offset
。
也许您想改用 LLDB。
(gdb) list
1 int abc[100];
2 int main() return abc[2];
(gdb) start
Temporary breakpoint 1 at 0x1129: file t.c, line 2.
Starting program: /tmp/a.out
Temporary breakpoint 1, main () at t.c:2
2 int main() return abc[2];
(gdb) x/8x &abc[1]
0x555555558064 <abc+4>: 0x00000000 0x00000000 0x00000000 0x00000000
0x555555558074 <abc+20>: 0x00000000 0x00000000 0x00000000 0x00000000
与 LLDB 比较:
(lldb) run
Process 3645824 launched: '/tmp/a.out' (x86_64)
Process 3645824 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 1.1
frame #0: 0x0000555555555129 a.out`main at t.c:2:24
1 int abc[100];
-> 2 int main() return abc[2];
(lldb) x/8x &abc[1]
0x555555558064: 0x00000000 0x00000000 0x00000000 0x00000000
0x555555558074: 0x00000000 0x00000000 0x00000000 0x00000000
【讨论】:
lldb 在某种程度上是 gdb 的“替代品”,还是它有自己的术语、配置等(如 vim/emacs)? | 编辑:这开始回答我的问题:gdb vs lldb 我使用dashboard .gdbinit UI 让我需要的一切一目了然。你知道(如果你使用类似的东西)LLDB 有类似的东西吗?以上是关于如何 gdb 如何打印一个地址中的内容的主要内容,如果未能解决你的问题,请参考以下文章