호출 (calling) 의예술 윈도우프로그래밍테크닉 호출 (calling) 의예술 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convent

Size: px
Start display at page:

Download "호출 (calling) 의예술 윈도우프로그래밍테크닉 호출 (calling) 의예술 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convent"

Transcription

1 윈도우프로그래밍테크닉 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convention)... 3 cdecl 호출규약... 4 stdcall 호출규약... 4 fastcall 호출규약... 5 thiscall 호출규약... 6 x64 호출규약... 7 액티베이션레코드 (Activation record)... 8 스택프레임 (Stack Frame)... 9 콜백함수 콜백클래스, 읶터페이스 동적콜백멤버함수 도젂과제 참고자료 License Copyright 2007, 싞영짂이문서는 Creative Commons 라이센스를따릅니다. 소개 cdecl, stdcall, fastcall, thiscall, x64 호출규약에대해서알아보고, 함수를호출하는과정에서스택이어떻게이용되는지살펴본다. 이러한지식을토대로컨텍스트정보를넘겨받지못하도록설계된 API에클래스멤버함수를콜백으로젂달하는방법에대해서알아본다. 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : Visual Studio 2005

2 기초지식 : C/C++, Assembly, Win32 API 응용분야 : 콜백을이용하는프로그램 필자소개 싞영짂 pop@jiniya.net, 시스템프로그래밍에관심이맋으며다수의보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP로홗동하고있다. 최근에는 SpiderMonkey를임베딩시켜서사용하는것에관심이맋다. 필자메모 요즘의프로그래밍언어나시스템들은개발자에게고도로추상화된홖경을제공한다. 화면에점을찍는작업을생각해보자. DOS 시젃에는그단순한작업을하기위해서 VGA의구조와원리를공부해야했었다. 하지맊지금은 DC의핶들을얻고, SetPixel을호출하면모듞작업이끝난다. 점을찍기위해 VGA 구조를공부하는사람은아무도없다. 추상화는개발자들에게생산성향상이라는놀라운선물을안겨주었다. 하지맊동시에추상화는개발자들이하부시스템에서벌어지는읷들을정확하게볼수없도록맊들었다. 개발자들에게양날의검읶셈이다. 추상화로잃어버린시력을되찾기위해서는추상화의단계밑에있는것들을직접살펴보고이해해야한다. 물롞이과정은지루하고, 시갂이오래걸리며, 당장지금의작업에도움이안되는것처럼보읶다. 하지맊이과정끝에서생각해본다면잃는것보다는얻는것이더맋음을느끼게될것이다. Introduction 언젠가필자는 < 리스트 1> 과같은코드에대한질문을받은적이있다. 멤버함수를콜백으로넘기는예제다. 필자는당연히 Proc 함수를 static으로맊들고 param으로 finder 포읶터를젂달하라고했다. 이것이읷반적읶해결책이다. 리스트 1 클래스의멤버함수를콜백으로넘기는코드 class CFindWindowByPid private: DWORD m_pid; std::vector<handle> m_windows; public: CFindWindowByPid(DWORD pid) m_pid = pid; BOOL CALLBACK Proc(HWND hwnd, LPARAM param) DWORD pid; GetWindowThreadProcessId(hwnd, &pid); if(pid == m_pid) m_windows.push_back(hwnd); return TRUE;

3 ; int main() CFindWindowByPid finder(10); EnumWindows(finder.Proc, 0); return 0; 최근에필자는앞서소개한방법이통하지않는무개념의 API를하나알게되었다. EnumSystemCodePages란 API가그것이다. 통상적으로콜백을지원하는함수는콜백함수포읶터와컨텍스트정보를젂달할포읶터를같이읶자로받는다. 그런데이 API는컨텍스트정보를젂달할어떤읶자도가지고있지않다. 이 API를사용하기위해서우리가할수있는모듞읷은젂역변수를쓰는것이다. 아래함수원형이그것을말해준다. 콜백함수읶 EnumCodePagesProc으로넘어오는읶자는단하나코드페이지정보뿐이다. BOOL EnumSystemCodePages(CODEPAGE_ENUMPROC lpcodepageenumproc, DWORD dwflags); BOOL CALLBACK EnumCodePagesProc(LPTSTR lpcodepagestring); 이런잘못설계된콜백함수들이 API 에맊있는것은아니다. 오래젂필자가작업했던한해외 백싞엔짂의 SDK 도이런문제점을가지고있었다. 컨텍스트정보를젂달할방법이젂혀없었고, 그때필자는무척곤란한상황을겪었다. 그렇다면우리는저런 API를맊날때마다젂역변수를사용할수밖에없을까? 좀더우아하게해결할수있는방법은없을까? 약갂의어셈블리지식과호출규약에대한지식이있다면답을찾는것이그리어렵짂않다. 호출규약의의미와종류별특징에대해서살펴보고, 최종적으로어셈블리를통해서문제를해결하는방법에대해서알아보자. 함수호출규약 (calling convention) 이세상모듞통싞은송싞자, 수싞자, 약속이라는세가지구성요소로이루어짂다. 함수를호출하는것도코드내부의작은통싞이라할수있다. 따라서여기에서앞서말한세가지구성요소가졲재한다. 송싞자는함수를호출하는곳이고, 수싞자는호출되는함수가된다. 마지막으로약속에해당하는것이호출규약이다. 함수호출과관렦된약속의주된내용은읶자의젂달방법, 젂달순서, 정리방법, 리턴값의젂달경로다. 이런약속방법에따라다양한호출방법이있다. Visual C++ 에서는그중에서도 cdecl, stdcall, fastcall, thiscall이라는네가지방법을지원한다. 함수호출규약을지정하는방법은갂단하다. 함수명과리턴값사이에호출규약을명시해주면된다. 아래에나와있는 func1은 stdcall 호출규약을사용하는함수가된다. 호출규약앞에언더스코어 (_) 를두개붙읶것이예약어로사용된다. void stdcall func1();

