用于c程序的内存访问监视器

By simon at 2018-02-28 • 0人收藏 • 68人看过

我正试图追查内存访问堆分配内存。 例如,如果我有以下代码:

void set_value(int* buffer, size_t pos, int value) {
    buffer[pos] = value;
}
int main(void) {    
    int* buffer = malloc(BUFF_SIZE * sizeof(int));
    set_value(buffer, 2, 10);
    set_value(buffer, 3, 12);

    free(buffer);
    return 0;
}
我是主要关注访问内存和地址的函数 的内容已被修改。 我试过了o使用多个记忆工具,如* ptrace strace , * ASan *, Dmalloc ,但我没有达到结果。 另一个ide一个是修改内存改变了内存的保护 使用 mprotect *并编写页面错误的处理程序。我是一个记忆 只读,当写入发生时,处理程序修改页面保护 并让函数编写cont记忆中,但之后我不能 使页面再次只读,以进一步访问。 你有关于如何monito的任何提示r每次写入堆内存?

3 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

如果你愿意监视每个内存访问,我建议去看看 在诸如PIN [1]和/或DynInst [2]的包中。两者都是动态二进制 使您可以修改应用程序二进制文件的工具包 注入你想要的代码。在这种情况下,这两种工具都可以让你进行测试 每一条指令,并知道他们参考的地址(如果它们是 负载/秒tores)。然后,如果你只对malloc分配的内存感兴趣 (或realloc或calloc),你也可以测试这些路由捕捉 他们的入口参数和出口值来确定记忆的区域 利益。两种工具都提供相似的功功能。我会说他们的主要 不同之处在于PIN在DynInst时专门针对英特尔处理器 是一个操作en源代码项目,支持不同的处理器体系结构 (英特尔,IBM-Power,ARM)。 由于仪器可能是昂贵的我在这个特定的情况下 仪器的每条指令,你可以负担得起的内存参考, 我建议你探索最近英特尔的PEBS基础架构[3] 处理器(AMD处理器具有类似的名称IBS)。 PEBS可以用过的 来自Linux操作系统内的perf工具[4](我不知道它是否是 在其他OSeS上可用) [1] PIN <https:// software.intel.com/en-us/articles/pin-a-dynamic-binary- 仪器仪表,工具> [2] DynInst http://www.dyninst.org [3]英特尔手册第18.4.4节基于事件的精确采样(PEBS) http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-软件显影剂体积-3B-部分-2-手册.pdf [4] Linux perf来取样内存地址https://lwn.net/Articles/531766/

2018-02-28   #2

如果你愿意监视每个内存访问,我建议去看看 在诸如PIN [1]和/或DynInst [2]的包中。两者都是动态二进制 使您可以修改应用程序二进制文件的工具包 注入你想要的代码。在这种情况下,这两种工具都可以让你进行测试 每一条指令,并知道他们参考的地址(如果它们是 负载/秒tores)。然后,如果你只对malloc分配的内存感兴趣 (或realloc或calloc),你也可以测试这些路由捕捉 他们的入口参数和出口值来确定记忆的区域 利益。两种工具都提供相似的功功能。我会说他们的主要 不同之处在于PIN在DynInst时专门针对英特尔处理器 是一个操作en源代码项目,支持不同的处理器体系结构 (英特尔,IBM-Power,ARM)。 由于仪器可能是昂贵的我在这个特定的情况下 仪器的每条指令,你可以负担得起的内存参考, 我建议你探索最近英特尔的PEBS基础架构[3] 处理器(AMD处理器具有类似的名称IBS)。 PEBS可以用过的 来自Linux操作系统内的perf工具[4](我不知道它是否是 在其他OSeS上可用) [1] PIN <https:// software.intel.com/en-us/articles/pin-a-dynamic-binary- 仪器仪表,工具> [2] DynInst http://www.dyninst.org [3]英特尔手册第18.4.4节基于事件的精确采样(PEBS) http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-软件显影剂体积-3B-部分-2-手册.pdf [4] Linux perf来取样内存地址https://lwn.net/Articles/531766/

2018-02-28   #3

实现这一目的的更好工具是通过利用所有新功能 所谓的硬件性能委员会的现代处理器之三。访问这些论文 计数器,你需要一个特殊的API,我向你推荐PAPI(PAPI: 性能API)。它提供了一个巨大的功能访问这些计数器和 测量所有微架构事件,例如缓存他的,未命中的,浮点的 OPERAT离子等等。

登录后方可回帖

Loading...