摘录几篇文档,归纳一下:
mudflap:
编译时加上-fmudflap -lmudflap,编译出的程序在运行时会进行内存越界等检测。
gcc mudflap_test.c -fmudflap -lmudflap
仅限于GCC4.9之前的GCC版本:
The mudflap run time checker was removed in GCC 4.9 and it is superseded by Address Sanitizer. The mudflap options remain, but do nothing. This page applies only to earlier versions of GCC.
也就是说从GCC 4.9开始就mudflap就被Address Sanitizer(GCC 4.8引入)给替代了!~
address sanitizer:
gcc 4.8的一个很酷的新特性是内建的“地址消毒剂”:C/C++的内存错误检测器,例如,如果您访问了已经删除的内存,它会立刻报告。
只要在编译器调用中添加-fsanitize=address -fno-omit-frame-pointer,在链接器调用中添加-fsanitize=address。
AddressSanitizer , a fast memory error detector, has been added and can be enabled via -fsanitize=address. Memory access instructions will be instrumented to detect heap-, stack-, and global-buffer overflow as well as use-after-free bugs. To get nicer stacktraces, use -fno-omit-frame-pointer.
具体可参考后面的link。
相关link如下:
使用mudflap检查内存越界
在Qt中使用gcc 4.8.0的地址消毒剂(Address Sanitizer)
下面两个link是关于GCC4.8的,里面也提到address sanitizer,附在这里。
GCC 4.8发布,完成向C++的迁移
http://www.internetnews.com/blog/skerner/open-source-gcc-4.8-compiler-including-address-sanitizer-security.htmlOpen Source GCC 4.8 Compiler Including Address Sanitizer Security