在 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