如何使用 GDB 在内存空间中查找引用某个地址的所有指针?

Posted

技术标签:

【中文标题】如何使用 GDB 在内存空间中查找引用某个地址的所有指针?【英文标题】:How to find all pointers referencing a certain address in the memory space using GDB? 【发布时间】:2018-04-20 02:48:14 【问题描述】:

我想在我的程序中找到所有引用某个地址的指针。如何使用 GDB 做到这一点?谢谢。我的程序是 C++

【问题讨论】:

也许有人会给你一些魔法,但在那之前我会说你不能。最大的问题是你为什么需要?您要解决的问题是什么? 扫描所有进程内存以获取该值?它会有误报。 您可以在该地址上放置一个观察点,并找到所有实际取消引用这些指针的位置。 @Yakk-AdamNevraumont 这对源代码级调试没有多大帮助。 【参考方案1】:

这是一个“困难的话题”。单独使用 gdb 可能很难做到这一点,但 valgrind 可能会有所帮助(请参阅 http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.valgrind-monitor-commands 了解 valgrind 在作为 gdbserver 运行时可以做什么)。事实上,valgrind 有一种跟踪指针以检测内存泄漏的技术......但是,如果你的程序对指针做了一些棘手的事情(比如屏蔽它们然后重新创建它们、打包它们、保持它们不对齐等),那么将没有标准工具能够帮助你。

【讨论】:

以上是关于如何使用 GDB 在内存空间中查找引用某个地址的所有指针?的主要内容,如果未能解决你的问题,请参考以下文章

在GDB中如何从文件中填充内存

使用gdb进行写操作

js基础之引用数据类型

如何 gdb 如何打印一个地址中的内容

内存地址上的观察点

Linux分页机制之分页机制的演变--Linux内存管理