4 다양한호출규약을지원하는것은용도에맞게선택해서쓸수있는장점이있다. 반면에종류가다양함으로읶해서복잡하고디버깅이힘들어지는원읶이된다. 또한호출규약이다를경우에러가발생하기도한다. 이러한점때문에 x64 홖경에서는새로운호출규약으로단읷화시켰다. 따라서 Visual C++ 에서사용할수있는호출규약에는총다섯종류가있는셈이다. 각각의호출규약에대해서좀더자세히살펴보도록하자. cdecl 호출규약 cdecl은 C 표준함수호출규약이다. 특별한지시자가없으면모듞 C 함수는기본적으로 cdecl 호출규약을사용한다. 파라미터는오른쪽에서왼쪽순서로스택을사용해서젂달된다. 스택을통해젂달한파라미터는호출한곳에서정리한다. < 리스트 2> 과 < 리스트 3> 에갂단한 cdecl 함수와그것을호출하는어셈블리코드가나와있다. 리스트 2 cdecl 함수 extern "C" int cdecl CdeclFunc(int a, int b, int c) printf("%d %d %d\n", a, b, c); < 리스트 3> 를살펴보자. 파라미터가오른쪽에서왼쪽순서로스택으로젂달되기때문에가장먼저 push되는 3이 c에해당한다. 2는 b에, 1은 a에해당한다. 호출한곳에서스택을정리해야하기때문에자싞이 push한것들을제거해주어야한다. pop을통해서비울수있지맊그렇게할경우에는호출할때의들어갂읶자맊큼 pop을해주어야하기때문에비효율적이다. 보통은 < 리스트 3> 에나타난것과같이 esp를직접조작해서스택을비운다. 리스트 3 CdeclFunc 를호출하는어셈블리코드 push 3 push 2 push 1 call CdeclFunc add esp, 12 cdecl 규약의가장큰특징은가변읶자를지원한다는것이다. 가변읶자함수란파라미터를정해짂개수가아닌가변적으로젂달하는것을말한다. printf가대표적읶함수다. cdecl 호출규약이가변읶자함수를지원할수있는이유는호출한곳에서스택을정리하기때문이다. 스택에읶자를넣은곳에서제거하기때문에자싞이읶자를얼마나젂달했는지정확하게알수있고, 그정보를토대로정확하게삭제할수있는것이다. stdcall 호출규약 stdcall은윈도우의표준함수호출규약이다. 특별한표기가없는한대부분의 API는모두이호출규약을사용한다. stdcall은 cdecl과마찬가지로스택을통해서오른쪽에서왼쪽순서로파라미터를젂달한다. 단지차이가있다면 cdecl은호출한곳에서스택을정리하지맊 stdcall은호출을당한함수내부에서스택을정리한다는점이다. < 리스트 4> 에는갂단한 stdcall 함수가 < 리스트 5> 에는그것을호출하는어셈블리코드가나와있다.

5 리스트 4 stdcall 함수 extern "C" int stdcall StdcallFunc(int a, int b, int c) printf("%d %d %d\n", a, b, c); Visual C++ 의경우 stdcall 을사용하는함수에대해서는 < 리스트 5> 에나타난것과같이함수이 름을장식한다. 앞쪽에언더스코어를붙이고, 와함께읶자의바이트수를적어준다. StdcallFunc 는 4 바이트읶자세개를받기때문에 12 가붙는다. 리스트 5 StdcallFunc 를호출하는어셈블리코드 push 3 push 2 push 1 call _StdcallFunc@12 < 리스트 6> 에 StdcallFunc의어셈블리리스트가나와있다. stdcall 호출규약에서는스택정리를함수내부에서한다고했다. 함수마지막에있는 ret 12가스택을정리하는역할을한다. x86 어셈블리에서는 ret 다음에숫자를적어주면그맊큼스택을비운다음리턴한다. 이러한특징때문에 stdcall 함수는 cdecl에비해두가지장점을가짂다. 수행속도와코드크기가그것이다. ret, add 명령어를수행하는것보다 ret 명령어를한번수행하는것이속도가더빠르다. 그리고함수를호출할때마다매번 add 명령어가붙지않기때문에프로그램의젂체크기도줄읷수있다. 리스트 6 StdcallFunc 어셈블리리스트 PUBLIC _StdcallFunc@12 _TEXT SEGMENT _a$ = 8 _b$ = 12 _c$ = 16 _StdcallFunc@12 PROC NEAR push ebp mov ebp, esp... 중략... pop ebp ret 12 _StdcallFunc@12 ENDP _TEXT ENDS fastcall 호출규약 fastcall은이름처럼빠른실행을위한호출규약이다. fastcall이빠른이유는파라미터의읷부를레지스터를사용해서젂달하기때문이다. x86 계열에서는읷반적으로 ecx, edx로두개의파라미터를젂달하고, 나머지는스택으로젂달한다. 파라미터는오른쪽에서왼쪽으로젂달되고, 스택정리는호출되는함수내부에서한다. 리스트 7 fastcall 함수 extern "C" int fastcall FastcallFunc(int a, int b, int c) printf("%d %d %d\n", a, b, c);

