목차 목차 1 장. Bugs : Where They Come From and how You Solve Them? 2 장. Getting Started Debugging 3 장. Debugging During Coding 4 장. How Do Debuggers Work?

Size: px
Start display at page:

Download "목차 목차 1 장. Bugs : Where They Come From and how You Solve Them? 2 장. Getting Started Debugging 3 장. Debugging During Coding 4 장. How Do Debuggers Work?"

Transcription

1 Debugging Applications By John Robbins Part II 최상호

2 목차 목차 1 장. Bugs : Where They Come From and how You Solve Them? 2 장. Getting Started Debugging 3 장. Debugging During Coding 4 장. How Do Debuggers Work? 5 장. Power Debugging with the Visual C++ Debugger 6 장. Power Debugging with x86 Assembly Language and the visual C++ Disassembly Window 7 장. Power Debugging with Visual Basic Debugger 8 장. Finding Source and Line Information with Just a Crash Address. 2

3 목차 목차 9 장. Crash Handlers 10 장. Debugging Windows2000 Services and DLLs That Load into Services. 11 장. Multi-Machine, Multi-process Tracing 12 장. Multi-Threaded Deadlocks 13 장. Automated Testing 14 장. Limited OutputDebugString Calls 15 장. The Debug C Run-Time Library 3

4 목차 목차 1 장. 버그 : 어디서발생하고어떻게해결할것인가? 2 장. 디버깅시작하기 3 장. 코딩과디버깅병행하기 4 장. 디버거의동작원리 5 장. Visual C++ 디버거를이용한강력한디버깅 6 장. 어셈블리어와 Visual C++ Disassembly 창을이용한강력한디버깅 7 장. Visual Basic 디버거를이용한효과적인디버깅 8 장. Crash 주소만으로소스위치찾아내기 4

5 목차 목차 9 장. Crash 핸들러 10 장. Windows 2000 서비스와서비스안에서동작하는 dll 디버깅하기. 11 장. Multi-Machine, Multi-process Tracing 12 장. 다중스레드의병목현상 13 장. 테스트자동화 14 장. OutputDebugString 제한하여사용하기 15 장. The Debug C Run-Time Library 5

6 6 장. 어셈블리어와 Visual C++ Disassembly 창을이용한강력한디버깅 목차 잘돌던프로그램이갑자기죽어버리면서어셈블리어가잔뜩표시된 Visual C++ 디버거가화면에나타나면속수무책이다. 어셈블리어를모르는데디버깅은어림도없다. 그렇다고계속손가락만빨고있어야하나? MSAM 을다루어보자. 필요한내용정도만어셈블리코드를 읽을수있고이해할수있으면된다. 생각보다어렵진않 다. 할수있다, 하면된다, 해보자! 6

7 6 장. 어셈블리어와 Visual C++ Disassembly 창을이용한강력한디버깅 목차 1. The Basics of the CPU 2. A Word About the Visual C++ Inline Assembler 3. Instructions You Need to Know 4. Calling Conventions 5. More Instructions You Need to Know 6. Common Assembly-Language Constructs 7. A complete Example 8. The Disassembly Window 9. Tips and Tricks 10. Summary 7

8 6 장. 어셈블리어와 Visual C++ Disassembly 창을이용한강력한디버깅 목차 1. CPU 기초지식 2. Visual C++ 인라인어셈블러 3. 중요명령어 (Instructions) 4. 호출규약 (Calling Conventions) 5. 더알아야할명령어들 8

9 6-1. CPU 기본지식 배경 Intel이 1978년에발표한 8086 CPU를근간으로지금까지계속어셈블리명령어를사용한다. MS-DOS와 16비트 MS Windows 시절에는세그먼트라고불리는 64KB의메모리블록에접근하는방법이매우까다로웠다. 다행히도 Windows 98이후부터는 CPU가모든번지에직접접근이가능해졌고이는어셈블리어를보다쉽게구현할수있다는것을의미한다. 이장의범위 오직 Intel 과 AMD 모두에공통적인어셈블리명령어만을다룬다. Intel 펜티엄의 MMX 기능들과부동소수점연산명령들은다루지않는다. 참고 Intel, IA-32 Intel Architecture S/W Developer s Manuals 9

10 6-1. CPU 기본지식 1. Registers 2. Instruction Format and Memory Addressing 10

11 6-1. CPU 기본지식 1. Registers X86 계열에서의레지스터 (1) 8개의범용레지스터 : EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP (2) 6개의세그먼트레지스터 : CS, DS, ES, SS, FS, GS (3) 1개의플래그레지스터 : EFLAGS (4) 기타특수레지스터 ( 디버그와 machine control을위한 ) General-Purpose Registers 11

12 6-1. CPU 기본지식 1. Registers ( 보충설명 ) 32bit registers eax : Accumulator ebx : Base register ecx : Count register edx : Double-precision register esi : Source index register edi : Destination index register ebp : Base pointer register esp : Stack pointer Non integer registers eip : instruction pointer flags : flags 12

13 6-1. CPU 기본지식 1. Registers ( 계속 ) 마우스오른버튼메뉴를이용해서부동소수점관련레지스터를화면에보이게할수있다. 레지스터창에는 Visual C++ 이 Intel과는독자적으로사용하는플래그값들이표시된다. 원래는플래그값이변경되면글자색도변경되는데제대로동작하지않음. 해결책 : 빈문서를열고서레지스터창의내용을복사한후현재의레지스터값들과비교. (-.-) 레지스터의값을직접변경할수있다! 등호연산자오른쪽의숫자의첫머리부분에마우스커서를놓고수정. EFLAGS 레지스터 Visual C++ Registers Window 13

14 6-1. CPU 기본지식 1. Registers ( 계속 ) Registers Window Flag Values 14

15 6-1. CPU 기본지식 2. Instruction Format and Memory Addressing 명령어 ( Single Instruction) 명령어 ( Two-Instruction) Source Destination, Source Source 오퍼랜드에는레지스터, 참조메모리, 값등이올수있다. Destination 오퍼랜드에는레지스터, 참조메모리가올수있다. 그러나, Source 와 Destination 오퍼랜드모두에참조메모리가올수는없다. 참조할메모리의크기를지정한다. byte ptr, word ptr, dword ptr 등의크기로지정할수있다. 기본값은 dword ptr 이다. 메모리참조는 [] 을이용한다. Ex1) [ Ah] - hex 값으로 인메모리번지의값을읽는다. Ex2) [EAX] EAX 가가리키는메모리번지의값을읽는다. Ex3) [EAX + 0Ch] EAX 가가리키는메모리번지에 0C 의옵셋을적용한후그위치의값을읽는다. 15

16 6-1. CPU 기본지식 2. Instruction Format and Memory Addressing ( 계속 ) 레지스터값이참조메모리를가리키는경우 : Memory창에해당레지스터이름을직접입력하여바로그메모리의값을읽을수있다. 메모리를참조방법이잘못된경우 GPF(General Protection Fault) 발생 : 해당메모리영역에대한접근권한이없을때 Page fault : 존재하지않는메모리영역에접근하고자할때. 16

17 6-2. Visual C++ 인라인어셈블러 배경 인라인어셈블리코드는코드의이식성을떨어뜨리기때문에권장되지않지만특정태스크를수행하기위한유일한방법이되기도한다. 12,14장에 import한함수를후킹하는방법을구현한예제가있다. 인라인어셈블러는프로그램전체를 MASM으로작성하는것과는다르다. 큰붓으로대강그리고그림을확대해서세밀하게마무리하듯이, C++ 로대강의프로그램을작성한후인라인어셈블러로세밀한부분을작성한다. 인라인어셈블러사용예 17

