버퍼오버플로우-왕기초편 3.c언어에서버퍼사용하기 버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도

Similar documents
Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

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

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

OCW_C언어 기초

Microsoft PowerPoint - chap03-변수와데이터형.pptx

PowerPoint 프레젠테이션

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

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

Microsoft PowerPoint - chap04-연산자.pptx

PowerPoint Presentation

OCW_C언어 기초

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

PowerPoint 프레젠테이션

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - chap06-1Array.ppt

untitled

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - [2009] 02.pptx

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap06-5 [호환 모드]

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

11장 포인터

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

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

강의 개요

Microsoft PowerPoint - 2장 변수와 자료형 pptx

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

Microsoft PowerPoint - Chapter_04.pptx

WS12. Security

JAVA PROGRAMMING 실습 02. 표준 입출력

API 매뉴얼

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

OCW_C언어 기초

설계란 무엇인가?

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

Microsoft PowerPoint - chap10-함수의활용.pptx

중간고사

PowerPoint 프레젠테이션

Microsoft PowerPoint - 7장 배열 pptx

PowerPoint 프레젠테이션

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

C 프로그래밊 개요

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

2 장수의체계 1. 10진수 2. 2진수 3. 8진수와 16진수 4. 진법변환 5. 2진정수연산과보수 6. 2진부동소수점수의표현 한국기술교육대학교전기전자통신공학부전자전공 1

Microsoft PowerPoint - c2.ppt

본 강의에 들어가기 전

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - C++ 5 .pptx

03 상수, 변수, 자료형

PowerPoint Presentation

Microsoft PowerPoint - chap11-포인터의활용.pptx

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

BMP 파일 처리

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

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

PowerPoint 프레젠테이션

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

Windows Server 2012

C# Programming Guide - Types

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Chapter_06

기초컴퓨터프로그래밍

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

Microsoft PowerPoint - 강의자료8_Chap9 [호환 모드]

4.0 개요 p.116 수식 (expression) 연산자 (operator) 와피연산자 (operand) 로구성 수식은평가 (evaluate) 되어최종적으로 1 개의결과값이됨 피연산자 : 상수, 변수, 또다른수식 sum - 10 (a+b) / 2 연산자 2

ABC 3장

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가


PowerPoint Template

untitled

<30352D30312D3120BFB5B9AEB0E8BEE0C0C720C0CCC7D82E687770>

歯mp3사용설명서

PowerPoint 프레젠테이션

C언어 및 실습 C Language and Practice

윈도우즈프로그래밍(1)

실험 5

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

ADP-2480

윤성우의 열혈 TCP/IP 소켓 프로그래밊

슬라이드 1

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

Data Structure

Computer Architecture

The Pocket Guide to TCP/IP Sockets: C Version

C 프로그램의 기본

Transcription:

버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도존재할수있습니다. 이번시간엔프로그램에서버퍼를사용하는법, 그중에서도 C 언어에서버퍼를사용하는방법에대해배워보겠습니다. C 언어에서버퍼를사용하는가장쉬운방법은바로변수를선언하는것인데, C 언어에아직익숙하지않은분들을위해먼저변수를선언하여버퍼를할당받는방법에대해배워보겠습니다. 우선프로그래머는얼마나큰크기의변수를할당받을지결정을내려야합니다. 이크기의기본단위는바이트 (Byte) 입니다. C 언어는다양한크기에대한변수형 (Type) 을기본으로제공하고있는데, 그중자주사용되는것들만요약하면다음과같습니다. 26

변수형 char short int int long int 크기 1바이트 2바이트 4바이트 4바이트 단, int 형변수의크기는컴파일러의종류및 CPU 레지스터의크기에따라달라질수있기때문에, 본서적에선 32bit 컴파일러 &CPU 를기준으로설명하겠습니다. 이제각변수형이얼마나큰수를기억할수있는지계산해보겠습니다. char 형변수는 1 바이트이고, 이는 8 비트와같습니다. 그럼계산기프로그램을실행시킨후 Bin 버튼을눌러 2 진수모드로바꾼후에 8 비트, 즉 8 개의 0 과 1 로표현할수있는최대값인 11111111 을입력해봅시다. (Windows 7 용계산기를기준의예제입니다. XP 에선계산기의설정을공학용으로바꾸어사용하시면됩니다.) 그리고 Dec 버튼을눌러이값을 10 진수로변환하면, 27

버퍼 오버플로우-왕기초편 3.c언어에서 버퍼 사용하기 이처럼 255가 됩니다. 하지만 실제 char형 변수가 사용할 수 있는 최대 값은 11111111(8비트)이 아니라 1111111(7비트)입니다. 왜냐 하면 맨 앞의 첫 비트는 현재 값이 양수인지 음수인지 를 나타내는 부호 비트로 쓰이기 때문입니다. 이에 맞게 다시 계산을 해보겠습니다. 28

이처럼실제로는 127 이 char 형변수로표현할수있는최대값입니다. 그럼이번엔반대로 char 형변수로표현할수있는최소값은몇일까요? 앞서얘기한첫번째비트인부호비트는 0 일때 양수 1 일때 음수 임을의미합니다. 따라서최소값을구하기위해선음수가양수보다작은수이기때문에부호비트가무조건 1 이어야합니다. 그리고나머지 7 비트로표현할수있는최소수는 0000000 입니다. 이에맞게계산을해보겠습니다. (char 형에적합하게부호비트를적용시키기위해 Byte 에체크를해줍니다.) 29