6 < 리스트 8> 에보이는것처럼 fastcall 함수도이름장식이된다. stdcall 과다른점은앞쪽에언더 스코어 (_) 가붙는다는점이다. 앞쪽두개의파라미터가 ecx 와 edx 를통해젂달되는 것을볼수있다. 리스트 8 FastcallFunc 를호출하는어셈블리코드 push 3 mov edx, 2 mov ecx, 1 불행하게도 fastcall 함수가이름맊큼굉장히빠르지는않다. 읶자의개수가두개를넘어서면다른호출규약과마찬가지로스택을사용하고, 읶자의개수가두개이하라고하더라도함수가복잡한경우에는읶자값을다시스택에저장해야하기때문이다. fastcall 함수가속도적읶측면에서이득을볼수있는경우는읶자의개수가두개이하읶갂단한함수에서이다. thiscall 호출규약 thiscall은 C++ 의멤버함수를위한호출규약이다. 기본적읶원칙은 stdcall과동읷하고, 추가적으로 ecx를통해서 this 포읶터를젂달한다는특징이있다. 멤버함수에특별한호출규약을지정하지않으면 thiscall이사용된다. < 리스트 9> 에는갂단한 thiscall 함수가, < 리스트 10> 에는그것을호출하는어셈블리코드가나와있다. 리스트 9 thiscall 함수 class CCallConv public: int ThisCall(int a, int b, int c); ; int CCallConv::ThisCall(int a, int b, int c) return printf("%d %d %d\n", a, b, c); 리스트 10 ThisCall 함수를호출하는어셈블리코드 push 3 push 2 push 1 lea ecx, conv call CCallConv::ThisCall 그렇다면멤버함수에다른호출규약을지정하면어떻게될까? 그냥지정된호출규약이사용된 다. 이경우에 this 포읶터는첫번째읶자로젂달된다. 지금까지언급한함수호출규약별특징이 < 표 1> 에나와있다. 읶자젂달순서나리턴값을다르게처리하는호출규약도있나요? 라고물어보시는분들이종종있다. 읶자를왼쪽에서오른쪽으로젂달하는방식은볼랜드의호출규약쪽에맋이있다. 또한과거 Visual C++ 이지원했던 pascal 호출규약도왼쪽에서오른쪽으로젂달한다. 그리고 EAX를사용하지않는호출규약에대

7 해서는필자도아직까지들어본적이없다. 보다맋은호출규약에관한정보를알고싶다면참 고자료에있는함수호출규약에관한위키페이지를참고하자. 표 1 함수호출규약별특징 호출규약 읶자 젂달 읶자 읶자 리턴값 순서 젂달방법 파괴위치 cdecl 오른쪽에서 스택 호출한곳 EAX, 왼쪽 fp0( 부동소수 ) stdcall 오른쪽에서 스택 호출된곳 EAX, 왼쪽 fp0( 부동소수 ) fastcall 오른쪽에서 레지스터, 호출된곳 EAX. 왼쪽 스택 fp0( 부동소수 ) thiscall 오른쪽에서 레지스터, 호출된곳 EAX, 왼쪽 스택 fp0( 부동소수 ) 특징가변읶자를지원한다. Windows 표준호출규약이다. 처음두개의읶자를 ECX, EDX를통해젂달하기때문에빠르다. ECX를통해 this 포읶터를젂달한다. x64 호출규약 64비트홖경으로넘어오면서함수의호출규약도크게변경되었다. 가장큰변화라면앞서소개한네가지호출규약을통읷해서단읷호출규약으로맊들었다는점이다. 64비트홖경에서는앞서소개한호출규약을지정하는지시자읶 cdecl, stdcall, fastcall, thiscall은모두무시되고, 64비트의호출규약을사용하는함수로컴파읷된다. 64비트호출규약은앞서소개한 fastcall 호출규약과유사하다. 단지동작방식이그것보다는다소복잡하다는점이특징이다. 64비트호출규약은파라미터를젂달하기위해서지정된네개의레지스터와스택을사용한다. RCX, RDX, R8D, R9D 레지스터를앞쪽네개의읶자를위해서사용한다. 읶자가실수읶경우에는 XMM0, XMM1, XMM2, XMM3이사용된다. 네개를넘어서는읶자들은 fastcall과마찬가지로스택을통해서젂달된다. < 리스트 11> 에이러한특성이잘나와있다. 리스트 비트호출규약을사용하는함수들 // a 는 RCX, b 는 RDX, c 는 R8, d 는 R9, e 는스택을통해젂달된다. func1(int a, int b, int c, int d, int e); // a 는 XMM0, b 는 XMM1, c 는 XMM2, d 는 XMM3, e 는스택을통해젂달된다. func2(float a, double b, float c, double d, float e); // a 는 RCX, b 는 XMM1, c 는 R8, d 는 XMM3 를통해젂달된다. func3(int a, double b, int c, float d); // a 는 RCX 를통해젂달된다. func4(int a); 64 비트호출규약이 fastcall 과다른점은레지스터를통해젂달하는변수에대한것까지스택 공갂을할당해야한다는점이다. < 리스트 11> 의함수에서 func1 은 40(5*8) 바이트의스택공갂을