18 6-2. Visual C++ 인라인어셈블러 인라인어셈블러사용하기 ( 계속 ) asm 키워드를이용한다. 여러개의어셈블러를사용할때에는 { 와 } 로묶어준다. 어셈블러명령어 : NOP (No Operation) Void FunctionOne(void) { asm NOP asm NOP } Void FunctionTwo(void) { asm { NOP NOP } } 두개의함수는동일하다. 18

19 6-3. 주요명령어 (Instructions) 1. Stack Manipulation 2. Very Common Simple Instructions 3. Common Sequence : Function Entry and Exit 4. Variable Access : Global Variables, Parameters, and Local Variables 5. Calling Procedures and Returning 19

20 6-3. 주요명령어 (Instructions) 1. 스택 (Stack) 다루기 Intel 이외의 CPU들은여러레지스터에입력파라미터값을전달하지만 Intel CPU는거의대부분의경우스택을사용하여처리한다. 스택은메모리의높은번지에서부터시작하고아래번지로향한다. 스택은 LIFO(Last In, First Out) 구조를갖는다. 즉, 세개의값을차례대로 PUSH 했으면 POP할때에는그반대순서대로꺼내야한다. 20

21 6-3. 주요명령어 (Instructions) 1. 스택 (Stack) 다루기 ( 계속 ) 스택관련명령어 Instruction Description PUSH word 나 double word 사이즈의값을스택에집어넣는다. POP 스택에서값을꺼내온다. PUSHAD 모든범용레지스터의값들을스택에차례로저장한다. POPAD 스택에서값들을차례로꺼내어모든범용레지스터에저장한다. PUSH 와 POP 명령은현재스택의위치를가리키는 ESP( 스택포인터 ) 를변경시킨다. 즉, PUSH 를하고나면 ESP 값이감소하고, POP 을하면 ESP 값이증가한다. 21

22 6-3. 주요명령어 (Instructions) 1. 스택 (Stack) 다루기 ( 계속 ) 주로레지스터값, 메모리위치, 값등을 PUSH한다. POP을통해꺼낸데이터는레지스터로들어간다. PUSH와 POP은레지스터의값들을교환할때사용하기도한다. 스택에서꺼내어 EAX 에보관 스택에서꺼내어 EBX 에보관 교환효과 22

23 6-3. 주요명령어 (Instructions) 2. 기본명령어들 Instruction Description MOV (Move) 값을다른위치로옮기는보편적인방법. SUB ADD INT 3 LEAVE (Subtract) destination 오퍼랜드에서 source 오퍼랜드의값을뺀후 destination 오퍼랜드에저장한다. (Add) source와 destination 오퍼랜드의값을서로더해서 destination 오퍼랜드에저장한다. (Breakpoint) 디버그중단점 (High-level Procedure Call) 함수실행을마치고빠져나오는순간 CPU의상태값들을복원한다. PUSH/POP 대신 MOV 를이용한값교환. 23

24 6-3. 주요명령어 (Instructions) 3. 일반적인시퀀스 : 함수진입과탈출 함수진입을준비하는 set up과정을 prolog라고하고, 함수를빠져나오는것을 epilog라고하는데이러한과정은컴파일러가자동으로수행한다. Prolog 과정중에는함수의지역변수와파라미터들을스택프레임 (stack frame) 에따로보관하고, EBP 레지스터로하여금스택프레임의위치를가리키도록한다. 스택프레임을사용하는간단한어셈블러예제 24

25 6-3. 주요명령어 (Instructions) 3. 일반적인시퀀스 : 함수진입과탈출 Prolog과정은디버그 / 릴리즈버전모두동일하게수행된다. 릴리즈빌드에서는가끔 PUSH와 MOV 사이에여러명령어들이흩어져있는것을볼수있는데이는다중파이프라인을구현하는펜티엄계열의 CPU가명령어들을한꺼번에처리하는과정에서임의로변경시키기때문이다. 최적화옵션에따라 EBP를프레임포인터로사용하지않는함수가있다. 그러한함수들은 Frame Pointer Omission (FPO) 데이터를갖는다. Epilog 과정은디버그빌드에서는 MOV/POP을차례로수행하지만릴리즈빌드에서는 LEAVE 명령어 (MOV/POP 명령과동일함 ) 를직접사용한다. x*86 CPU는 prolog에해당하는 ENTER 명령어가있지만 PUSH/MOV/ADD 명령보다느려서컴파일러는이를사용하지않는다. 최적화옵션에따라어셈블러코드가많이달라진다. 크기최적화를수행하면표준적인스택프레임을많이사용하게되고, 속도최적화를수행하면서로얽혀있는 FPO 를생성하게된다. 25

26 6-3. 주요명령어 (Instructions) 4. 변수 : 전역및지역변수, 파라미터 전역변수의경우고정된메모리번지에대한참조이므로쉽게사용할수있다. 심볼의로드여부에따라어셈블러코드가좀달라진다. Accessing Global Variable 26 The Disassembly Window

27 6-3. 주요명령어 (Instructions) 4. 변수 : 전역및지역변수, 파라미터 ( 계속 ) 함수가표준스택프레임을갖고있다면 ( 즉, 입력파라미터나지역변수를사용한다면 ) 파라미터는 EBP 레지스터로부터양의옵셋값만큼의위치에있다. 최적화된코드를디버깅할때 ESP 스택포인터로부터양의값만큼떨어진주소번지를참조하고있다면이함수는 FPO 데이터를갖고있는것이다. ESP는함수가실행되는동안계속변하게된다. 따라서파라미터값을잘확인해보아야한다. 반면에, 지역변수는 EBP 레지스터로부터음의값만큼의위치에있다. 27

28 6-3. 주요명령어 (Instructions) 4. 변수 : 전역및지역변수, 파라미터 ( 계속 ) Accessing Parameter Accessing Local Variable 28

29 6-3. 주요명령어 (Instructions) 4. 변수 : 전역및지역변수, 파라미터 ( 계속 ) 지역변수와파라미터를다루는함수예제 Prolog SUB 명령은내부지역변수를위한공간을확보한다. 예제의경우 2 개의 int 를위한 8 바이트공간확보. 여기에 double 형지역변수를선언하면 0x10h 공간확보, char a 지역변수를선언하면 4 바이트공간추가. ( 최소공간이 4byte 임 ) Epilog 29

30 6-3. 주요명령어 (Instructions) 4. 변수 : 전역및지역변수, 파라미터 ( 계속 ) 지역변수와파라미터를다루는함수예제 함수 AccessLocalsAndParamsExample 함수의번지 : 0x 레지스터스택주소스택설명 Prolog 수행이전의레지스터상태 2 개의스택에입력파라미터들이위치하고있다. EBP 는초기화가되지않은상태. 30

31 6-3. 주요명령어 (Instructions) 4. 변수 : 전역및지역변수, 파라미터 ( 계속 ) 지역변수와파라미터를다루는함수예제 : Prolog 실행중의레지스터상태 31

32 6-3. 주요명령어 (Instructions) 4. 변수 : 전역및지역변수, 파라미터 ( 계속 ) 지역변수와파라미터를다루는함수예제 : Prolog 실행중의레지스터상태 EBP 를중심으로지역변수는음의값만큼옵셋을, 파라미터는양의값만큼옵셋을갖는다. 32

