在 Bash 指令碼中執行 GDB
    
    Fumbani Banda
    2023年10月12日
    
    Bash
    Bash GDB
    Bash Arguments
    
 
本教程演示瞭如何在 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$ 
        Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
    
作者: Fumbani Banda
    
