Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 设置程序调试缓冲区溢出系统_C_Linux_Ubuntu_Buffer_Buffer Overflow - Fatal编程技术网

C 设置程序调试缓冲区溢出系统

C 设置程序调试缓冲区溢出系统,c,linux,ubuntu,buffer,buffer-overflow,C,Linux,Ubuntu,Buffer,Buffer Overflow,我记得很久以前读过一篇文章,如果我想在我的linux机器上测试缓冲区溢出,我需要在系统中设置一些东西来允许它发生。我记不清到底是为了什么,但我希望有人知道我在说什么 我希望能够测试我的程序是否存在漏洞,并查看寄存器是否被覆盖 编辑:我正在运行Ubuntu10.04,一个选项是使用内存调试器,例如。但是,请注意,Valgrind只跟踪动态分配内存上的缓冲区溢出 如果您有选择使用C++而不是C的选项,那么您可以切换到使用容器而不是原始数组,并使用GCC的“选中容器”模式(参见)。我相信其他编译器也提

我记得很久以前读过一篇文章,如果我想在我的linux机器上测试缓冲区溢出,我需要在系统中设置一些东西来允许它发生。我记不清到底是为了什么,但我希望有人知道我在说什么

我希望能够测试我的程序是否存在漏洞,并查看寄存器是否被覆盖


编辑:我正在运行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的解决方案吗?