33 6-3. 주요명령어 (Instructions) 5. 호출과복귀 (Calling Procedures and Returning) Instruction Description CALL 프로시저를호출한다. RET 프로시저로부터복귀한다. CALL 명령은자신이복귀할메모리주소를스택에저장한다. CALL 명령에대한오퍼랜드는레지스터, 메모리참조, 파라미터, 전역옵셋값등어느것이나상관없다. CALL 명령에프로그램내부의함수를호출할경우에는그함수의메모리주소를바로오퍼랜드로사용한다. 그러나, 외부에서임포트된함수를호출할경우 IAT (Import Address Table) 을통해 imp 라는키워드와함께외부함수를호출한다. RET 명령은스택가장꼭대기에담겨있는메모리주소를이용해함수호출자에게로복귀한다. RET 명령수행시스택의값을체크하지않으므로스택이손상당한경우에는오동작할수도있다. 33

34 6-3. 주요명령어 (Instructions) 5. 호출과복귀 (Calling Procedures and Returning) 34

35 6-4. 호출규약 (Calling Conventions) 호출규약이란함수에파라미터를전달하는방법과함수실행후복귀시의스택정리에대한방법을의미한다. 5가지호출규약. 표준호출 ( stdcall) : 호출받은측에서 ( 즉, 함수내에서 ) 스택을정리한다. 따라서 파라미터에대한정확한정보를필요로하므로 printf 함수와같은가변파라미터기반의함수에는적절하지않다. Win32 에서의시스템함수들과 Visual Basic에서의기본함수호출방식이다. C선언호출 ( cdecl) : 호출한측에서스택정리를한다. 가변파라미터처리에적절하다. C/C++ 컴파일러의기본값이다. this 호출 : C++ 코드작성시 this 포인터를쓰게되면자동으로컴파일러가호출한다. fastcall 호출 : CPU와의이식성문제때문에 Win32 유저모드에서는잘쓰이지않는다. naked 호출 : 가상디바이스드라이버 (VxD) 프로그래밍시 prolog와 epilog를직접다루고자할때사용한다. < 참고 > pascal 호출 : stdcall 과같지만왼쪽부터스택에 push하는점이다르다. WIN32 API에서는더이상쓰이지않는다. 35

36 6-4. 호출규약 (Calling Conventions) 1 36

37 6-4. 호출규약 (Calling Conventions) Calling 예제 : 함수선언및정의 함수선언 함수정의 37

38 6-4. 호출규약 (Calling Conventions) Calling 예제 : Main 문에서의함수호출 Caller 가스택을정리한다. 38

39 6-4. 호출규약 (Calling Conventions) Calling 예제 : 함수실행 RET 명령실행하면서해당스택을바로정리한다. 39

40 6-4. 호출규약 (Calling Conventions) Calling 예제 : 함수실행 ( 계속 ) 40

41 6-5. 더알아야할명령어 1. Data Manipulation 2. Pointer Manipulation 3. Comparing and Testing 4. Jump and Branch Instructions 5. Looping 6. String Manipulation 41

42 6-5. 더알아야할명령어 1. Data Manipulation Instruction Description Instruction Description AND 논리곱비트연산 OR 논리합비트연산 NOT 1의보수, 비트의반전 NEG 2의보수, 0에서오퍼랜드값을뺀것과같다. XOR 논리배타합, 각비트가서로같으면 0 이되는성질을이용하여 XOR EAX,EAX 을실행하면 MOV EAX,0 보다빠르게수행한다. MS 의컴파일러는레지스터를 0 으로초기화하는데이명령어를사용. INC 1을증가, 증가연산자에대응됨. DEC 1을감소, 감소연산자에대응됨. SHL 왼쪽으로이동, 2를곱한것과같다. SHR 오른쪽으로이동, 2를나눈것과같다. DIV 부호없는나눗셈 MUL 부호없는곱셈 IDIV 부호있는나눗셈 IMUL 부호있는나눗셈 LOCK 내용보충필요 MOVSX Move with sign-extend MOVZX Move with zero-extend 42

43 6-5. 더알아야할명령어 1. Data Manipulation ( 계속 ) DIV,MUL 계산은 EAX 레지스터에서수행하고그결과는 EDX 레지스터를사용한다. DIV 명령은나머지값을 EDX 레지스터에, 몫을 EAX 레지스터에보관한다. IDIV, IMUL 부호있는숫자를다루는것외에는 DIV, MUL 명령과동일하게처리한다. IMUL 명령은세개의오퍼랜드를갖기도하는데첫번째는 destination, 나머지두개의오퍼랜드는 source 로사용한다. X86 CPU 에서세개의오퍼랜드로동작하는유일한명령어. LOCK 실제명령어는아니고다른명령어를실행하기위한준비를한다. LOCK 명령은다음에오는명령어가메모리를 atomic operation 할것임을알려준다. 따라서, CPU 는메모리버스에 lock 을걸어다른곳에서접근못하도록막는다. MOVSX, MOVZX 이명령어들은작은숫자들을큰공간에복사할때비어있는상위비트들을어떻게채우는가에따라구분된다. MOVSX 명령어는빈공간들을부호값으로채우고, MOVZX 는 0 으로채운다. 43

44 6-5. 더알아야할명령어 1. Data Manipulation ( 계속 ) NOT, NEG 명령어 초기화시킨 EAX 와 EBX 레지스터 NOT 명령을실행시킨이후의레지스터 NET 명령을실행시킨이후의레지스터 44

45 6-5. 더알아야할명령어 2. 포인터조작 Instruction Description LEA Load effective address 45

46 6-5. 더알아야할명령어 2. 포인터조작 ( 계속 ) 예제 ival 변수의번지값을 EAX 레지스터에담는다. 결국, pint = &ival 과같은구문이된다. 46

47 6-5. 더알아야할명령어 3. Comparing and Testing Instruction Description CMP 두개의오퍼랜드를비교한다. TEST Logical compare CMP 명령어 첫번째오퍼랜드로부터두번째오퍼랜드값을뺀결과값에따라 EFLAGS 레지스터내의플래그값들을설정한다. 주로 C 언어의 if 문의조건분기시에사용된다. 결과에따른플래그설정은다음의표와같다. TEST 명령어 오퍼랜드에대한논리비트연산 AND 를수행하여그결과를가지고서 PL,ZR, PE 플래그들을설정한다. 주로비트값이설정되었는지확인할때사용된다. 47

48 6-5. 더알아야할명령어 4. 점프, 분기명령어 (Jump and Branch Instructions) Instruction Description Instruction Description JMP 절대번지위치로점프 JE 만약같으면점프 JNE 만약같지않으면점프 JL 만약작으면점프 JG 만약크면점프 JLE 만약작거나같으면점프 JGE 만약크거나같으면점프 JA Jump if Above JBE Jump if below or equal JC Jump if carry JNC Jump if Not carry JNZ Jump if not 0 JZ Jump if 0 48

49 6-5. 더알아야할명령어 4. 점프, 분기명령어 ( 계속 ) 예제 49

50 6-5. 더알아야할명령어 5. Looping Instruction Description LOOP ECX 레지스터값만큼루프를실행한다. LOOP 명령어 ECX 레지스터에루프횟수를지정하고, 실행하면지정된코드블록이계속실행된다. 루프를실행할때마다 ECX 값이하나씩감소한다. 50

