在 Bash 指令碼中執行 GDB

Fumbani Banda 2023年1月30日 2022年5月14日
  1. 建立一個二進位制檔案
  2. 在 Bash 指令碼中執行 gdb
在 Bash 指令碼中執行 GDB

本教程演示瞭如何在 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 avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub