1. test.c 프로그램 코딩
> 소스코드 |
#include <stdio.h> int main (int argc, char* argv[] ) { char buffer[512]; strcpy ( buffer, argv[1] ); printf ( "%s\n", buffer ); return 0; } |
#! 실행파일 컴파일과 어셈블리코드 생성
$gcc -o test test.c => test라는 실행파일 생성
$gcc -S test.c => test.s 라는 어셈블리코드 생성
$gdb -q [실행파일]
(gdb)disassemble (현재 실행하고 있는 함수 어셈)
(gdb)disassemble main (main함수 어셈코드보기)
(gdb)disas main (동일한 명령어)
#! 설정
%, $표시가 붙은것들은 AT&T 방식
인텔방식으로 바꾸려면
(gdb)set disassembly-flavor intel (disas까지 치고 tab키를 눌러보셔요!)
(gdb)disassemble : 현재 실행하고 있는 함수 어셈
(gdb)disassemble main : main함수 어셈코드보기
#! 실행
run: 프로그램 시작. run뒤에 추가로 argv와 같이 인자를 적어줄 수도 있다.
(gdb)run (만약 인자를 던져 줘야한다면 (gdb)r [인자])
(gdb)r (동일한 명령어)
continue: 다음 breakpoint까지 계속 실행
여러개의 breakpoint를 설정하고 각 breakpoint에서 디버깅시 next, step등을 이용하여
디버깅하고, 각 breakpoint간의 이동을 continue를 사용하면 유용
(gdb)continue (다음 브레이크문까지 진행)
(gdb)c (동일한 명령어)
next: 다음 라인 실행(subrutine calls의 처리과정 보여주지 않음)
(gdb)n (다음라인 진행)
step: next와 동일하나 subrutine calls을 만났을때 해당 subrutine으로 분기하여
subrutine처리과정을 보여줌
(gdb)stepi (n과 같은 기능인데 다른점은 함수가 있으면 내부로 들어간다는 점입니다)
(gdb)s (동일한 명령어)
#! 브레이크포인트
(gdb)break *main (브레이크 포인트 설정, 브레이크 포인트는 함수명, 주소값에 대해 설정 가능)
(gdb)b * main (동일한 명령어)
(gdb)break *0x00000000 : 0x00000000 에 bp걸기
(gdb) info breakpoint (브레이크포인트 목록)
(gdb) delete <breakpoint num> : 해당 breakpoint 삭제
(gdb) clear : breakpoint 모두 삭제
#! value 확인
(gdb)info break
(gdb) set $eax = 0x4141 : eax 레지스터 값을 0x4141로 할당
(gdb)info register (현재 레지스터 정보를 보여줌)
(gdb)info reg (동일한 명령어)
(gdb)i r (동일한 명령어)
(gdb) x/[옵션] $[레지스터] 또는 주소
(gdb) x/x 0x00000000 (0x0000000 메모리보기 (hex))
(gdb) x/x $eip : 다음에 실행할 명령어 주소값
(gdb) x/x $eax : eax 명령어 보기
(gdb) x/u 0x08080808 (10진수로 출력)
(gdb) x/i 0x08080808 (2 진수로 출력)
(gdb) x/s 0x08080808 (문자열 출력)
(gcb) x/c $esp+20 (문자 출력)
[갯수]b : 바이트 단위로 갯수 만큼 출력
(gdb)x/3wu $ebp-12 : ebp-12만큼 떨어진 지점부터 4바이트 크기만큼 3개(높은주소쪽으로) 10진수로 출력
[갯수]h : 2바이트 단위로 갯수 만큼 출력
[갯수]w : 4바이트 단위로 갯수 만큼 출력
(b,h,w 중에 마지막으로 선택한 옵션이 기본으로 바뀐다. 처음에는 w가 기본이다.)
(출력은 그 지점에서부터 높은주소쪽으로 갯수만큼 한다.)
#! 변경/설정
print: 지정한 변수값 출력
display: 지정한 변수값을 지속적으로 출력
undisplay: display로 지정한 변수값을 더이상 출력하고 싶지 않을때
set args: set args argument1, argument1,... 처럼 실행인자를 지정하고, show args로 지정된 인자를 볼 수 있다.
(gdb) set args air
(gdb) show args
Argument list to give program being debugged when it is started is "air".
#! 종료
(gdb)k (디버깅모드 종료)
(gdb)quit (디버깅 종료)
(gdb)q (동일한 명령어)
<출처 :http://blog.naver.com/PostView.nhn?blogId=shw20319&logNo=20129448145&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView>
#! 참고 : http://blog.naver.com/PostList.nhn?blogId=shw20319&from=postList&categoryNo=80
http://coffeenix.net/data_repository/html/gdb.html
'독서' 카테고리의 다른 글
[yaml] YAML Ain't Markup Language (0) | 2021.08.20 |
---|---|
[Cloud-Native] (0) | 2021.08.20 |
[스크랩] 기술사 총인원 확대 (0) | 2016.10.22 |
[스크랩] 기술사 배출 확대 (0) | 2016.10.22 |
천안버스터미널 근처 학화호도과자 (0) | 2016.09.30 |