51 6-5. 더알아야할명령어 5. Looping ( 계속 ) 51

52 6-5. 더알아야할명령어 6. 문자열조작 (String Manipulation) Instruction Description Instruction Description MOVS 문자열에서문자열로데이터를이동 SCAS Scan string STOS 문자열을저장 CMPS 문자열들을비교 REP ECX 값만큼반복 REPE Repeat while equal or ECX count isn t 0 REPNE Repeat while not equal or ECX count isn t 0 Intel CPU 는문자열조작에능하다. 이는 CPU 가단일명령어로커다란메모리덩어리를잘조 작한다는것을의미한다. MOVS 명령어 ESI 가가리키는번지의값을 EDI 의번지로이동시킨다. C 언어의 memcpy 와같다. ESI 에서 EDI 로의이동이끝나면 ESI,EDI 레지스터는 EFLAGS 레지스터의 UP 플래그의값이 0 이면증가하고, 1 이면감소한다. 증감량은옮기는데이터가바이트단위이면 1 만큼, 워드단위이면 2 만큼, 더블워드이면 4 만큼변화한다. 52

53 6-5. 더알아야할명령어 6. 문자열조작 ( 계속 ) SCAS 명령어 EDI가가리키는번지의값과 AL,AX 또는 EAX의번지값을비교한다. NULL문자에대해서실행하면 C언어의 strlen 과유사한기능을수행한다. 명령수행후자동으로 EDI 레지스터값을증가 / 감소시킨다. STOS 명령어 AL,AX 또는 EAX의번지값을 EDI의번지에저장한다. C 언어의 memset 과유사하다. 명령수행후자동으로 EDI 레지스터값을증가 / 감소시킨다. CMPS 명령어 두개의문자열을비교하고 EFLAGS 레지스터의값을설정한다. SCAS 명령이문자열을하나의문자와비교하는것에비하여 CMPS 명령은두개의문자열에대하여수행한다. C 언어의 memcmp 와유사하다. 두개의문자열의길이가다르더라도자동으로길이를조정하여수행한다. 53

54 6-5. 더알아야할명령어 6. 문자열조작 ( 계속 ) 구현예 : SCAS 54

55 6-5. 더알아야할명령어 6. 문자열조작 ( 계속 ) 구현예 : CMPS 55

56 6-5. 더알아야할명령어 6. 문자열조작 ( 계속 ) 구현예 : REP 56

57 6-6. Common Assembly-Language Constructs 1. FS Register Access 2. Structure and Class References 57

58 6-6. Common Assembly-Language Constructs 1. FS Register Access 설명 WIN32 OS 에서 FS 레지스터는 TIB (Thread Information Block) 라고불리는 Thread Environment Block (TEB) 의포인터정보를담고있는특별한레지스터이다. TIB 에는 SEH (Structured Exception Handling) chain 정보들과 TLS (Thread Local Storage) 및기타정보들이담겨있다. TIB 는특정메모리영역에위치하는데 OS 는 FS 레지스터에선형번지수의옵셋만큼을더하여 TIB 에접근한다. 디스어셈블창에서 FS 레지스터를조작하는명령어를만났다면 SHE 프레임을생성 / 소멸하거나 TIB 에접근하거나 TLS 에접근하는동작이진행중인것이다. (1) Creating or Destroying an SHE frame (2) Accessing TIB (3) Accessing Thread Local Storage 내용추가필요 58

59 6-6. Common Assembly-Language Constructs 2. Structure and Class References Structure 나 class 는고수준언어에서사용자가만들어서사용하는 ADT (Abstract Data Type) 이지만어셈블리어에서는이러한개념이없다. 컴파일러는 structure나 class에서선언한대로메모리영역을확보하고단지메모리영역에서옵셋값만으로내부데이터에접근한다. X86 CPU에서는 4 또는 8 바이트씩증가시켜메모리의크기를일정하게유지하기도한다. Structure와 class에대한참조는레지스터와메모리옵셋으로표현된다. 59

60 6-6. Common Assembly-Language Constructs 2. Structure and Class References ( 계속 ) 예제 60

61 6-7. A complete Example WIN32 lstrcpya API 함수의어셈블리코드 파일참조 61

62 6-8. The Disassembly Window 1. Navigating 2. Viewing Parameters on the Stack 3. The Set Next Statement Command 4. The Memory Window and the Disassembly Window 62

63 6-8. The Disassembly Window 1. 둘러보기 Ctrl + G 단축키를이용해 Go To 대화상자를띄운다. 번지나함수이름을입력하면바로그위치로이동한다. 그러나, 심볼이름의경우이름장식의규칙을준수해서표현해야한다. Ex) LoadLibrary 함수 : {,,kernel32}_loadlibrarya@4 로입력한다. Disassemby 창에서현재진행위치를놓치게되면마우스오른버튼을눌러 Show Next Statement 명령을실행한다. 63

64 6-8. The Disassembly Window 2. 스택내의파라미터값보기 메모리창에스택포인터레지스터인 ESP 라고입력한다. 메모리창내에서마우스오른버튼을눌러 Long Hex Format 메뉴를선택한다. 스택의가장위에는함수복귀주소가있고그다음에는함수의파라미터들이들어있다. ( 함수입력파라미터들은오른쪽위치에서부터스택에저장되고스택은계속감소하는것을기억하자 ) 메모리창의번지값을드래그하여 Watch 창에서값을확인해볼수있다. 특히스트링의경우 (char *)0x10203f 의형식으로입력하면더쉽게확인이가능하다. 함수실행중간에파라미터를보고자할경우에는 EBP에양의값의옵셋을적용하는등의좀번거로운과정을거친다. 64

65 6-8. The Disassembly Window 3. 다음구문으로설정하기 (Set Next Statement) 명령 이명령을실행하면 EIP 레지스터값을변경하여특정위치에서실행토록한다. 소스윈도우에서사용하는것은손쉬운일이지만 Disassembly 창에서실행할때에는스택의상태에주의해야한다. 65

66 6-8. The Disassembly Window 4. 메모리창과역어셈블리창 어셈블리명령은메모리상에서수행되고, 메모리는어셈블리명령에영향을미치미로메모리창과역어셈블리창은늘두개를함께관찰하도록한다. 이진파일실행시 Crash가발생하면모듈목록창을띄운후번지수를확인한다. 스택에나열된번지의목록들과이값과비교하면서정확한위치를찾는다. 메모리창에서 ESP 를입력하여스택포인터의값을확인한다. 모듈목록에표시된번지와유사한값이있으면역어셈블리창으로드래그하여정확한실행함수를찾는다. 메모리창은 255자이상의스트링을확인할수있는유일한창이지만한번에조금씩밖에확인할수없다. 메모리창에서마우스오른버튼을이용해보기형식을변경하면창의첫번지가변경된다. 66

67 6-9. 팁과꼼수 1. Endians 2. Garbage Code 3. Registers and the Watch Window 4. Learn from ASM Files 67

68 6-9. 팁과꼼수 1. Endians CPU 내부에서바이트배열순서에따라다른이름으로불리운다. 인텔 CPU는뒷자리바이트가메모리에먼저배치되는 Little Endian 방식을사용한다. 즉, 0x1234 값은메모리에 0x34 0x12 의순서대로저장된다. 그러므로, 메모리창을이용한디버깅시에는 리틀인디언 저장방식을늘유념해야한다. 68

