如何排查大型C程序中的内存写越界导致的coredump

如何排查大型C程序中的内存写越界导致的coredump,第1张

这类问题手工排查是很麻烦的,基本上是大海捞针。

遇到这类问题个人建议先找个好的malloc配合挂valgrind运行看看。

常规的思路是让malloc和free在分配和释放内存时,分配和释放(unmap掉)新的内存页,从而让系统在后续访问该虚拟地址时触发page fault并最终导致SIGSEGV,让程序立即崩溃。

FreeBSD内建的jemalloc还提供了许多其他辅助调试特性,如防止反复free(常见的可以安全问题的一类use after free,abort:true)、填充无效数据(防止malloc之后不做初始化,junk:true)等等,此外还可以配合valgrind做redzone(帮助检测缓冲区溢出)

linux终端下,编译C语言程序稿御步骤为: 采用vi进行毁敬灶源代码编写,编写完成后,:wq存盘退出,如: vi test.c 在命令行下,运行gcc编纤扮译程序,生成执行码,如: gcc -o test test.c -o 表示指明生成的执行码名称 运行编译后的执行码 ./test


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12317223.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存