我正试图关注缓冲区溢出的视频tutoial link 以下是我正在尝试的代码。
#include <stdio.h>
GetInput()
{
char buffer[8];
gets(buffer);
puts(buffer);
}
main()
{
GetInput();
return 0;
}
我在gdb调试中得到了一个问题,当我走到第7行时,我得到以下错误:
_IO_gets (buf=0xbffff458 "k\204\004\b") at iogets.c:33
33 iogets.c: No such file or directory.
我遵循与本教程中提到的完全相同的步骤。 我在虚拟盒子上使用32位Kali linux
任何人都可以帮助我解决这个问题。
答案 0 :(得分:4)
该帖子的作者正在遵循缓冲区溢出开发课程。不是帮助他,每个人都跳出主题信息。我们都知道代码是错误的,但是,如果没有错误的代码,你应该如何学习缓冲区溢出利用呢?
在这种情况下,调试没有正常工作,因为调试文件的位置在其他地方。
(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug"
在gdb
中执行以下操作(gdb) set debug-file-directory
现在您可以调试代码了。 HF
答案 1 :(得分:0)
原因很简单, glibc 源代码丢失了。无论如何都没关系,因为 glibc 中可能存在错误,在这种情况下,您的代码使用了危险的,已弃用的gets()
,因此它很容易溢出buffer
数组,导致未定义的行为。