69 6-9. 팁과꼼수 2. 쓰레기코드 Crash 가발생해서역어셈블리창으로디버깅작업을시작하기전에진짜수행코드부분의메모리를보고있는지먼저확인해야한다. 다음의팁을이용하자. (1) 역어셈블리창에서마우스오른버튼으로 Code Bytes 메뉴를선택해서보는것이 OP코드를찾는데더도움이된다. (2) 계속적으로 ADD BYTE PTR[EAX] 명령을보게되면아마도 0의값이있는엉뚱한곳을보고있을수있다. (3) 심볼이있고그심볼에 0x1000 을넘는매우큰값의옵셋이더해졌다면아마도코드섹션을벗어난곳을보고있는것이다. 하지만매우큰옵셋값은심볼이없는모듈을디버깅하고있다는것을나타내기도한다. (4) 이장에서다루지않았던여러어셈블리명령어가계속나온다면아마도데이터영역을보고있는것이다. (5) Visual C++ 디버거가심볼을역어셈블하지못하는경우에는??? 라고화면에표시한다. 69

70 6-9. 팁과꼼수 3. 레지스터와 Watch 창 Watch 창에레지스터이름을직접입력하여값을확인해볼수있다. 예를들어스트링관련조작명령코드를보고있다면 Watch 창에 (char 라고입력하면훨씬손쉽게데이터를확인할수있다. 70

71 6-9. 팁과꼼수 4. ASM 파일생성 Project 옵션의 C++ 탭에 /FAs 라고입력하면확장자가 asm 인파일이생성된다. 이파일은 MASM에의해바로컴파일될수있는형태로존재한다. 71

72 6-10. 요약 1. 72

73 7 장. Visual Basic 디버거를이용한강력한디버깅 목차 1. Visual Basic P-Code 2. Error Trapping : Break In or Break Out Option 3. Visual Basic Debugger Window 4. Tip and Tricks 5. Summary 73

74 7-1. Visual Basic P- 코드 1. A P-code History Lesson 2. Ramification of P-Code 74

75 7-2. Error Trapping : Break In or Break On Option 1. Break On All Errors 2. Break On Unhandled Errors 3. Break In Class Modules 4. A Final Plea for Decent Error Trapping 75

76 7-3. Visual Basic Debugger Windows 1. The Local Window 2. The Immediate Window 3. The Watch Window 76

77 7-4. Tips and Tricks 1. Add the run To Cursor Button to the Debugger Toolbar 2. Avoid Compile On Demand 3. Group Projects Are the Way to Go for Debugging 4. Visual Basic Debugging and Reality Might Conflict 77

78 8 장. Crash 주소만으로소스위치정보찾아내기 목차 1. MAP 파일생성및읽기 2. CrashFinder 사용하기 3. CrashFinder 다음에는? 4. 요약 프로그램은비정상종료를하면서 Crash 주소만을남긴다. Dr. Watson 의로그를확인해도마찬가지이다. 결국 Crash주소를가지고서해당소스파일과위치를알아내야하는것이다. 여기에위치를찾는두가지방법을소개한다. 78

79 8-1. MAP 파일생성및읽기 1. 설명 2. MAP 파일의내용 3. 함수이름, 소스파일, 라인위치찾아내기 79

80 8-1. MAP 파일생성및읽기 1. 설명 MAP 정보파일만이전역심볼, 소스파일, 라인위치등의정보를담고있는유일한 텍스트형태로저장하고있다. Visual C++ 에서 MAP 정보파일만들기 (1) Project Setting 창의 Link 탭에 /MAPINFO:EXPORT 와 /MAPINFO:LINES 라고입력한다. (2) Debug 카테고리선택후 Generate Mapfile 옵션을선택한다. (3) 기본적으로 Map 정보파일은중간단계파일들이생성되는폴더에생기므로이를최종파일이생성되는폴더로변경하는것이좋다. 즉, $(OUTDIR)\<project>.MAP 이라고에디트박스에입력한다. 여기서 (OUTDIR) 이해당실행파일이위치할폴더이름이다. Visual Basic 에서 MAP 정보파일만들기 내용추가필요심볼테이블의변경을제대로추적하기위해늘 PDB 파일을저장하자. 80

81 8-1. MAP 파일생성및읽기 1. 설명 ( 계속 ) 81

82 8-1. MAP 파일생성및읽기 2. MAP 파일의내용 MapDll.map 파일 (1) 모듈이름 (2) 생성시간 (3) 로드될주소 (4) 섹션정보 함수이름 함수실행주소 (5) 공용함수정보 82

83 8-1. MAP 파일생성및읽기 2. MAP 파일의내용 ( 계속 ) MapDll.map 파일 ( 계속 ) (1) 소스라인정보 소스라인번호 코드섹션의시작위치 에서의옵셋 (5) 외부노출함수 83

84 8-1. MAP 파일생성및읽기 3. 함수이름, 소스파일, 라인위치찾아내기 예제 : MapEXE.exe, Crash 발생주소 : 0x

85 8-1. MAP 파일생성및읽기 3. 함수이름, 소스파일, 라인위치찾아내기 ( 계속 ) (1) Crash 주소가로드될주소 (0x ) 과공용함수섹션의마지막번지 (0x ) 안에있으면 map 파일을제대로선택한것이다. (2) Crash 발생한함수를알기위해 Crash 주소보다작은첫번째함수를찾는다. (0x 번지의?MapDLLHappyFunc@@YAPADPAD@Z 함수 ) 85

86 8-1. MAP 파일생성및읽기 3. 함수이름, 소스파일, 라인위치찾아내기 ( 계속 ) (3) 함수의정확한이름을알기위해 UNDNAME.EXE 를이용한다. ( 함수이름앞의? 는 C++ 형식의이름장식을쓴것이다.) 실행후문제의함수가 MapDLLHappyFunc 인것을알았다. 86

87 8-1. MAP 파일생성및읽기 3. 함수이름, 소스파일, 라인위치찾아내기 ( 계속 ) (4) 정확한 Crash 주소를알기위해다음의식으로계산해낸다. (Crash 주소 ) ( 로드될주소 ) 0x1000 모든번지는항상코드섹션의시작위치에서의옵셋값인것을기억하자. 코드섹션의시작위치가곧이진파일의시작위치는아니다. 실제이진파일의시작위치는 PE (Portable Executable) 의헤더인 0x1000 이다. 그러므로, 0x x x1000 = 0x99 가실제 Crash 위치인것이다. (5) 라인정보섹션에서옵셋값을반영한 Crash 주소에가장가까운값을찾는다. 가장가까운 0001: 인 38 번째라인이해당위치가된다! 87

88 8-2. CrashFinder 사용하기 1. 충돌주소찾아가기 매번 MAP파일을읽어라인위치찾기는어렵지는않으나귀찮은일이다. 또한, QA 팀이나기술지원팀, 관리자가 MAP파일을뒤진다는것은 적합하지않다. 이러한문제점을해결코자저자는 CrashFinder를제작함. CrashFinder 유틸리티는충돌 (Crash) 주소를함수이름, 소스파일, 라인번호로변환시켜서보여준다. CrashFinder를팀에서사용할때, 실행바이너리파일과 PDB파일을보관하는것이매우중요하다. (CrashFinder는실행파일의위치외에는어떠한정보도따로저장하지않는다 ) 88

89 8-2. CrashFinder 사용하기 2. CrashFinder 살펴보기 실행파일과관련 dll 관련심볼이제대로로드되었음. 선택된모듈에대한세부설명 89

90 8-2. CrashFinder 사용하기 3. CrashFinder 사용하기 실행파일등록하기 (1) File 메뉴 -> New (2) Edit 메뉴 -> Add Image CrashFinder 는프로젝트에대해서하나의실행파일만을지원한다. 따라서, 여러개 의실행파일로이루어진프로그램을실행할때에는각각의실행파일에대하여독립 적은 CrashFinder 프로젝트를만들어야한다. (CrashFinder 는 MDI 구조를갖는다.) dll 파일을프로젝트에추가시키면, CrashFinder 는먼저기존의다른 dll 파일들과의 load 될번지와의충돌여부를확인하고이를적절한번지로변경한다. 언제든지 Edit 메뉴 -> Image Properties 항목을통해 load 번지를변경할수있다. 90

91 8-2. CrashFinder 사용하기 3. CrashFinder 사용하기 ( 계속 ) 충돌주소를확보한후 Edit 메뉴-> Find Crash 대화상자를실행시켜충돌주소를입력한다. CrashFinder는관련정보를대화상자에표시한다. 91

92 8-2. CrashFinder 사용하기 4. 구현상의기술 (1) 심볼엔진 CrashFinder 는심볼엔진 DBGHELP.DLL 를사용한다. 심볼엔진으로하여금 SYMOPT_LOAD_LINES 플래그를설정하여강제적으로모든소스파일과라인정보를 load 하도록명시적으로명한다. (2) CrashFinder 내의어느부분에서일이진행되는가 내용추가필요 (3) 데이터아키텍처 내용추가필요 92

93 8-3. CrashFinder 다음에는? 4. 다음의기능들을더추가해보자. (1) 종속 dll들을자동으로추가하자. (2) 에디트컨트롤에좀더많은정보를보여주자. (3) Dll 목록을붙여넣기하면자동으로 dll 들을프로젝트에추가하자. 93

94 8-4. 요약 94

95 9 장. Crash Handlers 목차 1. Structured Exception Handling vs. C++ Exception Handling 2. The SetUnhandledExceptionFilter API Function 3. Using the CrashHandler API 4. Translating EXCEPTION_POINTERS Structures 5. Summary 프로그램이갑자가비정상종료를하며에러메시지박스를화면에띄우면사용자는열받는다. 무성의한에러메시지보다는개발자가받아볼수있도록여러가지관련정보를입력할수있는커스텀화한대화상자를띄울수있다면? Crash Handler는 Exception Handler와 Unhandled exception filter를이용하여이러한기능을구현한다. Exception Handler는 C++ 에의존적인기능이고 Unhandled Exception Filter는 Visual C++ 과 Visual Basic에모두사용가능하다. 95

96 9-1. 구조화된예외처리와 C++ 예외처리 1. 개요 2. 구조화된예외처리 (SEH) 3. C++ 예외처리 4. SHE와 C++ 예외처리를조합하여사용하기 96

97 9-1. 구조화된예외처리와 C++ 예외처리 C++ 에서사용할수있는 2 가지예외처리방법 (1) OS 에서제공하는구조화된예외처리 (SEH) 기능 (2) C++ 언어에서제공하는예외처리기능 두가지기능을조합하여사용할수는있지만명확하게다른특징들을갖는다. 그럼, 두가지기능의유사점과차이점및조합하여사용할때의문제점들을살 펴보자. 97

98 9-1. 구조화된예외처리와 C++ 예외처리 1. 개요 2. 구조화된예외처리 (SEH) 3. C++ 예외처리 4. SHE와 C++ 예외처리를조합하여사용하기 98

99 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) 접근위반 (Access violation) 등과같은 Crash 상황에서 OS는 SEH 기능을제공한다. SEH는언어에비종속적이지만대부분 C++ 에서 try 와 except, try와 finally 로짝을이루어사용한다. try/ except 구문의사용 : 코드를 try 블록안에입력하고 exception handler에해당하는 except 블록에예외처리코드를입력한다. finally 구문의경우함수실행을종료할때항상그블록안의내용이실행된다. 예 : exception filter 99