이처럼 char 형으로표현할수있는가장작은수는 -128 임을알았습니다. 이런식으로각변수형별로표현할수있는최소 / 최대값을정리하면다음과같습니다. 변수형 크기 최소 ~ 최대값 char 1바이트 -128부터 127 short int 2바이트 -32768부터 32767 int 4바이트 -2147483648부터 2147483647 long int 4바이트 -2147483648부터 2147483647 그런데경우에따라선 음수 가아예필요없을때도있습니다. 예를들어서울에서부산, 혹은지구에서화성까지의거리를출력하는프로그램이라면음수값은필요없습니다. 음수의거리란있을수없기때문입니다. 그래서 C 언어는무조건양수만사용할수있는변수형역시제공합니다. 그럼첫번째 1 비트를다시사용할수있게되어 char 형의최대크기는 11111111(8 자리 ) 가됩니다. 이처럼부호없는변수는변수형앞에 unsigned( 부호없는 ) 를붙여주면됩니다. unsigned char, unsigned int 와같은식입니다. 그럼변수의크기는그대로이지만, 표현할수있는값의범위가달라지게됩니다. 변수형 크기 최소 ~ 최대값 unsigned char 1바이트 0부터 255 unsigned short int 2바이트 0부터 65535 unsigned int 4바이트 0부터 4294967295 unsigned long int 4바이트 0부터 4294967295 이렇게해서변수의크기및표현범위에대해알아보았습니다. 30

이제 C 언어를이용하여변수를할당받고사용하는연습을해봅시다. 우선가장기본적인 1 바이트를할당받아보겠습니다. char c; 이 char c 라는구문은 1바이트크기의변수를메모리 (RAM) 에할당받아라 는명령을의미합니다. 이제여러분은 1바이트크기내의값들을이변수에저장해서사용할수있습니다. 다음과같이말입니다../03/ex1.c char c; c = 20; printf( 버퍼에뭐가들었을까 ~? : %d\n, c); 소스를컴파일하여실행해보겠습니다. $ cd 03 $ gcc -o ex1 ex1.c $./ex1 버퍼에뭐가들었을까 ~? : 20 $ 이처럼간단하게변수를할당받고사용하는연습을해보았습니다. 그런데앞서배웠던변수형들중에가장용량이큰건 4 바이트였습니다. 그럼만약그이상크기의데이터를변수에저장하려면어떻게해야할까요? 31

예를들어 Hackerschool 이라는문자열을변수에저장하기위해선문자열끝의 NULL 문자까지합하여총 13 바이트가필요합니다. 4 바이트짜리변수를사용한다고해도 9 바이트가부족합니다. 이를해결하기위한쉬운방법중하나는 1바이트크기의 char 형변수를 13개선언하고각각에한문자씩을저장하는것입니다../03/ex2.c char c1 = H ; char c2 = a ; char c3 = c ; char c4 = k ; char c5 = e ; char c6 = r ; char c7 = s ; char c8 = c ; char c9 = h ; char c10 = o ; char c11 = o ; char c12 = l ; char c13 = \0 ; 하지만누가봐도이방법은번거롭고어설퍼보입니다. 그래서 C 언어는 배열변수 라는것을제공합니다. 이는여러개의변수를쉽게선언하고사용할수있게도와줍니다../03/ex3.c char c[13] = H, a, c, k, e, r, s, c, h, o, o, l, \0 ; 32

이렇게하면 c[0] 에서부터 c[12] 까지총 13 개의 char 형변수가선언되고, 이변수각각에지정된문자가저장됩니다. 여기서문자열을더쉽게사용하려면다음과같이해도됩니다../03/ex4.c char c[13] = Hackerschool ; 그리고조금더쉽게사용하는방법도있습니다. 만약 13이라는배열크기를지정해주지않으면, C언어는필요한배열크기를자동으로계산해줍니다../03/ex5.c char c[] = Hackerschool ; // char c[13] 과동일 33

이제이변수를버퍼로사용하려면어떻게하면될까요? 방법은간단합니다. 어디선가로부터 ( 예를들면키보드 ) 입력받은데이터를이변수에저장하고, 출력하거나다른곳으로보내는용도로사용하면이변수는곧버퍼가되는것입니다. 이처럼버퍼는개념적인용어이기때문에 데이터를한곳에서다른곳으로이동시키기위한임시공간 이라는의미에부합된다면그무엇이든지버퍼가될수있습니다. 지난강좌에사용되었던예제를다시보겠습니다../01/test.c main() char name[20]; printf( 당신의이름을입력하세요. : ); gets(name); printf( 아, 당신의이름은 %s이군요.\n, name); 여기서 char name[20] 부분이바로버퍼로사용될변수를선언하는부분입니다. 그리고변수형이 char 이기때문에기본크기는 1 바이트이고, 이것이총 20 개의배열변수로선언되었기때문에총크기는 1 x 20 = 20 바이트입니다. 즉, 버퍼의크기는 20 바이트가됩니다. 그렇기때문에 20 바이트이상의값이이버퍼로전달되면문제가생기는것입니다. 34