如何在linux上调试内存覆盖

时间:2014-02-12 09:09:30

标签: c linux pointers memory-management

我遇到了一个问题。指针的值被修改,指针指向一个无法访问的地址。顺便说一句,指针的地址在堆上。 我想知道有没有办法在初始化之后将指针设置为只读,当有人试图改变指针的值时,进程将崩溃。

感谢。 杰瑞

3 个答案:

答案 0 :(得分:2)

您可以使用valgrind来检测无效指针访问以及许多其他无效的内存使用情况。

答案 1 :(得分:0)

您可以使用mprotect,但我建议不要修改堆页面,因为这些页面是我libc管理的。

 mprotect(page_aligned_address, len, PROT_READ);

如果您打算使用它,我建议您使用mmap分配内存,以免弄乱您的堆。

答案 2 :(得分:0)

使用以下命令在Linux的终端窗口中生成映射文件:

gcc -o demo -Wl,-Map,demo.map demo.c

您可以轻松找到内存使用出错的位置或覆盖发生的位置。此映射文件将帮助您详细了解内存的每个部分。