100 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) Exception Filter EXCEPTION_EXECUTE_HANDLER : try 블록안에서예외가발생할때마다 except 블록으로진입하여코드를실행한다. EXCEPTION_CONTINUE_EXECUTION : 예외발생을무시한다. EXCEPTION_CONTINUE_SEARCH : 예외가발생하면상위블록의다음 except 블록으로진입한다. Unwinding the exception ( 예외발생시스택되감기 ) 함수의호출이계속될때마다예외핸들러가내부의스택에쌓이게된다. 일단예외상황이발생하면 OS는실제예외처리구문이나올때까지스택에서하나씩꺼내면서계속찾는다. 스택을모두되감아서 ( 하나씩모두꺼낸후 ) 최종예외처리코드수행하고나서 Application Error 대화상자를표시한다. 100

101 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) 101

102 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) GetExceptionCode 함수 예외발생시의예외값을알고자할때사용. Exception filter안에서만사용가능하다. 예. divide by zero (NaN) 오류이면 EXCEPTION_EXECUTE_HANDLER 를실행하고그렇지않으면 EXCEPTION_CONTINUE_SEARCH 를실행한다. 102

103 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) GetExceptionInformation 함수 적절히예외를처리하고그결과를예외필터값으로리턴하는고유의함수를만들어예외필터안에서사용할수도있다. 또, GetExceptionInformation 함수를예외필터안에서사용할수도있다. GetExceptionInformation 함수는 EXCEPTION_POINTER 구조체의포인터를리턴한다. EXCEPTION_POINTER 구조체에는예외가발생하여 Crash된이유와그당시의 CPU의상태들에대한모든정보가들어있다. RaiseException 함수 독자적으로예외를발생시킬수있으며다중으로내포된구문에서빨리빠져나올때사용하기도한다. RaiseException 함수를사용하여빠져나오는것이기존의 set_jmp 나 longjmp 함수를이용하는것보다명확하다. 103

104 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) SEH 사용상의제약 1. 사용자고유의에러코드를사용하더라도하나의 unsigned integer 형태만가능하다. 2. C++ 과혼용하여사용하기가까다롭고, C++ 과분별없이사용하게되면컴파일러가불평을하게된다. 특히, SEH 스택되감기중에는스택내의 C++ 객체의소멸자를호출하지않기때문에메모리 leak등여러문제가발생할수있다. 참고 A Crash Course on the Depths of Win32 Structured Exception Handling, MSJ January Book, Programming Applications for Microsoft Windows, by Jeffrey Richter, Microsoft Press, MSDN, SEH in x86 Environment. MSDN, Exception Handling Topics (SHE) 104

105 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) 1. 개요 2. 구조화된예외처리 (SEH) 3. C++ 예외처리 4. SHE와 C++ 예외처리를조합하여사용하기 105

106 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) C++ 예외처리는 C++ 언어에서지원하는 try, catch, throw 명령에의해구현된다. SEH 에러코드가부호없는정수형으로제한된반면에 C++ 예외처리에서는클래스를포함한다양한형을지원한다. MFC 라이브러리의 Cexception 기본클래스는상속개념을이용하도록한다. 그러나 C++ 예외처리는다음의단점을갖는다. 1. 사용자프로그램의 Crash를자동으로처리하지않는다. 2. try/catch 구문을구현하는데비용이많이들어성능상좋지않은영향을미친다. 106

