-fstack-protector,-fstack-protector-all和-fmudflap

时间:2011-10-18 15:48:27

标签: c linux gcc

-fstack-protector和-fstack-protector-all是保护基于堆的内存分配还是仅保护基于堆栈的内存分配?

前2和-fmudflap有什么区别?

有哪些建议可以更好地进行调试?

(我不确定gcc man page是否足够清楚,或者我根本不理解......)

char foobar[10]; // stack-based

char *foobar = malloc(10); // heap-based

2 个答案:

答案 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来检测这样的错误,因为不需要重新编译/重新链接并且更容易使用,但这些也很有价值。