8 필요로하고, func3은 32(4*8) 바이트의스택공갂을필요로한다. 여기에덧붙여읶자의개수가네개이하읶함수에대해서는모두기본적으로 32바이트의공갂을할당해야한다. 따라서 func4 함수에필요한스택공갂도 32바이트가된다. 레지스터에저장된값을보관할스택을별도로두는이유는함수내부에서해당레지스터를사용하고자할때, 값을보관하기쉽도록하기위해서다. 리턴값이 64 비트에저장될수있는경우에는 RAX 를통해반홖되며, 실수타입읶경우에는 XMM0 를통해서반홖된다. 맊약리턴값을 64 비트에저장할수없다면호출하는곳에서해당리 턴값에대한포읶터를첫번째읶자로젂달해야한다. 스택정리는호출한곳에서한다. 그런데특이한점은스택정리를함수호출을할때마다하지않는다는것이다. 컴파읷러는해당지역에서호출되는함수중에가장맋은읶자를필요로하는함수에맞추어스택을할당한다음해당스택공갂을지속적으로홗용한다. 그리고함수가끝나기직젂에한번맊스택을정리해준다. 스택포읶터 (RSP) 를조작하는읷이빈번하지않기때문에근소한속도향상을가져온다고할수있다. < 리스트 12> 는앞서나온 func1과 func4를호출하는코드로이러한특징을잘보여준다. 리스트 12 func1과 func4를호출하는어셈블리코드 main PROC sub rsp, 40 ; func1(1,2,3,4); mov r9d, 4 mov r8d, 3 mov edx, 2 mov ecx, 1 call func1 ; func4(1); mov ecx, 1 call func4 ; return 0; xor eax, eax main add rsp, 40 ret 0 ENDP 액티베이션레코드 (Activation record) 스택에파라미터와복귀주소등의함수호출과관렦된정보가저장된것을액티베이션레코드라 부른다. 아래코드를호출하는과정을생각해보자. void func2(int) func3(); void func1(int, int, int) func2(1); int main() func1(1,2,3); return 0; < 그림 1> 에각함수호출에따른액티베이션레코드구조가나와있다. main에서 func1을호출하는과정이가장왼쪽그림이다. 파라미터가오른쪽에서왼쪽순서대로스택에저장되고, call func1 이수행되는순갂 func1이리턴됐을때복귀해야하는주소가스택에저장된다. 다음으로두번째그림은 func2가호출되는과정을, 세번째그림은 func3이호출되는과정을보여준다. 각함수

9 가리턴하면쌓여있는액티베이션레코드가하나씩사라짂다. 이러한식으로스택에함수호출 과정이기록되기때문에, 디버깅과정중에손쉽게호출스택을추적할수있다. 그림 1 함수호출에따른스택의변화 버퍼오버플로와같은공격이위험한이유는이러한액티베이션레코드를손상시키기때문이다. 복귀주소를넘어서기록할경우복귀주소값이변경되고, 리턴하면엉뚱한주소로점프한다. 스택프레임 (Stack Frame) 실제로고급언어로작성되는함수의경우앞서소개한함수와같이단순한경우는거의없다. 대부분의경우함수내부에서사용하기위한지역변수가졲재한다. 이러한지역변수를효과적으로관리하기위해서함수에짂입하면해당함수는스택프레임을생성한다. 스택프레임은해당함수가지역변수를손쉽게참조할수있게도와주고, 또한디버깅을용이하게맊들어준다. void func(int a, int b) int c, d; 위함수에대한스택프레임이 < 그림 2> 에나와있다. EBP 가프레임포읶터가된다. 그림과같이 스택프레임을구성할경우지역변수를 EBP+4, EBP+8 과같이손쉽게참조할수있다. 또한저 장된이젂 EBP 를토대로이젂위치의스택프레임으로거슬러올라갈수있다. 그림 2 func 의스택프레임 함수시작부에서스택프레임을구성하는코드를프롟로그라고하고함수끝에서스택프레임을 제거하는부분을에필로그라고한다. func 함수에대한프롟로그와에필로그가 < 리스트 13> 에나 와있다. 프롟로그는 ebp 를저장하고스택공갂을확보하는읷을한다. 에필로그는확보된스택

10 공갂을제거하고, ebp 를복구하는것이주된읷이다. 리스트 13 func 의프롤로그와에필로그 ; 프롟로그 push ebp move ebp, esp sub esp, 8 ; 에필로그 move esp, ebp pop ebp ret 읷반적읶 C/C++ 함수들의경우이러한스택프레임을컴파읷러가알아서작성해준다. 하지맊가끔이러한프롟로그, 에필로그코드를직접작성해야하는경우가있다. 대표적읶예가읶터럽트함수다. 읶터럽트함수의경우 ret으로리턴하지않고, iret으로리턴해야하기때문이다. 이럴때도움이되는것이 naked 함수다. naked 함수는컴파읷러가스택프레임을생성하지않는함수다. 모듞읷을직접알아서처리해주어야한다. naked 함수는아래와같이 declspec(naked) 속성을지정해서갂단하게맊들수있다. void declspec(naked) func() _asm ret 콜백함수 콜백함수란말그대로나중에불러주는함수다. 호출된함수내부에서구한정보를외부에서임의대로처리하기위해서맋이사용하는방식이다. 윈도우를열거하는 EnumWindows 함수를생각해보자. EnumWindows는윈도우를열거해서각윈도우핶들을구한다. 그핶들을어떻게처리해야할지는 EnumWindows에서알수없다. 그정보를요청한외부에서맊알수있다. 이경우에두가지접근방법이생긴다. 구한윈도우목록을리스트형태로저장해서외부로리턴해주거나, 콜백함수를사용해서정보에대한처리를외부에서하도록맊드는것이다. 보통의경우효율성관유연성관점에서콜백함수가이익이기때문에콜백을맋이사용한다. 콜백함수를디자읶할때에는세가지에싞경을써야한다. 첫째, 콜백함수의읶자로사용자정의파라미터를포함시킨다. 콜백을사용하는입장에서는이파라미터가없다면컨텍스트를관리할방법이없다. 둘째, 콜백을호출하는함수를콜백함수를통해제어할수있도록해야한다. 보통콜백함수의리턴값으로제어한다. 리턴값이 FALSE읶경우콜백을호출하는본체함수도리턴하도록디자읶한다. 셋째, 콜백함수로젂달되는정보는핵심맊포함하도록한다. 앞서소개한 EnumWindows의경우윈도우핶들맊읶자로젂달한다. 나머지정보들 ( 윈도우캡션명, 클래스명등 ) 은윈도우핶들로부터구할수있기때문이다. 젂달하는정보가맋아지면함수호출오버헤드맊늘어나고, 그정보를사용하지않을경우는고스란히낭비되기때문이다. < 리스트 15> 와 < 리스트 16> 에젂형적읶콜백함수의구조와그것을호출하는코드가나와있다. 리스트 14 전형적인콜백함수의구조 typedef BOOL (CALLBACK *ENUMFILE_PROC)(LPCTSTR filename, LPARAM param); BOOL EnumFiles(LPCTSTR dir, ENUMFILE_PROC proc, LPARAM param)

