-fstack-protector和-fstack-protector-all是保护基于堆的内存分配还是仅保护基于堆栈的内存分配?
前2和-fmudflap有什么区别?
有哪些建议可以更好地进行调试?
(我不确定gcc man page是否足够清楚,或者我根本不理解......)
char foobar[10]; // stack-based
char *foobar = malloc(10); // heap-based
答案 0 :(得分:3)
-fstack-protector和-fstack-protector-all与堆分配无关。
-fstack-protector仅保护字符串(缓冲区溢出攻击的主要问题目标),-fstack-protector-all保护所有类型。这里有一些描述:
http://en.wikipedia.org/wiki/Buffer_overflow_protection
答案 1 :(得分:-1)
Mudflap用于指针检查。见this pdf。 您需要安装相关的库才能使用这些gcc功能。 我更喜欢valgrind来检测这样的错误,因为不需要重新编译/重新链接并且更容易使用,但这些也很有价值。