我试图追踪堆分配内存的内存访问.
例如,如果我有以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
我主要感兴趣的是访问内存的函数和已修改内容的地址.
我曾尝试使用多个内存工具,如ptrace,strace,ASan,Dmalloc,但我没有达到结果.
另一个想法是使用mprotect修改内存更改内存保护并为页面错误编写处理程序.我将内存设置为只读,当发生写入时,处理程序修改页面保护并让函数将内容写入内存,但之后我无法再次读取页面,以便进一步访问.
你有关于如何监控每次写入堆内存的提示吗?