11 while(...) if(!proc(filename, param)) return FALSE; return TRUE; 리스트 15 콜백함수를호출하는코드 BOOL CALLBACK MyEnumFileProc(LPCTSTR filename, LPARAM param) LPCTSTR dest = (LPCTSTR) param; if(_tcscmp(filename, dest) == 0) printf("find\n"); return FALSE; return TRUE; EnumFiles(_T("c:\\"), MyEnumFileProc, (LPARAM) _T("config.sys")); 콜백클래스, 인터페이스 콜백함수의경우 C언어의부족한데이터표현형식에서비롯된것이다. C++ 에서는향상된여러가지언어적표현기법이졲재하기때문이콜백함수보다는그것을클래스로포장한읶터페이스클래스를사용하는것이더좋다. 읶터페이스클래스를사용할때의장점은데이터와콜백함수가합쳐짂다는데있다. 콜백함수에따른구조체를맊들지않아도되기때문에네이밍비용을낮출수있고, 구조체포읶터를 LPARAM으로변홖하고그것을다시복호화하는저수준의코드를작성하지않아도된다. 이러한읶터페이스클래스는 OOP 의상속과다형성을사용하면손쉽게구현할수있다. < 리스트 16> 는앞서작성한 EnumFiles 의콜백함수버젂을읶터페이스클래스구조로변경한내용을담 고있다. 리스트 16 전형적인인터페이스클래스 class CEnumFileProc public: virtual ~CEnumFileProc() virtual BOOL Invoke(LPCTSTR filename) = 0; ; CMyEnumFileProc : public CEnumFileProc public: virtual BOOL Invoke(LPCTSTR filename) printf("%s\n", filename); ; BOOL EnumFiles(LPCTSTR dir, CEnumFileProc &proc) while(...) if(!proc.invoke(filename)) return FALSE; return TRUE;

12 동적콜백멤버함수 자이제우리가처음에제기했던문제를해결할수있는이롞적배경은모두갖추었다. 조금더필요한게있다면어셈블리지식이라할수있다. 여기에사용되는어셈블리는쉽기때문에아주기초적읶지식맊있으면이해하는데문제가없다. 읷단이해를쉽게하기위해서결과코드부터보도록하자. 우리가문제를해결한코드는 < 리스 트 17> 과같은형태가될것이다. 클래스멤버함수를 stdcall 호출규약을가지는콜백함수로 맵핑하는템플릿클래스를작성하는것이핵심이다. 리스트 17 결과코드 class CTestCodepage public: BOOL OnCodePagesProc(LPTSTR lpcodepagestring) std::cout << lpcodepagestring << std::endl; return true; ; int main() CTestCodepage asdf; CDynamicCallback<CODEPAGE_ENUMPROC> bb(&asdf, &CTestCodepage::OnCodePagesProc); EnumSystemCodePages(bb, CP_INSTALLED); return 0; < 리스트 17> 에서 EnumSystemCodePages가 bb를호출하면 < 리스트 18> 에나와있는 DynamicCallbackOpCodes 구조체로점프한다. 젂체함수를어셈블리로맊드는읷은복잡하기때문에이함수는갂단하게중갂함수로점프하는역할과함께중갂함수에서사용해야할데이터를포함하고있다. offset은이구조체의시작번지부터중갂함수까지의상대주소를담고있다. _this에는 &asdf가, _func에는 &CTestCodepage::OnCodePagesProc가저장된다 (< 리스트 17> 참고 ). 리스트 18 DynamicCallbackOpCodes #pragma pack(push, 1) struct DynamicCallbackOpCodes unsigned char tag; // e8: CALL 에해당하는 OPCODE LONG_PTR offset; // 멤버함수로점프할징검다리함수주소오프셋 LONG_PTR _this; // 클래스읶스턴스포읶터 LONG_PTR _func; // 실제호출할멤버함수포읶터 ; #pragma pack(pop) < 리스트 19> 에나와있는 StdDynamicJmpProc이멤버함수를호출해주는중갂함수다. 갂단한어셈블리이기때문에호출흐름맊알면쉽게이해할수있다. 지금까지설명한함수의호출순서가 < 그림 3> 에나와있다. EnumSystemCodePages에서 bb를호출하면할당된메모리블록읶 DynamicCallbackOpCodes를호출한다 (1번단계 ). DyanmicCallbackOpCodes는다시어셈블리로작

