vi 사용법

Similar documents
PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Sena Technologies, Inc. HelloDevice Super 1.1.0

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이

Microsoft PowerPoint - System Programming Lab Week1.ppt [호환 모드]

강의10

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3


슬라이드 1

PowerPoint 프레젠테이션

6주차.key

Microsoft PowerPoint - chap-02.pptx

1장. 유닉스 시스템 프로그래밍 개요

Microsoft PowerPoint - chap06-2pointer.ppt

hlogin2

hlogin7

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

개발도구

PowerPoint 프레젠테이션

Microsoft PowerPoint oshw1&2.ppt [호환 모드]

PRO1_09E [읽기 전용]

untitled

Microsoft PowerPoint oshw1.ppt [호환 모드]

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap-02.pptx

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

MPLAB C18 C

Chapter 4. LISTS

휠세미나3 ver0.4

02 C h a p t e r Java

본 강의에 들어가기 전

untitled

슬라이드 1

슬라이드 1

Microsoft PowerPoint oshw1.ppt [호환 모드]

Microsoft PowerPoint - [2009] 02.pptx

CD-RW_Advanced.PDF

PowerPoint Template

PowerPoint Presentation

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

슬라이드 1

PowerPoint 프레젠테이션

Chap 6: Graphs

ABC 11장

설계란 무엇인가?

<4D F736F F F696E74202D204C BAB8C3E6BCB3B8ED202D20C7C1B7CEB1D7B7A1B9D6C0DBBCBAB0FAC1A42C C F>

K&R2 Reference Manual 번역본