107 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) 예. MFC 의 CFile 클래스의 read 부분 107

108 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) 1. 개요 2. 구조화된예외처리 (SEH) 3. C++ 예외처리 4. SEH와 C++ 예외처리를조합하여사용하기 108

109 9-1. 구조화된예외처리와 C++ 예외처리 ( 계속 ) SEH와 C++ 예외처리를함께사용하려면.. 사용자코드내에서는 C++ 예외처리를이용해야한다. C 런타임라이브러리함수중에 _set_se_translater 함수가구조적예외가발생했을때에 C++ 예외를 throw할수있도록 translator 함수를설정한다. 109

110 9-2. 구조화된예외처리 (SEH) GetExceptionCode 함수 예외발생시의예외값을알고자할때사용. Exception filter안에서만사용가능하다. 예. divide by zero (NaN) 오류이면 EXCEPTION_EXECUTE_HANDLER 를실행하고그렇지않으면 EXCEPTION_CONTINUE_SEARCH 를실행한다. 110

111 Th End! 감사합니다. 111 최상호

hlogin2

hlogin2 0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS

More information

Deok9_Exploit Technique

Deok9_Exploit Technique Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security

More information

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com

More information

No Slide Title

No Slide Title Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea

More information

=

= written by vangelis(vangelis@wowhacker.org) 0 0000 8 1000 1 0001 9 1001 2 0010 10 1010 3 0011 11 1011 4 0100 12 1100 5 0101 13 1101 6 0110 14 1110 7 0111 15 1111 110112 + 100012 = 1011002 110 0000 0101

More information

Microsoft PowerPoint - hy2-12.pptx

Microsoft PowerPoint - hy2-12.pptx 2.4 명령어세트 (instruction set) 명령어세트 CPU 가지원하는기계어명령어들의집합 명령어연산의종류 데이터전송 : 레지스터 / 메모리간에데이터이동 산술연산 : 덧셈, 뺄셈, 곱셈및나눗셈 논리연산 : 비트들간의 AND, OR, NOT 및 XOR 연산 입출력 (I/O) : CPU( 레지스터 ) 와외부장치들간의데이터이동 프로그램제어 : 분기, 서브루틴호출

More information

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

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

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

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

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

Microsoft PowerPoint - a8a.ppt [호환 모드] 이장의내용 8 장고급프로시저 스택프레임 재귀 (Recursion) Invoke, Addr, Proc, Proto 디렉티브 다중모듈프로그램작성 2 8.2 스택프레임 Stack Frame ( 또는 activation record) procedure 의다음사항을저장한 영역 urn address passed parameter ( 스택매개변수 ) saved register

More information

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

Microsoft PowerPoint - a6.ppt [호환 모드] 이장의내용 6 장조건부처리 부울과비교명령어 조건부점프 조건부루프명령어 조건부구조 컴퓨터정보통신 어셈블리언어 2 6.2 부울과비교명령어 부울명령어 Instructions ti 동작 AND dst, src OR dst, src XOR dst, src NOT dst dst dst AND src dst dst OR src dst dst XOR src dst NOT

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

제목

제목 Development Technology Seminar 작 성 자 : 고형호 이 메 일 : hyungho.ko@gmail.com 최초작성일 : 2007.01.19 최종작성일 : 2007.02.05 버 전 : 01.05 홈 피 : www.innosigma.com Goal Exception Handling 1. SEH vs. CEH Exception Handling

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

강의10

강의10 Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A

<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A 강연소개 Exception Handler 를통한에러검출및수정 디버깅을즐겨하십니까..? 에러를만나면반갑습니까..? 전화로버그보고를받았나요..? 잡히지않는버그!!!! 따분한강의 졸아도좋습니다!!!! 강연자소개 테스터 온라인게임클라이언트개발 로컬라이즈및해외지원업무 디버깅, 최적화, 호환성향상에관심 강연대상 x86 환경에서 Windows 프로그래밍 디버깅 / 에러추적은

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

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

Microsoft PowerPoint - a10.ppt [호환 모드] Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는

More information

Microsoft PowerPoint - o8.pptx

Microsoft PowerPoint - o8.pptx 메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D> VHDL 프로그래밍 D. 논리합성및 Xilinx ISE 툴사용법 학습목표 Xilinx ISE Tool 을이용하여 Xilinx 사에서지원하는해당 FPGA Board 에맞는논리합성과정을숙지 논리합성이가능한코드와그렇지않은코드를구분 Xilinx Block Memory Generator를이용한 RAM/ ROM 생성하는과정을숙지 2/31 Content Xilinx ISE

More information

IDA 5.x Manual 07.02.hwp

IDA 5.x Manual 07.02.hwp IDA 5.x Manual - Manual 01 - 영리를 목적으로 한 곳에서 배포금지 Last Update 2007. 02 이강석 / certlab@gmail.com 어셈블리어 개발자 그룹 :: 어셈러브 http://www.asmlove.co.kr - 1 - IDA Pro 는 Disassembler 프로그램입니다. 기계어로 되어있는 실행파일을 어셈블리언어

More information

The_IDA_Pro_Book

The_IDA_Pro_Book The IDA Pro Book Hacking Group OVERTIME force (forceteam01@gmail.com) GETTING STARTED WITH IDA IDA New : Go : IDA Previous : IDA File File -> Open Processor type : Loading Segment and Loading Offset x86

More information

<BEEEBCC0BAEDB8AEBEEEC1A4B8AE2E687770>

<BEEEBCC0BAEDB8AEBEEEC1A4B8AE2E687770> Parse and Parse Assembly ( 어셈블리어입문자를위한 어셈블리어자료들의모음 ) ## 목차 ## 0x01. ----------Introduce----------- 0x02. 어셈블리언어란? & 배우는목적 0x03. 어셈블리언어를위한기본지식 0x04. 어셈블리명령어의구성 0x05. 주소지정방식의이해 0x06. 어셈블리명령어정리 0x07. 어셈블리명령어상세

More information

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 1. data-addressing mode CHAPTER 6 Addressing Modes 2. use of data-address mode to form assembly language statements 3. op of program memory address mode 4. use of program memory address mode to form assembly

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

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

Microsoft PowerPoint - System Programming Lab Week1.ppt [호환 모드] System Programming Lab Week 1: Basic Skills for Practice Contents vi Editor 사용법 GCC 컴파일러사용법 Makefile 사용법 GDB 사용법 VI Editor Usage vi 모드 입력모드 : 실제문서를편집하는모드. 명령모드 : 키입력이바로명령이되는모드로서쓴내용을삭제하거나, 복사할때사용. ex 명령모드

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

vi 사용법

vi 사용법 유닉스프로그래밍및실습 gdb 사용법 fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars();

More information

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

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

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

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

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

Microsoft PowerPoint - a9.ppt [호환 모드] 9.1 이장의내용 9 장. 스트링과배열 스트링프리미티브명령어 2 차원배열 정수배열검색및정렬 컴퓨터정보통신 어셈블리언어 2 9.2 스트링프리미티브명령어 String Primitive Instructions 의동작 String Primitive Instructions Instructions 설명 동작 MOVS(B,W,D) Move string data M[EDI]

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

Microsoft PowerPoint - 15-MARS

