Bash 스크립트에서 GDB 실행

Fumbani Banda 2023년10월12일
  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가 열리지만 바이너리 파일은 실행되지 않습니다. gdb에 있는 바이너리 파일을 실행하려면 run을 입력해야 합니다.

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

출력에서 gdbrun을 입력하지 않고도 바이너리 파일이 자동으로 실행되었음을 알 수 있습니다.

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