Microsoft PowerPoint APUE(Intro).ppt

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다. / /bin/ /home/ /home/taesoo/ /home/taesoo/downloads /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자 (t

PowerPoint 프레젠테이션

chap 5: Trees

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

C++ Programming

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap01-C언어개요.pptx

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다고가정하자. / /bin/ /home/ /home/taesoo/ /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자가터미널에서다음 ls 명령입력시화면출력

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PRO1_02E [읽기 전용]

Microsoft PowerPoint - ch07 - 포인터 pm0415

Chap 6: Graphs

쉽게 풀어쓴 C 프로그래밍

Solaris Express Developer Edition

텀블러514

01Àå

Chapter 4. LISTS

Microsoft PowerPoint - 06_(Linux)_(Fundamental)_C_Programming

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

/chroot/lib/ /chroot/etc/

B _00_Ko_p1-p51.indd

2014밝고고운동요부르기-수정3

2005프로그램표지

KEY 디바이스 드라이버

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Remote UI Guide

17장 클래스와 메소드

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

HelloDevice Super Series

Microsoft PowerPoint - additional01.ppt [호환 모드]

untitled

설계란 무엇인가?

PowerPoint Presentation

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

컴파일러

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Deok9_Exploit Technique

C 프로그램의 기본

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

The Pocket Guide to TCP/IP Sockets: C Version

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Transcription:

유닉스프로그래밍및실습 gdb 사용법

fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars(); fprintf(stderr, $$$ %d %ld %lf, count, large_no, read_no); fprintf(stderr, ### %d %ld %lf, count, large_no, read_no); calc_f1(&count, &large_no); fprintf(stderr, @@@ %d %ld %lf, count, large_no, read_no); }

gdb(gnu debugger) 컴파일과정에서반드시 g 옵션사용 $ gcc g test.c o test gdb 실행 $ gdb test gdb 명령으로디버깅 주요지점에 break point 설정 실행시키면정지점에서중지 중단된상태에서주요변수의값확인 프로그램실행계속 한단계씩진행 함수수행후결과값표시 스택추적

gdb 주요명령 명령 약어 설명 attach at 실행중인프로세스에디버거붙이기 backtrace bt 스택추적 (stack trace) 출력 break b 정지점 (break point) 설정 clear 정지점해제 continue c 프로그램실행계속 delete 번호로정지점설정해제 ( 번호생략시전체해제 ) detach 현재실행중인프로세스에서디버거떼기 display 실행을중단할때마다표현값출력 finish 함수끝까지실행하고함수반환값표시 help 도움말출력 jump 특정주소로분기하여실행계속 list 원시코드다음 10줄출력 next n 프로그램한단계수행. 함수인경우함수내부로들어가지않고다음행으로넘어감 print p 표현값출력 run r 현재프로그램을처음부터실행 set 변수값변경 step s 프로그램을다음소스코드가나올때까지실행. 함수일경우함수내부로진입 where w 스택추적출력

gdb 기본이용 (1) 실행 [kgu@lily sample2]$ gdb a.out GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /home/kgu/2012u2/ch05/sample2/a.out...done. list 명령실행 list 23 line_sum += data; 24 } 25 26 return line_sum; 27 } 28 29 /******************************************************************************/ 30 int main(void) 31 { 32 pid_t pid = 1;

gdb 기본이용 (2) list 명령실행 list 33 int i; 34 int read_lines; 35 int fd1; 36 int fd2; 37 int fd3; 38 char buffer[buffer_size]; 39 char result[result_size]; 40 char file_name[filename_size]; 41 42 int line_sum; break 명령으로 calc_line_sum 루틴에정지점설정 break calc_line_sum Breakpoint 1 at 0x4009e0: file mp_calc.c, line 18. break 명령으로 60 번째라인에정지점설정 break 60 Breakpoint 2 at 0x400ab7: file mp_calc.c, line 60.

gdb 기본이용 (3) run 명령실행 r Starting program: /home/kgu/2012u2/ch05/sample2/a.out Breakpoint 2, main () at mp_calc.c:60 60 pid = fork(); print 명령으로현재스택내부의변수값등확인 print pid $1 = 1 print read_lines $2 = 32767 print fd1 $3 = 7 print line_sum $4 = 51 break 명령으로 23 번째라인에정지점설정 break 23 Breakpoint 3 at 0x400a19: file mp_calc.c, line 23.

gdb 기본이용 (4) continue 명령으로계속진행 c Continuing. Detaching after fork from child process 8161. Breakpoint 2, main () at mp_calc.c:60 60 pid = fork(); delete 명령으로정지점 2 삭제 delete 2 continue 명령으로계속진행 c Continuing. Detaching after fork from child process 8384. Detaching after fork from child process 8385. Detaching after fork from child process 8386. Detaching after fork from child process 8387. Breakpoint 1, calc_line_sum ( line=0x7fffffffe320 "753 443 469 159 449 819 784 137 803 351\np\r@") at mp_calc.c:18 18 int line_sum = 0;

gdb 기본이용 (5) where 또는 backtrace 명령으로스택추적출력 where #0 calc_line_sum (line=0x7fffffffe320 "753 443 469 159 449 819 784 137 803 351\np\r@") at mp_calc.c:18 #1 0x0000000000400b43 in main () at mp_calc.c:74 backtrace #0 calc_line_sum (line=0x7fffffffe320 "753 443 469 159 449 819 784 137 803 351\np\r@") at mp_calc.c:18 #1 0x0000000000400b43 in main () at mp_calc.c:74 step 또는 next 명령으로다음단계진행 s 21 for (i = 0; i < 10; i++) { s 22 sscanf(&line[i*4], "%d", &data); s Breakpoint 3, calc_line_sum ( line=0x7fffffffe320 "753 443 469 159 449 819 784 137 803 351\np\r@") at mp_calc.c:23 23 line_sum += data; next 21 for (i = 0; i < 10; i++) {

gdb 기본이용 (6) display 명령으로멈출때마다출력할변수지정 display i 2: i = 0 c Continuing. Detaching after fork from child process 9108. Breakpoint 2, main () at mp_calc.c:60 60 pid = fork(); 2: i = 1 1: pid = 9108 quit 명령으로종료 quit A debugging session is active. Quit anyway? (y or n) y [kgu@lily sample2]$ Inferior 1 [process 9501] will be killed.

기본사용법 관심있는함수마지막에서확인하는방법 list 함수이름을수행하여함수마지막줄번호찾기 break 마지막줄번호 수행하여정지점설정 run 수행하면함수마지막줄에서중단 print로함수내부의변수와전역변수값확인 프로그램이죽은경우정확한위치찾기 run 실행하면오류발생한지점에서중단 where명령으로스택추적 list 명령으로프로그램소스확인 프로그램전체를한단계씩실행하면서확인 break main으로정지점설정 run 실행하면 main() 첫번째줄에서중지 step 명령으로한단계씩진행하면서변수확인 (print 또는 display 이용 )