Microsoft PowerPoint - 15-MARS MARS 소개및실행 어셈블리프로그램실행예 순천향대학교컴퓨터공학과이상정 1 MARS 소개및실행 순천향대학교컴퓨터공학과 2 MARS 소개 MARS MIPS Assembler and Runtime Simulator MIPS 어셈블리언어를위한소프트웨어시뮬레이터 미주리대학 (Missouri State Univ.) 의 Ken Vollmar 등이자바로개발한교육용시뮬레이터

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Reverse Engineering Basics IA32 Basics CPU(Central Processing Units) 의구조 ALU Register EAX s EBX ECX EDX ESI EDI ESP EBP Control Unit EIP IR Eflags I/O Unit Data Bus Address Bus IA32 Register What is Register?

More information

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

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판

More information

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

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

Microsoft Word - ExecutionStack

Microsoft Word - ExecutionStack Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();

More information

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

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

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

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

PRO1_09E [읽기 전용]

PRO1_09E [읽기 전용] Siemens AG 1999 All rights reserved File: PRO1_09E1 Information and - ( ) 2 3 4 5 Monitor/Modify Variables" 6 7 8 9 10 11 CPU 12 Stop 13 (Forcing) 14 (1) 15 (2) 16 : 17 : Stop 18 : 19 : (Forcing) 20 :

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

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

Microsoft PowerPoint - a2.ppt [호환 모드] 마이크로컴퓨터의기본구조 2 장 x86 프로세서구조 ALU: 산술논리연산제어장치 (CU): 실행순서제어클럭 : 구성요소들의동작동기화 CPU + memory + I/O + bus 어셈블리언어 2 클럭 (Clock) CPU 와 Bus 동작은클럭에동기되어동작을한다. 메모리읽기사이클과대기상태 1 클럭사이클동안간단한동작을수행한다. 기계어명령어수행에적어도 1 클럭사이클이필요함

More information

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M (1) 주소지정방식 Address Mode 메모리접근 분기주소 2. 8051 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data Memory 외부 Data Memory (2) 명령어세트 - 8051 명령어는 5 가지로분류,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

MPLAB C18 C

MPLAB C18 C MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C

More information

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

Microsoft PowerPoint - a5a.ppt [호환 모드] 5 장프로시저 (1) 책의라이브러리사용 5 장전반부 : 책의링크라이브러리 외부링크라이브러리개요 라이브러리프로시저호출 라이브러리링크 라이브러리프로시저 예제 연세대학교컴퓨터정보통신어셈블리언어 2 저자제공링크라이브러리 라이브러리파일 어셈블된프로시저를포함하고있는 OBJ 파일들을모아놓은파일 ( 확장자.LIB) 각 OBJ file 에는하나이상의 procedure 가들어있음

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

Microsoft Word - Reversing Engineering Code with IDA Pro-4-1.doc

Microsoft Word - Reversing Engineering Code with IDA Pro-4-1.doc Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판

More information

Deok9_PE Structure

Deok9_PE Structure PE Structure CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 1. PE > 1) PE? 2) PE 3) PE Utility

More information

Microsoft Word - building the win32 shellcode 01.doc

Microsoft Word - building the win32 shellcode 01.doc Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

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

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

슬라이드 1

슬라이드 1 명령어집합 주소지정모드 (addressing mode) 내용 명령어는크게연산자부분과이연산에필요한주소부분으로구성 이때주소부분은다양한형태를해석될수있으며, 해석하는방법을주소지정방식 ( 모드 )(addressing mode) 라한다. 즉피연산자정보를구하는방법을주소지정방식이라고함 명령어형식 주소지정 명령어형식에있는주소필드는상대적으로짧다. 따라서지정할수있는위치가제한된다.

More information

Computer Architecture

Computer Architecture 명령어의구조와주소지정방식 명령어세트명령어의형식주소지정방식실제명령어의형태 이자료는김종현저 - 컴퓨터구조론 ( 생능출판사 ) 의내용을편집한것입니다. 2.4 명령어세트 (instruction set) 어떤 CPU 를위하여정의되어있는명령어들의집합 명령어세트설계를위해결정되어야할사항들 2 연산종류 (operation repertoire) CPU 가수행할연산들의수와종류및복잡도

More information

Chapter ...

Chapter ... Chapter 4 프로세서 (4.9절, 4.12절, 4.13절) Contents 4.1 소개 4.2 논리 설계 기초 4.3 데이터패스 설계 4.4 단순한 구현 방법 4.5 파이프라이닝 개요*** 4.6 파이프라이닝 데이터패스 및 제어*** 4.7 데이터 해저드: 포워딩 vs. 스톨링*** 4.8 제어 해저드*** 4.9 예외 처리*** 4.10 명령어 수준

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

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

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

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

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for 2003 Development of the Software Generation Method using Model Driven Software Engineering Tool,,,,, Hoon-Seon Chang, Jae-Cheon Jung, Jae-Hack Kim Hee-Hwan Han, Do-Yeon Kim, Young-Woo Chang Wang Sik, Moon

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

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

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 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 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

02.Create a shellcode that executes /bin/sh Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes /bin/sh C 02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C language Assembly code Change permissions(seteuid())

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

PowerPoint Template

PowerPoint Template 16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

T100MD+

T100MD+ User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+

More information

슬라이드 1

슬라이드 1 Delino EVM 용처음시작하기 - 프로젝트만들기 (85) Delfino EVM 처음시작하기앞서 이예제는타겟보드와개발홖경이반드시갖추어져있어야실습이가능합니다. 타겟보드 : Delfino EVM + TMS0F85 초소형모듈 개발소프트웨어 : Code Composer Studio 4 ( 이자료에서사용된버전은 v4..입니다. ) 하드웨어장비 : TI 정식 JTAG

More information

Microsoft Word - 1. ARM Assembly 실습_xp2.doc

Microsoft Word - 1. ARM Assembly 실습_xp2.doc ARM asm 의구조 ARM Assembly 실습 1. 기본골격 AREA armex,code, READONLY ;Mark first instruction to execute start MOV r0, #10 MOV r1,#3 ADD r0, r0, r1 ; r0 = r0 + r1 stop NOP NOP B stop ; Mark end of file 위의 asm의구조를이해하고실행해보세요.

More information

슬라이드 1

슬라이드 1 CCS v4 사용자안내서 CCSv4 사용자용예제따라하기안내 0. CCS v4.x 사용자 - 준비사항 예제에사용된 CCS 버전은 V4..3 버전이며, CCS 버전에따라메뉴화면이조금다를수있습니다. 예제실습전준비하기 처음시작하기예제모음집 CD 를 PC 의 CD-ROM 드라이브에삽입합니다. 아래안내에따라, 예제소스와헤더파일들을 PC 에설치합니다. CD 드라이브 \SW\TIDCS\TIDCS_DSP80x.exe

More information

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

윤성우의 열혈 TCP/IP 소켓 프로그래밍 예외처리 (Exception Handling) 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2012-2 nd 프로그래밍입문 (1) 예외상황과예외처리의이해 3 예외상황을처리하지않았을때의결과 예외상황은프로그램실행중에발생하는문제의상황을의미한다. 예외상황의예나이를입력하라고했는데, 0보다작은값이입력됨.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

hlogin7

hlogin7 0x07. Return Oriented Programming ROP? , (DEP, ASLR). ROP (Return Oriented Programming) (excutable memory) rop. plt, got got overwrite RTL RTL Chain DEP, ASLR gadget Basic knowledge plt, got call function

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information