在 Bash 脚本中运行 GDB
Fumbani Banda
2023年10月12日
本教程演示了如何在 bash 脚本中使用带有命令行参数的二进制文件运行 gdb
。
我们将创建一个 C 程序,它接受一个命令行参数并将其转换为二进制文件。我们将在本教程中使用此二进制文件进行演示。
创建一个二进制文件
这是一个 C 程序,它接受一个命令行参数并将其打印到屏幕上。
#include <stdio.h>
void main(int argc, char *argv[]) {
printf("This is a C program!\n");
if (argc < 2) {
printf("No argument passed.\n");
} else {
printf("Argument 1: %s\n", argv[1]);
}
}
使用以下命令编译 C 程序并将其转换为二进制文件。
gcc args.c -o args
不带任何参数运行二进制文件。
./args
不带参数的二进制文件的输出:
This is a C program!
No argument passed.
使用单个参数运行二进制文件。
./args hello
带有单个参数的二进制文件的输出。
This is a C program!
Argument 1: hello
在 Bash 脚本中运行 gdb
bash 脚本使用 -q
选项运行 gdb
,该选项代表完全。它告诉 gdb
在启动时不要打印版本号。--args
选项用于将命令行参数传递给 gdb
加载以进行调试的二进制文件。但是,第一个参数是二进制文件。
在我们的例子中,args
是二进制文件的名称,而 arg1
是传递给二进制文件的参数。
#!/bin/bash
gdb -q --args args arg1
运行 bash 脚本。
bash gdb_script.sh
运行脚本后,它会打开 gdb
,如下所示,但它不会运行二进制文件。你需要键入 run
以执行 gdb
中的二进制文件。
Reading symbols from args...
(no debugging symbols found)...done.
gdb$
要在运行 bash 脚本后自动运行二进制文件,我们可以添加 -ex=r
,如下所示。
!/bin/bash
gdb -q -ex=r --args args arg1
运行 bash 脚本。
bash gdb_script.sh
从输出中,我们可以看到二进制文件是自动运行的,而无需在 gdb
中键入 run
。
Reading symbols from args...
(no debugging symbols found)...done.
Starting program: /root/args arg1
This is a C program!
Argument 1: arg1
[Inferior 1 (process 3372) exited with code 021]
Warning: not running
gdb-peda$
作者: Fumbani Banda