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
가 열리지만 바이너리 파일은 실행되지 않습니다. 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
출력에서 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