min's devlog
자주 쓰이는 명령어 본문
1. gdb file
file을 gdb로 로드한다.
1-1. gdb -q file
-q 혹은 --quiet 옵션을 주면 gdb를 시작할 때 버전 정보 등을 출력하지 않도록 한다.
1-2. gdb --args file arg1 arg2
gdb 실행 시 --args 옵션을 주면 file과 함께 인자를 전달할 수 있다. (위 예에서는 arg1, arg2 전달)
2. run(r)
gdb로 로드한 프로그램을 실행한다.
run arg1 arg2 형태로 프로그램을 시작할 때 인자값을 넘길 수 있다. 혹은 처음에 gdb --args file arg1 arg2 로도 인자값을 전달할 수 있다.
3. disas(disassemble) function
function에 대한 disassemble을 수행 한다.
4. break *address
address 위치에 브레이크 포인트를 설정한다. 직접 주소값을 명시하거나 *main+3 이런식으로 사용할 수 있다.
5. x
주어진 주소 내의 메모리 값이 무엇인지를 확인하는 용도로 사용한다.(addr이나 /nfu addr 등의 옵션을 줄 수 있다)
- n (repeat count)
몇 개의 메모리 유닛을 보여줄지 지정한다. n은 decimal integer로 지정되며 디폴트 값은 1이다
- f (display format)
읽은 메모리 값을 어떻게 해석할 것인지 지정한다. 디폴트 값은 x(hexadecimal)이고, 이 외에도 o(octal), d(decimal), s(string), i(machine instruction) 등이 있다.
- u(unit size)
읽을 메모리 유닛의 사이즈를 지정한다. 지정할 수 있는 옵션은 b(byte), h(two bytes), w(four bytes), g(eightbytes)가 있다.
ex) x/x $ebp+0xffffffd8
주소 위치에 expression이 들어갈 수도 있다.
명령 수행의 결과에서 왼쪽 0xbfffdca0은 ebp값에 0xffffffd8을 더한 값이고, 오른쪽 0x42130ef8은 해당 주소에 저장되어있었던 값을 16진수로 표현한 결과이다.
ex) x/s
0x8048680 주소에 저장된 값을 string format으로 읽는다.
5-1. print variable
variable에 저장된 값을 출력 한다.
ex) print main
6. continue(c)
다음 브레이크포인트 전까지 코드를 실행한다.
7. ni(nexti) [n]
라인 하나를 실행 하되 함수 호출문은 건너 뛴다. n을 명시 하면 n개 만큼 코드를 실행한다.
8. si(stepi) [n]
라인 하나를 실행 하되 함수 호출 시 해당 함수로 들어 간다. n을 명시 하면 n개 만큼 코드를 실행 한다.
9. delete [n]
설정했던 모든 브레이크 포인트들을 삭제한다. n을 명시해서 특정 브레이크 포인트만 삭제할 수도 있다.
10. info registers [register name]
레지스터들의 값들을 출력한다. register name을 지정해서 특정 레지스터에 대한 값만 확인할 수도 있다.