버퍼오버플로우-왕기초편 11. 리틀엔디안과빅엔디안 dumpcode() 함수에대해알게된구타는대견하게도실습을하기로마음먹습니다. 구타는먼저 4 바이트짜리정수형변수를하나만든후, 그것을 memory dump 를해보기로했습니다. #include dumpcode.h int main

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

Microsoft PowerPoint - chap06-2pointer.ppt

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

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

OCW_C언어 기초

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

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

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

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

Microsoft PowerPoint - chap04-연산자.pptx

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

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

PowerPoint Presentation

WS12. Security

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

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

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

Microsoft Word - FunctionCall

Microsoft PowerPoint - chap05-제어문.pptx

OCW_C언어 기초

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

chap 5: Trees

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

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

PowerPoint Presentation

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

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

중간고사

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

설계란 무엇인가?

Data Structure

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

텀블러514

Microsoft PowerPoint - chap06-1Array.ppt

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - 제11장 포인터(강의)

PowerPoint Template

untitled

untitled

<30352D30312D3120BFB5B9AEB0E8BEE0C0C720C0CCC7D82E687770>

歯mp3사용설명서

Microsoft PowerPoint - gnu-w10-c-chap11


제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

BMP 파일 처리

PowerPoint 프레젠테이션

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - 제11장 포인터

PowerPoint Presentation

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

슬라이드 1

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

hlogin2

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - Chapter_04.pptx

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Computer Security Chapter 08. Format String 김동진 1 Secure Software Lab.

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - chap-06.pptx

OCW_C언어 기초

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

슬라이드 1

PowerPoint 프레젠테이션

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

¼øâÁö¿ª°úÇÐÀÚ¿ø

Microsoft PowerPoint - chap-05.pptx

Microsoft PowerPoint - Java7.pptx

11장 포인터

Microsoft PowerPoint - [2009] 02.pptx

C 프로그램의 기본

PowerPoint 프레젠테이션

untitled

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

쉽게 풀어쓴 C 프로그래밍

C++ Programming

설계란 무엇인가?

C언어 및 실습 C Language and Practice

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

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

강의 개요

Lab 3. 실습문제 (Single linked list)_해답.hwp

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

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

Microsoft PowerPoint - chap-11.pptx

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

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

PowerPoint 프레젠테이션

<3235B0AD20BCF6BFADC0C720B1D8C7D120C2FC20B0C5C1FE20322E687770>

ISP and CodeVisionAVR C Compiler.hwp

8장. 포인터

Transcription:

dumpcode() 함수에대해알게된구타는대견하게도실습을하기로마음먹습니다. 구타는먼저 4 바이트짜리정수형변수를하나만든후, 그것을 memory dump 를해보기로했습니다. #include dumpcode.h int main() { int test = 10; dumpcode( 98

소스코드를완성한구타는컴파일을시도합니다../11/ex1.c #include dumpcode.h int main() { int test = 10; } dumpcode(&test, 4); [ 컴파일결과 ] $ cd 11 $ gcc -o ex1 ex1.c ex1.c: In function `main : ex1.c:7: warning: passing arg 1 of `dumpcode from incompatible pointer type $ 99

./11/ex2.c #include dumpcode.h int main() { int test = 10; } dumpcode((unsigned char *)&test, 4); [ 컴파일결과 ] $ gcc -o ex2 ex2.c $ 100

dumpcode() 는잘작동했지만, 구타는무언가이상한점을발견합니다. $./ex2 0xbffffb44 0a 00 00 00... $ 101

이처럼메모리에저장된값을 dump 해보면, 그순서가반대로나타나는재미있는특징을볼수있습니다. 이를컴퓨터용어로 Little Endian 이라고부르는데요, 이중 Endian 이라는단어는영어사전을찾아봐도나오질않습니다. 그이유는이 Little Endian 이라는말이 걸리버여행기 라는다들잘알고계실소설에서처음만들어졌기때문인데요, 그이야기가재미있기때문에소개를해드리려고합니다. 걸리버여행기 란, 항해술과의술을공부한주인공이선박의선원들을돌보는외과의사로취업한후, 항해도중겪게되는황당한사건들에대한이야기를담고있는모험소설입니다. 이소설은 1726 년조나단스위프트란영국작가에의해쓰여졌는데요, 가상의이야기에빗대어인간의추악한모습들을비유적으로풍자하며오늘날까지도세계적인명작에꼽히고있습니다. 소설의주인공은항해중사고로인해 소인국나라, 거인국나라, 하늘의섬 등에표류하게되는데요, Little Endian, 그리고그에대립되는 Big Endian 이라는용어는이들중 소인국나라 편에등장합니다. 거대한폭풍우에휩쓸려난파된선박에서탈출한주인공은, 끝내외딴섬에도착해정신을잃게됩니다. 그리고다음날정신을차렸을땐이미온몸이밧줄로꽁꽁묶인상태였습니다. 102

