我记得很久以前阅读,如果我想测试我的Linux盒缓冲区溢出,我需要在系统中设置一些东西,让它发生。我不记得究竟是什么,但我希望有人知道我在说什么。设置系统为程序调试缓冲区溢出
我希望能够测试我的漏洞程序,并查看寄存器是否被覆盖。
编辑:我运行Ubuntu 10.04
我记得很久以前阅读,如果我想测试我的Linux盒缓冲区溢出,我需要在系统中设置一些东西,让它发生。我不记得究竟是什么,但我希望有人知道我在说什么。设置系统为程序调试缓冲区溢出
我希望能够测试我的漏洞程序,并查看寄存器是否被覆盖。
编辑:我运行Ubuntu 10.04
一种选择是使用内存调试如Valgrind。但是,请注意,Valgrind仅跟踪动态分配内存上的缓冲区溢出。
如果您可以选择使用C++而不是C,那么您可以切换到使用容器而不是原始数组,并利用GCC的“检查容器”模式(请参阅GCC STL bound checking)。我相信其他编译器也提供类似的工具。
+1 – 2011-12-19 00:13:29
当使用gdb
调试器追踪内存错误时,另一个提示(另外Oli's answer)将禁用address space layout randomization,例如,
echo 0 > /proc/sys/kernel/randomize_va_space
这样做之后,连续两次相同的确定性计划的运行通常会在同一地址(从一次运行到另一个),这有助于gdb
(因为那时malloc
通常给人的很多调试mmap
地区从一次运行到另一次运行的相同结果,在运行中的相同给定位置)。
您也可以使用gdb
的watch
命令。特别是,如果在第一次运行(与ASLR禁用),你的身影,该位置为0x123456被unexepectedly改变,你可以在它的第二轮给gdb
以下命令:
watch * (void**) 0x123456
然后gdb
将打破此位置发生变化时(不幸的是,它必须是mmap
-ed已经)。
valgrind,也许? – fge 2011-12-19 00:07:55
你似乎在问两件事:“缓冲区溢出”和“寄存器覆盖”。你可以在术语中多加小心一点吗? – dmckee 2011-12-19 00:56:00
你坚持使用基于ubuntu的解决方案吗?用于'-D_GLIBCXX_DEBUG'的 – 2011-12-19 05:51:51