gdb 실행
gdb ./[프로그램이름]
함수의 디스어셈블리 결과 출력
disas [함수이름]
disassemble [함수이름]
프로그램 열기
r [프로그램이름]
프로그램 실행 (브레이크 포인트 / 중단점 까지)
c
브레이크 포인트 걸기
b *[해당주소]
브레이크 포인트 정보 출력
info breakpoints
해당 번호 브레이크 포인트 삭제
delete [브레이크 포인트 번호, 지정안하면 다 삭제 됨]
정보 출력 / 지정된 메모리 영역 출력 타입 및 갯수(바이트) 지정
p $레지스터이름
x/2wx $레지스터 이름 w->word(16진수)타입 2개 출력
x/s $레지스터 이름 s->string(문자열)타입
gdb ./분석하려는프로그램 : gdb시작
disassemble 함수이름 : 함수 어셈블리어 확인
b *주소 / b $레지스터 / b 함수이름 : break point
got : 함수 got 정보 출력
info func : 함수 정보 출력 (plt, got까지 전부 출력해줌)
info variables : 전역변수 정보(이름,주소) 출력
info variables [regax] : [regax] 에 해당하는 전역변수 정보(이름,주소) 출력 (검색)
info break : break point 정보출력
delete 브포넘버 : 해당 브레이크 포인트 삭제
vmmap / vmmap 주소 : 메모리 정보보기
heap : heap 영역에 할당/해제된 메모리(chunk)정보보기
awatch *주소 / awatch 변수 : 해당주소/변수에 값이 쓰여지거나 읽히면 브레이크 (하드웨어 브레이크)
출력형식
x/10 main : main 함수 시작부터 40바이트를 출력 => x/10x와 동일
x/10x main : main 함수 시작부터 40바이트를 16진수로 출력
x/10a main : 가장 가까운 심볼의 오프셋을 출력
x/10s main : 문자열로 출력
x/10i main : 어셈블리 형식으로 출력
1. 특정 함수의 어셈블리어 코드 보기
disassemble [함수이름]
disassemble main
2. 브레이크 포인트 걸기
브레이크 포인트란? 해당 코드의 주소에서 실행을 하지않고 멈출 수 있게 해주는 기능
이로써 레지스터의 값들과 메모리(스택, 힙) 영역에 있는 값들을 디버깅함
b * [주소]
b* 0x400c0
3. 프로그램 재시작하기(실행하기)
r
4. continue - break point 지점까지 실행하기
c
5. 메모리 값 보기
x/40x 0x400c0 (16진수로 보기)
x/40i 0x400c0 (instruction으로 보기)
x/40s 0x400c0 (문자열로 보기)
6. 메모리 영역 확인하기
vmmap
7. arg 넣어주면서 gdb 실행
gdb --args executablename arg1 arg2 arg3
https://mk28.tistory.com/134
https://jayy-h.tistory.com/11
'팁(트러블슈팅)' 카테고리의 다른 글
32bit vs 64 bit 운영체제 확인하는 방법 (Windows, Linux) (0) | 2021.09.17 |
---|---|
윈도우 컴퓨터 이름 변경하는 법 (0) | 2021.09.17 |
윈도우 계정 조회 및 추가 (SYSTEM, Administrator, 일반 계정) (0) | 2021.09.17 |
ipTIME 공지/광고기능 (ipTIME A604MU 공유기 설정창 열기) (0) | 2021.09.01 |
리눅스 환경 변수 설정/입력/바꾸기 (Qt creator 바로 실행하기) (0) | 2021.08.01 |