GDB 在进入断点时抛出错误

GDB throws error while stepping into at breakpoint

我正在尝试观看此 link 中有关缓冲区溢出的视频教程 下面是我正在尝试的代码。

#include <stdio.h>

GetInput() 
{
    char buffer[8];

    gets(buffer);
    puts(buffer);   
}

main()
{
   GetInput();       
   return 0;
}

我在 gdb 调试中遇到问题,当我进入第 7 行时,出现以下错误:

_IO_gets (buf=0xbffff458 "k4[=11=]4\b") at iogets.c:33
33  iogets.c: No such file or directory.

我正在按照教程中提到的完全相同的步骤进行操作。 我在 virtual box

上使用 32 位 Kali linux

谁能帮我解决这个问题。

原因很简单,glibc源代码丢失。无论如何都没关系,因为错误不太可能出现在 glibc 中,在这种情况下,您的代码使用的是危险的、已弃用的 gets(),因此它很容易溢出 buffer 数组,导致 未定义的行为

post 的作者正在学习缓冲区溢出利用课程。每个人都没有帮助他,而是跳出了题外话的信息。我们都知道代码是错误的,但是,如果不是糟糕的代码,你应该如何学习缓冲区溢出利用?

在这种情况下,调试无法正常工作,因为调试文件的位置在其他地方。

(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug"

在gdb中执行以下命令

(gdb) set debug-file-directory

现在您将能够调试您的代码。高频