我现在正在基于文章http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html在我自己的PC(Ubuntu 9.10,gcc-4.4.1)上执行堆栈缓冲区溢出攻击测试。但我还没有实现目标。每次抛出段错误并伴有一些错误信息。
我编译源代码,并希望使用objdump获取更多信息。函数__strcpy_chk在转储的汇编代码中被调用,并且它表示“__strcpy_chk()函数不在源标准中;它只在二进制标准中。” 这是编译器用来保护运行时堆栈的机制吗?要完成测试,我该如何绕过保护?
问候。
答案 0 :(得分:3)
该函数试图检查你是不是意外地破坏了事情(即覆盖了函数的返回地址),它是strcpy
的实现的一部分,而不是它的规范。这只是strcpy
问题的一个部分修补程序,但它确实可以保护您免受网页所涉及的问题的影响,并且成本很低。
如果您想避免它,请编写您自己的strcpy
版本。你首先想到的天真实施应该有问题,并且可以很好地进行演示。