C 设置程序调试缓冲区溢出系统
我记得很久以前读过一篇文章,如果我想在我的linux机器上测试缓冲区溢出,我需要在系统中设置一些东西来允许它发生。我记不清到底是为了什么,但我希望有人知道我在说什么 我希望能够测试我的程序是否存在漏洞,并查看寄存器是否被覆盖C 设置程序调试缓冲区溢出系统,c,linux,ubuntu,buffer,buffer-overflow,C,Linux,Ubuntu,Buffer,Buffer Overflow,我记得很久以前读过一篇文章,如果我想在我的linux机器上测试缓冲区溢出,我需要在系统中设置一些东西来允许它发生。我记不清到底是为了什么,但我希望有人知道我在说什么 我希望能够测试我的程序是否存在漏洞,并查看寄存器是否被覆盖 编辑:我正在运行Ubuntu10.04,一个选项是使用内存调试器,例如。但是,请注意,Valgrind只跟踪动态分配内存上的缓冲区溢出 如果您有选择使用C++而不是C的选项,那么您可以切换到使用容器而不是原始数组,并使用GCC的“选中容器”模式(参见)。我相信其他编译器也提
编辑:我正在运行Ubuntu10.04,一个选项是使用内存调试器,例如。但是,请注意,Valgrind只跟踪动态分配内存上的缓冲区溢出
如果您有选择使用C++而不是C的选项,那么您可以切换到使用容器而不是原始数组,并使用GCC的“选中容器”模式(参见)。我相信其他编译器也提供类似的工具。
一个选项是使用内存调试器,例如。但是,请注意,Valgrind只跟踪动态分配内存上的缓冲区溢出如果您有选择使用C++而不是C的选项,那么您可以切换到使用容器而不是原始数组,并使用GCC的“选中容器”模式(参见)。我相信其他编译器也提供了类似的工具。
当使用gdb
调试器追踪内存错误时,另一个提示是禁用,例如
echo 0 > /proc/sys/kernel/randomize_va_space
这样做之后,同一确定性程序的两次连续运行通常会在相同的地址(从一次运行到另一次运行)进行分区,这有助于大量调试gdb
(因为malloc
通常会在运行中的相同给定位置从一次运行到另一次运行给出相同的结果)
您还可以使用gdb
的watch
命令。特别是,如果在第一次运行中(禁用ASLR),您认为位置0x123456正在发生意外更改,则可以在第二次运行时向gdb
发出以下命令:
watch * (void**) 0x123456
当这个位置改变时,gdb
就会中断(遗憾的是,它必须是mmap
-ed) 当使用gdb
调试器追踪内存错误时,另一个提示(除此之外)是禁用,例如
echo 0 > /proc/sys/kernel/randomize_va_space
这样做之后,同一确定性程序的两次连续运行通常会在相同的地址(从一次运行到另一次运行)进行分区,这有助于大量调试gdb
(因为malloc
通常会在运行中的相同给定位置从一次运行到另一次运行给出相同的结果)
您还可以使用gdb
的watch
命令。特别是,如果在第一次运行中(禁用ASLR),您认为位置0x123456正在发生意外更改,则可以在第二次运行时向gdb
发出以下命令:
watch * (void**) 0x123456
当这个位置改变时,
gdb
就会中断(遗憾的是,它必须是mmap
-ed) 您似乎要求两件事:“缓冲区溢出”和“寄存器覆盖”。你能在你的术语上更仔细一点吗?你坚持基于ubuntu的解决方案吗?你似乎要求两件事:“缓冲区溢出”和“寄存器覆盖”。你能在你的术语上更仔细一点吗?你坚持基于ubuntu的解决方案吗?