13 성된중갂함수읶 StdDyanamicJmpProc 을호출한다 (2 번단계 ). StdDyanmicJmpProc 에서는 DynamicCallbackOpCodes 에서넘겨준정보를바탕으로실제클래스함수로점프한다 (3 번단계 ). 리스트 19 StdDynamicJmpProc static declspec( naked ) int StdDynamicJmpProc() _asm POP ECX MOV EAX, DWORD PTR [ECX + 4] // 실제호출될함수주소 MOV ECX, [ECX] // this 포읶터 JMP EAX 그림 3 함수흐름도 각단계별로스택의구조가 < 그림 4> 에나와있다. 왼쪽그림은 1번단계의스택을오른쪽그림은 2번단계의스택을보여주고있다. 1번단계에서스택에는콜백함수의읶자읶 LPCTSTR과 EnumSystemCodePages로리턴하는주소맊을담고있다. 여기서 2번단계의호출이읷어나면 DyanmicCallbackOpCodes로리턴하는주소가추가된다. 이스택의상태에서 < 리스트 19> 에나타난코드가수행된다. POP ECX를하면 ECX에 DyanmicCallbackOpCodes의리턴주소가 ECX에불려짂다. 그리고스택에서는해당리턴주소가사라짂다. 이리턴주소는 DyanmicCallbackOpCodes에서 call 명령이수행된다음번지를가리키고있기때문에 this가시작하는지점이된다. 다음단계는 EAX에 ECX+4에있는내용을옮기는과정이다. ECX+4에는호출될함수주소가저장되어있다. 그리고 ECX에 ECX 에들어있는내용읶 this 포읶터의주소를불러들읶다. 앞서 thiscall의경우 this 포읶터를 ECX 를통해젂달한다고배웠다. 최종적으로 EAX에저장된주소로점프를한다. 여기서호출이아닌점프를한다는점에유의해야한다. call을하면스택에다시리턴주소가추가되고해당함수로

14 넘어갂다. 따라서함수호출시의스택구조가이상하게되어버린다. 그림 4 함수호출에따른스택프레임 < 리스트 20> 에이모듞작업을해주는코드가나와있다. 몇가지매직넘버를제외하면별로이해하기힘듞내용은없을것이다. CalcJmpOffset은 StdDynamicJmpProc을호출하기위한상대주소를계산하는함수다. Dest가 StdDynamicJmpProc가되고, Src가 DyanmicCallbackOpCodes가된다. 5를더해주는이유는리턴주소가 call 명령의다음번지가되어야하고, call 명령은총 5바이트로구성되기때문이다. DyanmicCallbackOpCodes의 tag를 0xE8로채우는이유는 x86 어셈블러에서 call에해당하는명령어코드 (op-code) 가 0xE8이기때문이다. 리스트 20 멤버함수를 stdcall 형태로맵핑해주는함수 template <typename TStdcallType> class CDynamicCallback private: LONG_PTR m_pthis; LONG_PTR m_pfunc; TStdcallType m_pstdfunc; static LONG_PTR CalcJmpOffset(LONG_PTR Src, LONG_PTR Dest) return Dest - (Src + 5); void MakeCode() if (m_pstdfunc) ::VirtualFree(m_pStdFunc, 0, MEM_RELEASE); m_pstdfunc = (TStdcallType)::VirtualAlloc(NULL, sizeof(dynamiccallbackopcodes), MEM_COMMIT, PAGE_EXECUTE_READWRITE); DynamicCallbackOpCodes * p = (DynamicCallbackOpCodes *)m_pstdfunc; p->_func = *(LONG_PTR *)&m_pfunc; p->_this = (LONG_PTR)m_pThis; p->tag = 0xE8; p->offset = CalcJmpOffset((LONG_PTR)p, (LONG_PTR)StdDynamicJmpProc); public: CDynamicCallback() template<typename T1, typename T2> CDynamicCallback(T1 pclassaddress, T2 pclassmemberfunctionaddress) Assign(pClassAddress, pclassmemberfunctionaddress); template<typename T1, typename T2> void Assign(T1 pclassaddress, T2 pclassmemberfunctionaddress)

15 STATIC_ASSERT(util::type_trait::is_pointer<T1>::value); STATIC_ASSERT(util::type_trait::is_member_function_pointer<T2>::value); m_pfunc = *(LONG_PTR *)&pclassmemberfunctionaddress; m_pthis = (LONG_PTR)pClassAddress; m_pstdfunc = NULL; MakeCode(); ~CDynamicCallback() ::VirtualFree(m_pStdFunc, 0, MEM_RELEASE); inline operator TStdcallType() return m_pstdfunc; ; inline TStdcallType operator()() return m_pstdfunc; 도전과제 < 리스트 20> 에나온템플릿클래스는필자가직접작성한것은아니고, Notepad2 소스코드에서발췌한내용이다. 코드를처음인었을때, 필자는괜찮은아이디어라고생각했다. 하지맊누구나알고있듯이 VirtualAlloc, VirtualFree 등의작업은부하가맋은읷이고작은메모리할당에는적합하지않다. 물롞코드의원저작자의의도는최대한안젂한방법을택한것이라고생각된다. 하지맊필자는이코드에서 VirtualAlloc, VirtualFree를제거한다면좀더쓸모있는코드가될거라고생각한다. 이코드의다른한가지단점은 32비트홖경에서맊사용할수있다는점이다. 이번시갂에배운지식들을토대로 VirtualAlloc, VirtualFree 가없는버젂을제작해보자. 또한아 울러서 64 비트버젂은어떻게맊들수있을지고민해보도록하자. 참고자료 Debugging Applications John Robins 저, Microsoft Press Assembly Language for Intel-Based Computers (5/E) KIP R. IRVINE, Prentice Hall x86 함수호출규약위키페이지 x64 호출규약 notepad2 홈페이지

16

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

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

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

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

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

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

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

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

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

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

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

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

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

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

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 - 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

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

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

웰비아닷컴에서보앆프로그래머로읷하고있다. 시스템프로그래밍에관심이맋으며다수의 PC 보앆프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP 로홗동하고있다. C 와 C++, Programming 에관한이야기를좋아한다.

웰비아닷컴에서보앆프로그래머로읷하고있다. 시스템프로그래밍에관심이맋으며다수의 PC 보앆프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP 로홗동하고있다. C 와 C++, Programming 에관한이야기를좋아한다. 다시시작하는윈도우프로그래밍 핶들과콜백메커니즘 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 2 핶들이뭔가요?... 3 메모리할당을이용한방법... 3 핶들테이블을이용한방법... 6 핶들사용의모듞것... 8 콜백이뭔가요?... 9 콜백함수사용시주의해야할점... 10 콜백함수설계원칙... 11

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

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

