我想监视、记录应用程序中的特定变量,但我不确定解决此问题的正确方法是什么。
该应用程序是 C(5%) 和 C++(95%) 的混合体,它比较大,大约有 500 万行代码。目标操作系统是 CentOS 7,我的应用程序总是使用调试标志 (-g3 -ggdb) 编译,如果需要,我可以添加/删除标志以实现我正在寻找的东西。在理想情况下,我不想在主应用程序中检测代码,主要是由于应用程序的大小,和/或向我的应用程序添加任何开销。
我还没有开始实施任何东西,但我有两种不同的方法:
编写第二个程序,给定一个变量名,这个变量在我的主程序中声明,它:
- 解析主程序的调试符号
- 找到我们感兴趣的变量的地址
- 以某种方式设法访问主应用程序的虚拟地址空间并使用我们在上一步中找到的地址读取变量的值
我仍然不确定如何处理不同的数据类型,也许我可以通过解析主程序以某种方式推断数据类型,但我现在可以确定。
我知道操作系统不会让我轻松访问另一个进程的内存,但应该有一个技巧。那是什么伎俩?有没有更直接的方法来做到这一点?与此相关的开销是多少?有没有办法也写入变量?
在主应用程序中添加逻辑:
- 通过网络将变量名称传递给应用程序
- 该应用程序读取并解析自己的二进制文件
- 找到我们感兴趣的变量的地址,我们就完成了
第二种方法更有趣,因为一切都在它的地址空间中,所以不需要任何技巧。我仍然必须知道变量的类型。
我相信其他人也遇到过类似的问题,但我不知道这个过程叫什么。我应该搜索什么来获取更多信息?我知道这是一个非常普遍的问题,任何指针都非常感谢。
