C GDB在进入at断点时抛出错误

C GDB在进入at断点时抛出错误,c,gdb,buffer-overflow,C,Gdb,Buffer Overflow,我正试图跟随一个视频教程,从这个缓冲区溢出 下面是我正在尝试的代码 #include <stdio.h> GetInput() { char buffer[8]; gets(buffer); puts(buffer); } main() { GetInput(); return 0; } 我遵循的步骤与教程中提到的完全相同。 我在虚拟机上使用32位Kali linux 谁能帮我解决这个问题 原因很简单,就是缺少glib

我正试图跟随一个视频教程,从这个缓冲区溢出 下面是我正在尝试的代码

#include <stdio.h>

GetInput() 
{
    char buffer[8];

    gets(buffer);
    puts(buffer);   
}

main()
{
   GetInput();       
   return 0;
}
我遵循的步骤与教程中提到的完全相同。 我在虚拟机上使用32位Kali linux


谁能帮我解决这个问题

原因很简单,就是缺少glibc源代码。无论如何,这并不重要,因为glibc中不太可能存在此错误,在这种情况下,您的代码使用了危险的、不推荐使用的
get()
,因此它很容易使
缓冲区溢出
数组,导致未定义的行为。

本文作者正在遵循缓冲区溢出攻击过程。每个人都没有帮助他,而是跳出话题外的信息。我们都知道代码是错误的,但是,如果不是在一个错误的代码上,您应该如何学习缓冲区溢出攻击呢

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

(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

不要使用
gets()
这是一个不推荐使用的旧函数。如果教程建议,它要么不好,要么太旧,找到另一个教程。另外,您的
main()
也错了。您是否使用gcc警告标志编译过,如
-Wall-Wextra-Werror
?是的,我知道,但为了学习,我正在尝试。该程序编译得非常好,运行良好。我只是在调试它时才遇到问题。不要学习一些鼓励糟糕编程实践的东西,你们永远不会使用它,因为最近的c标准不推荐使用它。请尝试另一个教程,相信我。它编译时没有警告,但启用了它们,您应该会看到一些警告,如
gets()
已被弃用,并且
main()
没有返回类型
GetInput()
也没有返回类型,因此如果启用警告,编译器必须抱怨。在我的例子gcc-5.1中,编译器警告
gets()
的隐式声明,可能是因为默认情况下,它使用的是c11标准,而该标准中的函数不再存在。它还警告你提到的其他事情。用
-std=c89
编译它,它仍然告诉我
gets()
已被弃用。该程序运行良好,但其gdb在调试时抛出此错误。非常感谢。我也参加了一个BO视频课程,遇到了这个问题。谷歌在这里登陆,这实际上帮助我解决了这个问题。谢谢