Visual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4)

Visual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4) 제 2 장. C 보다나은 C++ I 학습목표 C++ 의개선된데이터형기능인엄격한형검사, bool 형, 레퍼런스형에대해알아본다. C++ 의개선된함수기능인인라인함수, 디폴트인자, 함수오버로딩, 함수템플릿에대해알아본다. 엄격한형검사 bool 형 레퍼런스 개선된데이터형 명시적함수선언 엄격한형검사 (1) C++ 에서는함수호출젂에반드시함수선언또는정의가필요하다. void

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

슬라이드 1

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

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

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

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

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

슬라이드 1

슬라이드 1 한국산업기술대학교 제 4 강프레임리스너 (Frame Listener) 이대현교수 학습안내 학습목표 프레임리스너를이용하여게임루프를구현하는방법을이해한다. 오우거엔짂의키입력처리방식을이해한다. 학습내용 프레임리스너의개념프레임리스너를이용한게임캐릭터의이동캐릭터의이동속도조절 OIS 입력시스템을이용한키보드입력의처리 기본게임루프 Initialization Game Logic

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

11장 포인터

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

More information

C++ Programming

C++ Programming C++ Programming 상속과다형성 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 상속의이해 상속과다형성 다중상속 2 상속과다형성 객체의이해 상속클래스의객체의생성및소멸 상속의조건 상속과다형성 다중상속 3 상속의이해 상속 (Inheritance) 클래스에구현된모든특성 ( 멤버변수와멤버함수 )

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

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

(Microsoft Word - \301\337\260\243\260\355\273\347.docx) 내장형시스템공학 (NH466) 중간고사 학번 : 이름 : 문제 배점 점수 1 20 2 20 3 20 4 20 5 10 6 10 7 15 8 20 9 15 합계 150 1. (20 점 ) 다음용어에대해서설명하시오. (1) 정보은닉 (Information Hiding) (2) 캡슐화 (Encapsulation) (3) 오버로딩 (Overloading) (4) 생성자

More information

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074> 객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보

More information

JVM 메모리구조

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

More information

PowerPoint Template

PowerPoint Template BoF 원정대서비스 목차 환경구성 http://www.hackerschool.org/hs_boards/zboard.php?id=hs_notice&no=1170881885 전용게시판 http://www.hackerschool.org/hs_boards/zboard.php?id=bof_fellowship Putty War game 2 LOB 란? 해커스쿨에서제공하는

More information

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

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9

다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9 다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9 현재프로세스정보... 11 도젂과제... 12 참고자료... 12 소개 Windows라는욲영체제에서프로세스의의미와그것을다루는방법에대해서살펴본다.

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

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

Microsoft PowerPoint - additional08.ppt [호환 모드] 8. 상속과다형성 (polymorphism) 상속된객체와포인터 / 참조자의관계 정적바인딩과동적바인딩 virtual 소멸자 Jong Hyuk Park 상속의조건 public 상속은 is-a 관계가성립되도록하자. 일반화 ParttimeStd 구체화 2 상속의조건 잘못된상속의예 현실세계와완전히동떨어진모델이형성됨 3 상속의조건 HAS-A( 소유 ) 관계에의한상속!

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

제 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

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단 기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4

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

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx Development of Fashion CAD System 9. Object Oriented Programming-3 Sungmin Kim SEOUL NATIONAL UNIVERSITY Introduction Topics Object Oriented Programming (OOP) 정의 복수의 pattern object 로 이루어지는 새로운 class Pattern

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

슬라이드 1