주인공은밧줄에서벗어나려고발버둥을쳐보지만, 수많은소인국군인들의화살공격에기가죽어순순히복종을하게됩니다. 이후주인공은발에쇠사슬이묶인채노예와같은생활을하게되는데요, 친절함과너그러움으로점차소인국사람들로부터신뢰를얻어자유의몸이된후, 이웃국가와의전쟁을승리로이끌기도하며, 급기야두국가를화해모드로이끌고, 결국엔그섬을빠져나와고향으로돌아간다는훈훈한이야기를담고있습니다. Little Endian 과 Big Endian 이야기는위에언급된두국가인릴리퍼트와블레프수크가도대체무엇때문에사이가안좋아졌는지에대해듣게되는부분에서등장하는데요, 그사연은이렇습니다. 약 36 개월전, 릴리퍼트제국은지금과마찬가지로식사때달걀을즐겨먹었습니다. 그리고이들은달걀을먹을때, 끝부분이넓직한부분을위로향하게한다음껍질을깨먹었다고합니다. 그런데어느날역사적인사건이발생하는데, 바로황제의세자가이넓직한부분부터달걀을깨어먹다가그만껍질에손을베어버린것입니다. 화가난황제는앞으로달걀을먹을때넓직한부분이아닌, 뾰족한부분부터깨어먹어라, 그렇지않는자는사형에처한다라는새로운법률을공포하게됩니다. 103

버퍼 오버플로우-왕기초편 11.리틀엔디안과 빅엔디안 104

버퍼 오버플로우-왕기초편 11.리틀엔디안과 빅엔디안 105

하지만이에반대하는무리가생겨나기시작했고, 여러번의반란끝에국가는두개의당파로갈라지게됩니다. 그리고뾰족한끝부분, 즉작은부분에서부터깨어먹는것을주장하는무리를 Little Endian, 반대로넓직한끝부분에서부터깨어먹어야한다고주장하는이들은 Big Endian 이라고부르게된것입니다. Big Endian 당파는이웃국가인블레프수크의도움을받거나망명을가면서급기야두국가간의전쟁으로발전합니다. 이처럼소인국국가들은작은몸짓답게참으로사소한것을가지고싸움을하고있는데요, 이는마찬가지로사소한것들로전쟁을하고살인을하는우리인간들을풍자한것이라고합니다. ( 당시영국과프랑스의종교전쟁을빗댄것이라는해석이있습니다.) 이제다시컴퓨터분야로넘어옵시다. 이 Little Endian 과 Big Endian 이란용어는 Danny Cohen 이라는사람의논문중 Memory Order 라는섹션에서처음인용됩니다. 이논문에선 CPU 가메모리에데이터를저장할때어느순서로저장하는가에대해설명하는데, 이때왼쪽에서오른쪽순서로저장하는것을 Big Endian, 그리고오른쪽에서왼쪽으로저장하는것을 Little Endian 이라고비유한것이시초가되어지금까지도사용되어지고있는것입니다. 이처럼메모리에값을저장하는두방법엔서로장단점이있는데요, 먼저높은쪽의값을먼저저장하는 Big Endian 을봅시다. 106

Big Endian 은두개의숫자를비교할때더욱빠르게연산할수있습니다. 만약첫바이트에서한쪽이더크다면나머지바이트들은더이상비교를할필요가없기때문입니다. 그리고 Big Endian 은우리가사용하는방식에친근하다는장점도있습니다. 다음으로 Little Endian 입니다. Little Endian 은이수가짝수인지홀수인지를검사할때빠르다는장점이있습니다. 첫바이트하나만보면짝수인지홀수인지를금방알수있기때문입니다. 그리고연산과정에서자릿수증가가생겼을때 Big Endian 방식보다더빠르다고합니다. 그리고또하나, 이 Little Endian 방식은포인터 (pointer) 의값참조시유리합니다. 예를들어, char *x 라는포인터변수가하나있고, 이 x 가가리키는메모리주소의값이 0x12345678 라고가정해봅시다. 이때, y = *x 와같이포인터변수가가리키는값을참조하고자할경우, 포인터의시작주소에서 1 바이트 (char 형 ) 만가져오면자연스럽게가장낮은바이트인 0x78 가참조되게됩니다. 왜냐면 Little Endian 의특성에따라메모리에저장된데이터값은 0x78 0x56 0x34 0x12 가되기때문입니다. 이와같은바이트저장순서를 Byte Ordering 이라고부르는데요, 만약서로다른 Byte Ordering 을사용하는두 PC 가네트워크통신을하면서데이터를주고받는다면이 Byte Ordering 을통일화시켜주는작업이필요할것입니다. 107

현재 TCP/IP 표준은 Big Endian 이며, 그래서대부분의프로그래밍언어가 Byte Ordering 을 Big Endian 타입으로바꿔주는 htons() 와 htonl() 함수를제공하고있기도합니다. CPU 개발업체에따라 Big Endian 과 Little Endian 이구분되는데요, 다음과같습니다. Little Endian 과 Bin Endian 사이엔서로만의장점이있기도하고, 기술적인관점을떠나생각해봐도어느것이더좋다고선뜻말할수는없습니다. 예를들어한글이나영어는왼쪽에서오른쪽으로글자를쓰지만, 히브리어, 아랍어, 이집트상형문자등은오른쪽에서왼쪽으로글자를씁니다. 이를가지고누가옳다라고말할수없는것과같기때문입니다. 여튼메모리분석을정확하게하기위해선, 이 Big Endian 과 Little Endian 을잘알고있어야합니다. 108