我正在使用Pin一些针对x64 ELF二进制代码的执行监控任务。
监控过程中,对于原代码的任何内存写/读操作,只要涉及到heap. 但是,给定一个内存地址,我不知道它是否指的是heap内存区域。
我能想到的一种可能的解决方案是,在每次内存操作之前,我获取目标进程的运行时内存区域信息,并检查当前内存地址是否在该区heap域内。这可以通过在 Pintool 中执行以下步骤来完成。
- 获取被监控进程的进程ID(这一步可以使用
PinAPIPin_GetPid) - 读取进程内存区域信息
/proc/XXX/maps - 找到
heap内存区域 - 检查当前地址是否在
heap区域内
但是,这很乏味,我的测试表明这非常慢,因为内存大小heap在运行时可能会发生变化,这意味着我每次都需要在内存操作之前执行上述步骤。
所以我想知道,是否Pin有提供heap内存区域信息的API ?或者有没有比上述更有效的解决方案?
==================== 更新 ============================ ===