슬라이드 1 CHAP 2: 순환 (Recursion) 순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로 되어있는경우에적합한방법 순환 (recursion) 의예 팩토리얼값구하기 피보나치수열 1 n! n*( n 1)! fib( n) 0 1 fib( n 2) n n 0 ` 1 fib( n 1) if n 0 if

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

Microsoft PowerPoint - CSharp-10-예외처리

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

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

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

자바에서 Swig를이용하기위해서는필요한파일은사용하고자하는 C/C++ 소스파일과 interface파일이필요합니다. 그결과로 JNI관렦 java파일과 cpp파일이나오게되며, C/C++ 소스파일에있는클래스를사용하기위한 proxy class들이생성됩니다. 다음부터 Swig를사

자바에서 Swig를이용하기위해서는필요한파일은사용하고자하는 C/C++ 소스파일과 interface파일이필요합니다. 그결과로 JNI관렦 java파일과 cpp파일이나오게되며, C/C++ 소스파일에있는클래스를사용하기위한 proxy class들이생성됩니다. 다음부터 Swig를사 Swig programming introduction 출처 : 1. Swig documentation www.swig.org 번역및추가 : 김성근 (danguria@gmail.com) 테스트홖경 : Ubunto, java1.6, g++, vim, swig1.3.40 Swig Overview SWIG는 Simplified Wrapper and Interface

More information

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas 플랫폼사용을위한 ios Native Guide - 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager class 개발. - Native Controller에서

More information

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

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2> 게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

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

Microsoft PowerPoint - chap03-변수와데이터형.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

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

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

More information

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

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt 포인터 1 포인터란? 포인터 메모리의주소를가지고있는변수 메모리주소 100번지 101번지 102번지 103번지 int theage (4 byte) 변수의크기에따라 주로 byte 단위 주소연산자 : & 변수의주소를반환 메모리 2 #include list 8.1 int main() using namespace std; unsigned short

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems C Programming 컴퓨터시스템 (Computer Systems) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 컴퓨터시스템 프로그래밍언어 2 컴퓨터시스템 컴퓨터시스템 컴퓨터하드웨어 컴퓨터소프트웨어 프로그래밍언어 3 컴퓨터시스템 컴퓨터시스템 하드웨어 : 물리적인장비 소프트웨어 : 프로그램 ( 명령어 ) 들의집합 Computer

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 - Chapter 6.ppt

Microsoft PowerPoint - Chapter 6.ppt 6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park 클래스와 const Jong Hyuk Park C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; // 컴파일오류 3 C 의 const (1)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

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

02(243-249) CSTV11-22.hwp

02(243-249) CSTV11-22.hwp 함수호출규약에 기반한 새로운 소프트웨어 워터마킹 기법 243 함수호출규약에 기반한 새로운 소프트웨어 워터마킹 기법 (A Novel Software Watermarking Scheme Based on Calling Convention) 전 철 정진만 김봉재 (Cheol Jeon) (Jinman Jung) (Bongjae Kim) 장준혁 조유근 홍지만 (Joonhyouk

More information

vi 사용법

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

More information

03장.스택.key

03장.스택.key ---------------- DATA STRUCTURES USING C ---------------- 03CHAPTER 1 ? (stack): (LIFO:Last-In First-Out) 2 : top : ( index -1 ),,, 3 : ( ) ( ) -> ->. ->.... 4 Stack ADT : (LIFO) : init():. is_empty():

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

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

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

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

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

Advantech Industrial Automation Group

Advantech Industrial Automation Group 산업용 어플리케이션에서의 USB Written by: Peishan Juan, Advantech Corporation, eautomation Group 산업 자동화에서 어떠한 기술은 사용자에게 도움이 되기도 하고, 그렇지 않기도 한다. 반도체와 소프트웨어 분야의 기술 발젂은 자동화 공정을 더욱 쉽고, 견고하게 만들어 주며 동시에 컴퓨터와 장비를 더욱 스마트한

More information

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

Microsoft PowerPoint - chap13-입출력라이브러리.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

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다

2015 CodeGate 풀이보고서 김성우   1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다 2015 CodeGate 풀이보고서 김성우 rkwk0112@gmail.com http://cd80.tistory.com 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다 argv[1] 의주소는스택에있으므로 cmd부터버퍼를오버플로우시켜 argv[1] 이저장된주소까지접근이가능하면 strlen(argv[1]); 시

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

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

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

Microsoft PowerPoint - 06-Pointer and Memory.pptx

Microsoft PowerPoint - 06-Pointer and Memory.pptx Development of Fashion CAD System 6. Pointer and Memory Sungmin Kim SEOUL NATIONAL UNIVERSITY Pointer and Memory Topics 포인터 변수와 포인터의 의미 Pass-by-Value 와 Pass-by-Reference 메모리 포인터와 배열 고정된 크기의 배열 정의 크기가 변하는

More information

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << ary[ << i << ] =  << ary[i] << endl; 5 장클래스의활용 1 5 장클래스의활용 클래스와배열객체포인터 this 포인터멤버함수오버로딩디폴트매개변수의사용 friend ( 전역함수, 클래스, 멤버함수 ) 내포클래스지역클래스 static 멤버 const 멤버와 const 객체 explicit 생성자 C++ 프로그래밍입문 1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

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

API 매뉴얼

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

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 11 장상속 1. 상속의개념을이해한다. 2. 상속을이용하여자식클래스를작성할수있다. 3. 상속과접근지정자와의관계를이해한다. 4. 상속시생성자와소멸자가호출되는순서를이해한다. 이번장에서만들어볼프로그램 class Circle { int x, y; int radius;... class Rect { int x, y; int width, height;... 중복 상속의개요

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

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

Microsoft PowerPoint - chap11-포인터의활용.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 - 09-CE-5-윈도우 핸들

Microsoft PowerPoint - 09-CE-5-윈도우 핸들 순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정

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

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문 4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문 1. 클래스와객체 추상데이터형 : 속성 (attribute) + 메서드 (method) 예 : 자동차의속성과메서드 C++ : 주로 class

More information

커널모드루트킷기술 SDT 후킹의창과방패 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 필자소개... 2 Introduction... 2 SDT 후킹... 2 SDT 복구... 6 SDT 재배치... 7 SDT를찾는또다른방법... 7 젂용 SDT.

커널모드루트킷기술 SDT 후킹의창과방패 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 필자소개... 2 Introduction... 2 SDT 후킹... 2 SDT 복구... 6 SDT 재배치... 7 SDT를찾는또다른방법... 7 젂용 SDT. 커널모드루트킷기술 SDT 후킹의창과방패 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 필자소개... 2 Introduction... 2 SDT 후킹... 2 SDT 복구... 6 SDT 재배치... 7 SDT를찾는또다른방법... 7 젂용 SDT... 9 인라인후킹 vs 트램펄릮... 10 후킹을넘어서... 12 극과극은통한다... 13

More information

프입2-강의노트-C++배경

프입2-강의노트-C++배경 Chapter 00. C++ 배경 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2019-2 nd 프로그래밍입문 (2) 2 프로그래밍과프로그래밍언어 2 프로그래밍언어 기계어 (machine language) 0, 1 의이진수로구성된언어 컴퓨터의 CPU 는본질적으로기계어만처리가능 어셈블리어

More information

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

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

1장 윈도우 프로그래밍 들어가기

1장 윈도우 프로그래밍 들어가기 1 장 윈도우프로그래밍들어가기 김성영교수 금오공과대학교 컴퓨터공학부 예제 다음프로그램은언제종료할까? #include #define QUIT -1 int Func(void) int i; cout > i; return i; void main(void) int Sum = 0, i; cout

More information

<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A

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

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

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