共 1 篇文章

标签:如何在Linux上启动并使用gdb调试程序 (linux启动gdb)

如何在Linux上启动并使用gdb调试程序 (linux启动gdb)

GDB是GNU调试器的缩写,是常用的开源调试工具。使用GDB可以帮助开发人员对程序进行调试、查找错误和跟踪程序的正确性。 在Linux上,GDB是默认安装的工具,而且它可以用于调试各种编程语言的程序,比如C、C++、Python等。在本文中,我们将详细介绍如何在Linux上启动并使用GDB调试程序。 步骤1:编译程序 在开始GDB调试之前,我们需要先编译程序。通常情况下,我们建议使用GCC编译器来编译程序。以下是使用GCC编译C程序的示例命令: “` gcc -g -o hello hello.c “` 其中,`-g`选项启用了编译器的调试信息选项,以便GDB可以读取并使用这些信息。 步骤2:启动GDB 启动GDB有两种方式: 方式一:在命令行中启动 使用以下命令在命令行中启动GDB: “` gdb ./hello “` 其中,`./hello`是你要调试的程序文件。 方式二:在GDB中启动 使用以下命令在GDB中启动程序: “` gdb “` 然后,使用GDB的`file`命令加载程序,如下所示: “` file ./hello “` 步骤3:设置断点 在程序中设置断点是调试的之一步。在GDB中,我们可以使用`break`命令在程序中设置断点。以下是一个设置断点的示例: “` break mn “` 这会在程序中的`mn`函数中设置一个断点。 您还可以使用行号设置断点,如下所示: “` break 10 “` 这会在程序的第10行设置一个断点。 步骤4:运行程序 一旦设置了断点,我们就可以运行程序了。在GDB中,您可以使用`run`命令运行程序。例如: “` run “` 当程序运行时,GDB会停在之一个断点处。 步骤5:查看程序状态 一旦程序运行并停在之一个断点处,您可以使用以下命令查看程序的状态: – `list`:显示程序的源代码 – `info locals`:显示本地变量的值 – `info registers`:显示寄存器的当前值 – `info breakpoints`:显示当前设置的断点 步骤6:单步执行 一旦程序开始运行,您可以使用`next`命令单步执行程序。它会将控制权转移到下一条语句处。例如: “` next “` 使用该命令以单步方式执行程序将有助于您找到错误并检查程序的各个部分。 步骤7:继续执行 要继续执行程序,您可以使用`continue`命令。例如: “` continue “` 步骤8:退出GDB 要退出GDB,您可以使用`quit`命令。例如: “` quit “` 这是调试结束后非常重要的一步,以确保GDB和程序同时退出。 结论 在本文中,我们详细介绍了如何在Linux上使用GDB调试程序。学习如何设置断点、单步执行和继续执行程序,以及如何使用各种命令查看程序的状态,将帮助开发人员在程序中找到错误并调试程序。 相关问题拓展阅读: [转载] 从正在运行的Linux进程中dump出内存内容 linux gdb怎么使用? [转载] 从正在运行的Linux进程中dump出内存内容 最近看到有个CTF题感觉挺有意思,就团盯晌是从一个bin中找到一个secret key,然后用来签名session cookies用来怼一个使用go的Web服务器。通常这种类型题的flag都比较直接。可以直接用strings怼这个bin就可以了,然而这次的这个题目中的bin不同,因为有太多杂碎(noise)要过滤了。于是在此我就来展示一下如何用一些基本的Linux命令配合gdb从进程中dump出内存中的信息。 先file一下, 发现是64位的Linux可执行文件。 然后strings一下, 发现字符串太多,还是先不看,再研究深一点吧。 然后先运行一下程序, 然后再另一个终端找到这个进程的PID 然后cat一下它的内存(太长不看TL;DR) 似乎太多了有点可怕,但是不用害怕。 然后启动gdb,将改进程attach到gdb上。 然后就是gdb命令 解释一下语法: 然后就是用strings命令找出刚才dump出的文件的字符串,我喜欢最少10个长度的字符串(-n 10)来过滤掉一些无用的信息(noise)。 结果如下: 可以看到好像有个hash值,为了不泄露CTF题的答案,我已经把hash值改了。 总结 好了,你已经找到运行的进程的PID,dump出了那个进程的内存内容,然后用gdb,strings命令找出了有用的数据。 以上翻译自: Let’s get your hands dirty Down to business 于是我也想试一下啊,然而我想找一个执行命令之后不退出的进则空程还蛮难的,最终我想到了apache,然而必须要有客户端与apache建立TCP长连接,如果是那种5xx的错误,比如这个, 就会发现TCP连接建立之后马上又断开了。...

技术分享