Microsoft Word - hook4.doc

Size: px
Start display at page:

Download "Microsoft Word - hook4.doc"

Transcription

1 개발자를위한윈도우후킹테크닉 SendMessage 후킹하기 지난시간에 WH_GETMESSAGE 훅을통해서메시큐에서메시지가처리되는과정을후킹해보았다. 이번시간에는 WH_CALLWNDPROC, WH_CALLWNDRETPROC 훅을통해서 SendMessage 의처리과정을후킹하는방법과다수의훅프로시저를설치한경우에동기화하는방법에대해서설명할것이다. 목차 목차...1 필자소개...1 연재가이드... 오류! 책갈피가정의되어있지않습니다. 연재순서... 오류! 책갈피가정의되어있지않습니다. 필자메모...2 Intro...2 SendMessage 는어떻게동작할까?...3 메시지처리순서...3 무한대기에빠지지않는법...4 WH_CALLWNDPROC 훅...5 WH_CALLWNDRETPROC 훅...6 다수의훅을설치해보자...7 동기화 이벤트객체 동기화프로토콜 중복실행방지 도전과제 참고자료 필자소개 신영진 부산대학교정보, 컴퓨터공학부 4 학년에재학중이다. 모자란학점을다채워서졸업하는것이꿈이되버린소박한괴짜프로그래머. 병역특례기간을포함해서최근까지다수의보안프로그램개발에참여했으며, 최근에는모짜르트에심취해있다.

2 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : 마이크로소프트비주얼스튜디오 2003 기초지식 : C/C++, Win32 프로그래밍응용분야 : 메시지모니터링프로그램 연재순서 키보드모니터링프로그램만들기 마우스훅을통한화면캡쳐프로그램제작 메시지훅이용한 Spy++ 흉내내기 SendMessage 후킹하기 Spy++ 클론 imspy 제작하기 저널훅을사용한매크로제작 WH_SHELL 훅을사용해다른프로세스윈도우서브클래싱하기 WH_DEBUG 훅을이용한훅탐지방법 OutputDebugString 의동작원리 필자메모 필자가처음 Visual C++ 을공부한것은 2000 년도였다. 이상엽님의기념비적인저서 Visual C Bible 을사들고집에서공부하고있었다. 그러나사실그책은처음 Visual C++ 을접한독자가이해하기에너무도어려웠다. 필자가처음버튼의이벤트핸들러에다정확한코드를집어넣는데만도한참의시간의걸렸다. 아마선배한테물어봤으면 3 초만에배웠을것을물어보지않아서몇날몇일을고생한것이다. 독자여러분들은필자와똑같은실수를되풀이하지않기를바란다. 필자의메일함 (pop@jiniya.net) 은독자여러분의질문에답하기위해서 24 시간열려있다. 그러니강좌에서모르는부분이나의문점이생기면언제든지메일을통해서질문하도록하자. 또한블로그 ( 를통해서지면관계상못한이야기나설명이잘못된부분에대한내용을제공하고있으니그곳도참고하면공부에도움이될것같다. Intro Windows 의응용프로그램이가장많이사용하는함수하나를꼽으라면아마도 SendMessage 가될것이다. 왜냐하면대부분의 Windows 응용프로그램이 GUI 기반이고, GUI 프로그램의경우필연적으로메시지를기반으로동작하기때문이다. 또한 2/17 페이지

3 SendMessage 의경우동기화문제때문에 PostMessage 나다른함수보다많이사용된다. 이번시간에는이러한 SendMessage 의호출과정을후킹해보도록하자. SendMessage 는어떻게동작할까? SendMessage 의경우같은쓰레드의윈도우로메시지를보내는지아니면다른쓰레드에의해서생성된윈도우로메시지를보내는지에따라동작방식이조금다르다. 우선같은쓰레드의윈도우로메시지를보내는경우에는 SendMessage 는해당메시지프로시저를직접호출하고리턴값을반환한다. 이과정은직접함수를호출하는것과다를바가없다. 다른쓰레드에의해생성된윈도우로메시지를보내는경우에는메시지를받을윈도우를생성한쓰레드의메시지큐에메시지를추가하고해당큐의 QS_SENDMESSAGE 플래그를설정한다. 그리고는자신의응답메시지큐에응답이오기를기다린다. 만약이과정에서메시지를받는윈도우가무한루프나기타상황으로메시지를처리할수없는상황이라면 SendMessage 를호출한쪽의쓰레드도같이잠기게된다. 메시지처리순서 SendMessage 도단순히메시지큐에메시지를추가하는것이라면어떻게 PostMessage 보다먼저처리되는것일까? 이에대한해답은윈도우가메시지를검사하는알고리즘에있다. 쓰레드의메시지큐를조작하는함수로는 GetMessage 와 PeekMessage 가있다. 이함수들은메시지큐를무작위적으로검사하지않는다. 아래와같은순서에따라서메시지큐를검사한다. 1. QS_SENDMESSAGE 플래그가설정되어있으면해당메시지를적절한윈도우프로시저로보낸다. 이작업후에함수는리턴하지않고계속다음메시지를기다린다. 2. 포스트메시지큐에메시지가있으면인자로전달된 MSG 구조체에해당메시지정보를복사한후리턴한다. 3. QS_QUIT 플래그가설정되어있으면 WM_QUIT 메시지를리턴하고, QS_QUIT 플래그를제거한다. 4. 하드웨어입력큐에메시지 (WM_KEYDOWN, WM_LBUTTONDOWN, ) 가있다면 MSG 구조체에해당메시지정보를복사한후리턴한다. 5. QS_PAINT 플래그가설정되어있으면 WM_PAINT 메시지를리턴한다. 6. QS_TIMER 플래그가설정되어있으면 WM_TIMER 를리턴한다. 3/17 페이지

4 쉽게말하면 SendMessage 로전달된메시지, PostMessage 로전달된메시지, PostQuitMessage 로전달된메시지, 하드웨어입력메시지, WM_PAINT 메시지, WM_TIMER 메시지의순으로처리된다는것이다. 이를통해서 PostMessage 보다늦게메시지큐에포스트된 SendMessage 가왜먼저처리되는지를알수있다. WM_KEYDOWN, WM_CHAR, WM_KEYUP 의처리순서도위의알고리즘을통하면쉽게이해할수있다. 기본적으로사용자가키보드를눌렀다떼게되면 WM_KEYDOWN, WM_KEYUP 이하드웨어입력메시지큐에추가된다. WM_KEYDOWN 이 TranslateMessage 를통하면적절한형태의 WM_CHAR 메시지가 PostMesage 로큐에추가된다. 물론이과정에서 WM_CHAR 가 WM_KEYUP 보다늦게추가되었지만위의알고리즘의우선순위판정에의해서다음번처리되는메시지는 WM_CHAR 가되는것이다. 무한대기에빠지지않는법 SendMessage 를사용할경우메시지를받는대상윈도우의쓰레드가무한루프에빠진경우라면같이블록되는단점이있다. 이를사전에알아내거나차단하는방법과관련된함수들을간단하게살펴보도록하자. 함수의파라미터와리턴값에대한자세한설명은 MSDN 을참고하자. BOOL IsHungAppWindow(HWND hwnd); 위함수를사용하면 SendMessage 를보낼대상윈도우가현재메시지를처리할수있는지없는지를알수있다. TRUE 를리턴하는경우는해당윈도우가더이상메시지를처리할수없음을의미한다. 따라서이경우에 SendMessage 를호출하지않으면무한대기에빠지는문제를방지할수있다. 하지만이렇게하더라도 SendMessage 의메시지루프에서무한대기에빠지는경우는해결책이없다. LRESULT SendMessageTimeout( ); BOOL SendMessageCallback( ); 위두함수를사용하면어떠한상태의교착상황도피할수있다. SendMessageTimeout 의 경우는타임아웃시간을지정해서해당시간이지날경우자동으로리턴한다. 두번째 함수는호출하는즉시리턴하고, 메시지가완료된것은콜백을통해서알수있다. BOOL SendNotifyMessage( ); BOOL ReplyMessage(LRESULT lresult); BOOL InSendMessage(VOID); DWORD InSendMessageEx(LPVOID lpreserved); 4/17 페이지

5 위의함수들은자주사용하지는않지만알아두면유용한함수들이다. SendNotifyMessage 의경우는다른쓰레드로보낼경우바로리턴하고같은쓰레드에서생성한윈도우로보낼경우에는 SendMessage 와동일한역할을하는함수다. ReplyMessage 는메시지함수가처리가완료되지않은시점에서 SendMessage 의리턴값을전송하는역할을한다. InSendMessage 와 InSendMessageEx 함수는서로다른쓰레드간의메시지전송이면 TRUE 를같은쓰레드간의메시지전송이면 FALSE 를리턴하는함수다. WH_CALLWNDPROC 훅 WH_CALLWNDPROC 훅은 SendMessage 를호출하는시점을후킹한다. 즉, 이는 SendMessage 가메시지프로시저로전달되어서처리되기전시점을후킹하는것을의미한다. Spy++ 을보면 SendMessage 로전달된메시지에대해서 S,R 플래그가나오는것을볼수있다 ( 화면 1 참고 ). S 의경우 WH_CALLWNDPROC 을통해서 SendMessage 를호출하는시점에표시하는것이고, R 은다음장에소개되는 WH_CALLWNDRETPROC 을통해서 SendMessage 가리턴되는시점에표시하는것이다. 화면 1 Spy++ 을통해서 SendMessage 과정을모니터링한화면 LRESULT CALLBACK CallWndProc(int code, WPARAM wparam, LPARAM lparam); code [ 입력 ] code 값이 HC_ACTION 인경우훅프로시저를수행하고, 0 보다작은경우에는 훅프로시저를수행하지않고 CallNextHookEx 를호출한다음리턴해야한다. 5/17 페이지

6 wparam [ 입력 ] 메시지가현재쓰레드에의해서보내진것인지아닌지를나타낸다. 현재쓰레드에의해서보내진경우 0 이아닌값을가지고, 그렇지않은경우 0 으로설정된다. lparam [ 입력 ] SendMessage 와관련된정보를담고있는 CWPSTRUCT 구조체의포인터를담고있다. CWPSTRUCT 는아래와같은형태를하고있다. 구조체의필드별의미는 < 표 1> 을참고하자. typedef struct LPARAM lparam; WPARAM wparam; UINT message; HWND hwnd; CWPSTRUCT, *PCWPSTRUCT; 표 1 CWPSTRUCT 구조체필드별의미 필드명 hwnd message wparam lparam 의미메시지받을윈도우핸들메시지 ID 메시지 WPARAM 파라미터메시지 LPARAM 파라미터 리턴값 : code 가 0 보다작은경우에는 CallNextHookEx 의리턴값을그대로리턴해야 한다. 그렇지않은경우에도 CallNextHookEx 의리턴값을그대로사용하는것이좋다. CallNextHookEx 를통해서다음훅체인을호출하지않은경우엔 0 을리턴해야한다. WH_CALLWNDRETPROC 훅 WH_CALLWNDRETPROC 훅은 SendMessage 가처리되고리턴되는시점을후킹한다. 따라서메시지가처리되고난후어떤값이리턴되는지를알수있다. LRESULT CALLBACK CallWndRetProc(int code, WPARAM wparam, LPARAM lparam); code [ 입력 ] code 값이 HC_ACTION 인경우훅프로시저를수행하고, 0 보다작은경우에는훅프로시저를수행하지않고 CallNextHookEx 를호출한다음리턴해야한다. wparam [ 입력 ] 메시지가현재프로세스의해서보내진것인지아닌지를나타낸다. 현재프로세스에의해서보내진경우 0 이아닌값을가지고, 그렇지않은경우 0 으로설정된다. lparam [ 입력 ] SendMessage 의리턴정보를담고있는 CWPRETSTRUCT 구조체의포인터를담고있다. CWPRETSTRUCT 는아래와같은형태를하고있다. 구조체의필드별의미는 < 표 2> 를참고하자. 6/17 페이지

7 typedef struct LRESULT lresult; LPARAM lparam; WPARAM wparam; UINT message; HWND hwnd; CWPRETSTRUCT, *PCWPRETSTRUCT; 표 2 CWPRETSTRUCT 구조체필드별의미 필드명 hwnd message wparam lparam lresult 의미메시지받을윈도우핸들메시지 ID 메시지 WPARAM 파라미터메시지 LPARAM 파라미터 SendMessage 리턴값 WH_CALLWNDRETPROC 훅의리턴값은 WH_CALLWNDPROC 의리턴값과동일하다. 박스 1 메시지차단첫시간에작성한키보드후킹프로그램에서우리는후킹프로시저에서 1 을리턴함으로써키보드메시지가호출되지않도록할수있다고배웠다. 하지만그것은어디까지나 WH_KEYBOARD 에국한된이야기다. 이번시간에배운 WH_CALLWNDPROC, WH_CALLWNDRETPROC 모두 CallNextHookEx 를호출하지않는다고해서해당메시지호출이중지되지않는다. 단지 CallNextHookEx 를호출하지않게되면다음번훅프로시저가수행되지않을뿐이다. 따라서 WH_CALLWNDPROC 이나 WH_CALLWNDRETPROC 을이용해서는 SendMessage 의진행을모니터링할수는있지만작업을중간에수정할수는없다. 다수의훅을설치해보자 우리는이제껏하나의훅프로시저를설치하는프로그램만작성했었다. 하지만때로는하나의훅이아닌여러개의훅을동시에설치해야하는경우가있다. Spy++ 이그러한대표적인경우라할수있다. Spy++ 의경우여러개의윈도우의메시지전송과정을동시에모니터링할수있다. 이러한기능을제공하기위해서는여러개의훅을설치하고제거할수있도록만들필요가있다. 물론전역으로훅을설치할경우그러한고민을하지않아도된다. 하지만 WH_GETMESSAGE, WH_CALLWNDPROC, WH_CALLWNDPROCRET 등의훅을전역으로설치하면시스템이굉장히느려질수있다는점을기억해야한다. 7/17 페이지

8 여러개의훅을설치하고제거하는부분은추후에도사용하기편리하도록별도의 dll 로 제작했다. 앞으로훅에필요한유틸리티함수들은 hkutil.dll 에추가해서사용하도록하자. < 리스트 1> 에는훅의설치와제거에사용될구조체와 DllMain 부분이나와있다. HOOKINFO 구조체는훅정보를관리한다. 사실별도로관리할필요는없지만추후에필요할수도있기때문에저장해놓기로했다. 또한 RegisterHook 을통해서설치한훅핸들만추후에제거할수있도록하기위해서도어떤것들을설치되었는지는알고있어야한다. 설치된훅종류와해당훅을설치한쓰레드아이디가저장된다. 이렇게저장된정보는설치된훅핸들과연관지어서 g_hookmap 에저장된다. DllMain 은간단한두가지처리를해주고있다. 포로세스에로드될때에 DisableThreadLibraryCalls 를호출해서쓰레드에로드되는부분을호출하지않도록한다. 또한프로세스에서언로될때에 g_hookmap 에서제거되지않은훅핸들이있으면제거해준다. 리스트 1 훅정보구조체및 DllMain 코드 // 훅정보 typedef struct _HOOKINFO int hookid; // 훅종류 DWORD threadid; // 훅이설치된쓰레드 HOOKINFO, *PHOOKINFO; typedef std::map<hhook, HOOKINFO> HookMap; typedef std::map<hhook, HOOKINFO>::iterator HookMIt; // 훅정보를저장할맵 HookMap g_hookmap; BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID) try switch(reason) // 쓰레드에대한호출을하지않는다. case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(inst); break; // 종료시제거되지않고남아있는훅핸들을해제한다. case DLL_PROCESS_DETACH: 8/17 페이지

9 for(hookmit it=g_hookmap.begin(); it!=g_hookmap.end(); ++it) UnhookWindowsHookEx(it->first); break; except(exception_execute_handler) return FALSE; return TRUE; < 리스트 2> 는 RegisterHook 함수의코드를보여준다. 이함수는훅을등록하는역할을한다. 기본적으로 SetWindowsHookEx 와동일한순서의파라미터를가진다. 단지차이점이라면훅함수와모듈명대신에훅함수명과 dll 이름을파라미터로가진다는것이다. 간단하게 LoadLibrary 로 dll 을로드한후 GetProcAddress 로함수주소를구해서해당정보를토대로 SetWindowsHookEx 를호출하는간단한코드다. 성공적으로추가된경우에는해당정보를전역변수인 g_hookmap 에저장해서나중에제거할수있도록한다. 리스트 2 RegisterHook 코드 /*-- 훅을등록한다. 파라미터 hookid - [ 입력 ] 훅타입 (WH_KEYBOARD, WH_MOUSE,...) functionname - [ 입력 ] 훅프로시저이름 dllname - [ 입력 ] 훅프로시저를담고있는 dll 이름 threadid - [ 입력 ] 훅을설치할쓰레드 ID 리턴값 - 실패시 NULL, 성공시훅핸들 --*/ HHOOK WINAPI RegisterHook(int hookid, LPCTSTR functionname, LPCTSTR dllname, DWORD threadid) HINSTANCE dll = NULL; // dll 핸들 HOOKPROC func = NULL; // 훅프로시저함수포인터 HHOOK hook = NULL; // 훅핸들 try // dll 을로드한다. dll = LoadLibrary(dllName); if(!dll) 9/17 페이지

10 leave; // 훅프로시저를로드한다. func = (HOOKPROC) GetProcAddress(dll, functionname); if(!func) leave; // 훅을수행한다. hook = SetWindowsHookEx(hookId, func, dll, threadid); if(hook) // 성공한경우훅정보를맵에기록한다. HOOKINFO info; info.hookid = hookid; info.threadid = threadid; g_hookmap.insert(make_pair(hook, info)); finally // dll 을해제한다. if(dll) FreeLibrary(dll); // 훅핸들을반환한다. return hook; < 리스트 3> 은훅을제거하는역할을하는 UnregisterHook 의코드다. 이함수는위에서 RegisterHook 을통해서등록한훅핸들을제거하는역할을한다. 훅핸들이넘어오면 g_hookmap 에서해당훅정보를찾는다. 만약해당정보가없다면 RegisterHook 에의해서등록된훅핸들이아니기때문에 FALSE 를리턴한다. 맵에존재하는경우에는맵에서해당정보를삭제하고, UnhookWindowsHookEx 를호출해서훅핸들을제거한다. 리스트 3 UnregisterHook 코드 /*-- 등록된훅을해제한다. 파라미터 hook - [ 입력 ] 등록된훅핸들 리턴값 - 성공시 TRUE, 실패시 FALSE --*/ BOOL WINAPI UnregisterHook(HHOOK hook) 10/17 페이지

11 BOOL ret = FALSE; if(hook) // 맵에서훅정보를찾는다. HookMIt it = g_hookmap.find(hook); if(it!= g_hookmap.end()) // 존재하는경우해당정보를삭제하고, 훅을해제한다. g_hookmap.erase(it); ret = UnhookWindowsHookEx(hook); return ret; 동기화 지금까지 3 회의강좌에서는모두 SendMessage 계열의함수를사용해서동기화를수행했다. SendMessage 의경우부작용이별로없고달리신경쓰지않아도메시지처리가자동적으로직렬화되기때문에동기화에신경쓸일이없었다. 하지만 WM_COPYDATA 를통해서빈번하게많은양의데이터를전송하는것은성능이좋지않다. 이번강좌를바탕으로다음시간에제작하게될 Spy++ 의클론인 imspy 에서는이러한단점을개선하기위해서공유메모리를통해서정보를교환할것이다. 이렇게되면공유메모리는하나이고접근하는곳은여러군데가된다. imspy 프로그램자체는해당메모리를읽기위해서접근해야하고, 나머지훅프로시저는해당버퍼에쓰기위해서접근해야한다. 이과정에서는동기화를필수적으로해주어야한다. 그렇지않을경우에는버퍼의내용이엉망이될것이다. 버퍼의내용이엉망이되지않도록하기위해서는버퍼를읽고, 쓰는작업을동기화시켜주어야한다. 이러한작업에적합한객체로커널오브젝트의하나인이벤트객체가있다. 박스 2 배타적접근과직렬화컴퓨터용어를접하다보면무슨말인지가끔헷갈리는것들이나온다. 동기화에관한문서들을읽을때에항상등장하는단어인베타적접근과직렬화란말도그러한것중에하나다. 보통다음과같이사용된다. 자원에대해서베타적으로접근하도록해야한다. 자원에대한접근을직렬화시켜야한다. 11/17 페이지

12 결론적으로말하면이두가지말은동일한의미다. 한가지자원에동시에두군데이상에서접근하지못하도록하라는의미다. 베타적접근이란말은한쓰레드가자원에접근하고있을때다른쓰레드는접근하지못하도록해야한다는말이다. 직렬화란말은해당자원에접근하는놈들을동시에접근하지않고순서대로차례로접근하게하라는의미다. 이벤트객체 이벤트는가장원시적인커널오브젝트다. 하지만원시적이라고해서쉽다고이해해서는안된다. 아래에나오는함수들을읽어보고잘이해한다음한번씩멀티쓰레드프로그램을만들어서실습해보도록하자. 오토리셋과매뉴얼리셋이벤트의차이점은꼭확인해보도록하자. HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpeventattributes, BOOL bmanualreset, BOOL binitialstate, LPCTSTR lpname ); CreateEvent 함수는이벤트를생성하는역할을한다. lpeventattributes 에는생성될이벤트객체가가질보안속성을지정한다. bmanualreset 에는매뉴얼이벤트인경우 TRUE 를오토리셋이벤트인경우 FALSE 를지정하면된다. binitialstate 는이벤트의초기상태가시그널상태인지아닌지를지정한다. lpname 에는생성될이벤트객체가가질이름을지정한다. 성공적으로이벤트객체가생성된경우해당객체의핸들을그렇지않은경우에는 NULL 을리턴한다. 두번째인자가매뉴얼리셋과오토리셋이벤트를구분한다고설명했다. 그렇다면매뉴얼리셋과오토리셋이벤트의차이점은무엇일까? 보통의경우이둘의차이를 ResetEvent 의호출여부로알고있는경우가많다. 오토리셋이벤트는 ResetEvent 를호출하지않아도되고, 매뉴얼리셋이벤트는 ResetEvent 를호출해주어야한다는것이다. 물론앞의설명도맞긴하지만그것이두이벤트의근본적인차이는아니다. 오토리셋이벤트의경우해당이벤트를대기중인쓰레드중에임의의한쓰레드를깨운다. 이말은대기중인쓰레드가세개가있다고가정하면그중에한쓰레드를택해서깨운다는말이다. 어떤쓰레드가스케쥴될지는알수없다. 반면에매뉴얼리셋이벤트의경우에는대기중인쓰레드를모두깨운다. 앞의예와같이세개의쓰레드가대기중에있다면세 12/17 페이지

13 개의쓰레드를모두스케쥴한다는의미다. 따라서어떤이벤트를사용할지결정해야할 때에는어떤쓰레드가깨워져야하는지를보고판단해야한다. 모두다깨워야한다면 매뉴얼리셋이벤트를하나만깨워야한다면오토리셋이벤트를사용하면된다. HANDLE OpenEvent(DWORD dwdesiredaccess, BOOL binherithandle, LPCTSTR lpname); OpenEvent 함수는생성된이벤트객체를열때사용한다. dwdesiredaccess 에는 < 표 3> 에나온것과같은값을조합해서사용하면된다. binherithandle 은 CreateProcess 로생성되는프로세스에열린이벤트객체를상속시킬지를나타낸다. 보통의경우 FALSE 로지정하면된다. lpname 에는열려고하는이벤트객체의이름을지정한다. 표 3 dwdesiredaccess 에지정될수있는값설명 값 의미 DELETE 객체를삭제할수있음. READ_CONTROL 객체의보안속성을읽을수있음 해당이벤트를사용해동기화할수 SYNCHRONICE 있음 (WaitForSingleObject, WaitForMultipleObjects 등의 Wait 함수를사용할수있음을의미한다 ). WRITE_DAC 보안속성을기록할수있음. WRITE_OWNER 객체의소유자를변경할수있음. EVENT_ALL_ACCESS 객체에대한모든작업을할수있음. EVENT_MODIFY_STATE 이벤트상태를변경할수있음 (SetEvent, PulseEvent, ResetEvent 를사용할수있음을의미한다 ). BOOL SetEvent(HANDLE hevent); BOOL ResetEvent(HANDLE hevent); BOOL PulseEvent(HANDLE hevent); 위세함수는이벤트객체의상태를조작하는함수들이다. SetEvent 는이벤트객체를시그널상태로만들고, ResetEvent 는이벤트객체를넌시그널상태로만든다. PulseEvent 함수는이벤트객체를시그널상태로만들어서대기중인쓰레드를깨운후에다시해당이벤트를넌시그널상태로만든다. 동기화프로토콜 앞절에서우리는동기화의필요성과이벤트객체에대해서배웠다. 이제이벤트객체를사용해서실제로어떻게동기화를하는지살펴보도록하자. 우리는동기화를위해서두 13/17 페이지

14 개의이벤트객체를사용할것이다. 각각쓰기, 읽기를제어하는용도의이벤트객체다. 이벤트객체의오브젝트명과역할은 < 표 4> 를참고하자. 표 4 동기화에사용될이벤트객체 커널오브젝트명 의미 SSpy_Buffer_Ready 훅프로시저가버퍼에데이터를기록할수있다. SSpy_Data_Ready 클라이언트프로그램이버퍼의데이터를읽어갈수있다. < 그림 1> 에는훅프로시저와클라이언트프로그램이어떻게서로동기화하면서정보를주고받는지가나와있다. 왼쪽이후킹프로시저의순서도이고, 오른쪽이클라이언트프로그램의순서도다. 진행순서는오른쪽의클라이언트프로그램이먼저실행된다. 클라이언트프로그램의버퍼읽기쓰레드는적절한형태로두개의이벤트객체를생성한다음 SSpy_Buffer_Ready 이벤트를설정한다. 그리고 SSpy_Data_Ready 이벤트를기다린다. 다음훅프로시저가수행되면 SSpy_Buffer_Ready 이벤트가설정되어있기때문에통과해서데이터를버퍼에쓰고 SSpy_Data_Ready 이벤트를설정한다. 그러면이번에는클라이언트가깨어나고해당데이터를읽어가게된다. 데이터를모두읽어간후에클라이언트는다시 SSpy_Buffer_Ready 를설정해서다음번훅프로시저가버퍼에데이터를쓸수있도록해준다. 14/17 페이지

15 Sspy_Buffer_Ready 이벤트를열수있는가? SSpy_Buffer_Ready 생성 예 아니오 Sspy_Data_Ready 이벤트를열수있는가? SSpy_Data_Ready 생성 예 아니오 아니오 Sspy_Buffer_Ready 가시그널상태인가? Sspy_Buffer_Ready 셋 예 아니오 Buffer 에메시지데이터기록 SSpy_Data_Ready 가시그널상태인가? Sspy_Data_Ready 셋 예 Buffer 에메시지읽음 종료 그림 1 훅프로시저와클라이언트의동기화흐름도 중복실행방지 이제까지언급한동기화문제를해결하는방법에는한가지제약사항이있다. 그것은바로클라이언트가하나만존재해야한다는것이다. 만약클라이언트가두개이상이라면동기화과정에서문제가생길수있다. SSpy_Buffer_Ready 이벤트가순차적으로설정되면서두개의훅프로시저가동시에데이터에접근할수있으며, 자신이설치하지않은훅에대한메시지도받을수있다. 따라서반드시클라이언트는중복으로실행되는것을방지해서그러한일을사전에차단해야한다. 15/17 페이지

16 Windows 에서중복실행을방지하는방법에는여러가지방법이있다. FindWindow 를통해서자신이생성한윈도우의존재유무를검사하는방법도있고, 글로벌커널오브젝트를생성해서해당오브젝트가존재하는지를검사하는방법도있다. 커널오브젝트를사용하는방법이 < 리스트 4> 에나와있다. 리스트 4 커널오브젝트를사용해서중복실행을방지하는코드 class CSingleInstance private: HANDLE m_hglbmutex; // 전역뮤텍스핸들 public: CSingleInstance(LPCTSTR lpszmutexname="appsinginstcheck"); ~CSingleInstance(); ; BOOL IsExist(); // // 전역뮤텍스를생성해서중복실행체크 // // 파라미터 // lpszmutexname [in] 뮤텍스이름 CSingleInstance::CSingleInstance(LPCTSTR lpszmutexname) m_hglbmutex = CreateMutex(NULL, FALSE, lpmutexname); if(getlasterror() == ERROR_ALREADY_EXISTS) CloseHandle(m_hGlbMutex); m_hglbmutex = NULL; // 뮤텍스핸들해제 CSingleInstance::~CSingleInstance() if(m_hglbmutex) CloseHandle(m_hGlbMutex); // // 이미실행된프로그램이있는지검사 // // 파라미터없음 // // 리턴값 // 존재하는경우 TRUE 를, 처음실행인경우 FALSE 를리턴함 16/17 페이지

17 BOOL CSingleInstance::IsExist() return m_hglbmutex == NULL; 기본적인원리는간단하다. 네임드커널오브젝트의경우프로세스경계에서공유해서사용할수있다는점을이용한것이다. CreateMutex 함수로이미존재하는커널오브젝트를생성하도록한경우에는생성된커널오브젝트에대한핸들을리턴한다 (OpenMutex 가호출되는것과동일하다 ). 이경우에 GetLastError 를호출해보면 ERROR_ALREADY_EXSITS 가설정되어커널오브젝트가새로생성된것인지아닌지를판단할수있다. 즉, 애플리케이션시작부분에서커널오브젝트를생성하고, 종료시에커널오브젝트를해제한다면 ERROR_ALREDY_EXISTS 가설정된경우는이미응용프로그램이실행된경우고, 아니라면처음실행인경우라고생각할수있다. 프로그램에위의코드를추가한다음, 전역변수로 CSingleInstance 를하나생성하도록 하자. 그런후에프로그램의시작부분에서 IsExist 를통해서검사해서 TRUE 인경우에는 바로종료하도록하면중복실행이되지않는다. 도전과제 이번시간에는 WH_CALLWNDPROC, WH_CALLWNDPROCRET 훅의사용법과함께여러개의훅을설치한경우에동기화하는방법에대해서자세히살펴보았다. 이제까지배운지식을바탕으로다음시간에는 Spy++ 의클론인 imspy 를제작해볼것이다. 이번시간까지의지식을바탕으로자신만의 Spy++ 클론을미리제작해보도록하자. 참고자료 참고자료 1. Jeffrey Richter. <<Programming Applications for Microsoft Windows (4/E)>> Microsoft Press 참고자료 2. 김상형, <<Windows API 정복 >> 가남사참고자료 3. 김성우, << 해킹 / 파괴의광학 >> 와이미디어참고자료 4. 매뉴얼리셋이벤트와오토리셋이벤트의차이점 17/17 페이지

개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API

개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API 개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로...2 2. 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API 함수소개 SetWindowsHookEx 함수 5 UnhookWindowsHookEx 함수 5

More information

Microsoft Word - hook3.doc

Microsoft Word - hook3.doc 개발자를위한윈도우후킹테크닉 메시지훅이용한 Spy++ 흉내내기 우리는지난강좌에서후킹을하는기초적인방법과사용되는 API 들을비롯해서후킹함수가호출되는컨텍스트에대해서배웠다. 이번강좌에서는 WH_GETMESSAGE 훅을통해서 Spy++ 과유사한프로그램을제작할것이다. 이과정에서 Windows 애플리케이션이메시지를처리하는과정과윈도우를열거하는방법에대해서알아보도록하자. 목차

More information

Microsoft Word - hook8.doc

Microsoft Word - hook8.doc 개발자를위한윈도우후킹테크닉 WH_DEBUG 훅을이용한훅탐지방법 지금까지우리는다양한종류의훅을사용해서다른프로그램으로전달되는메시지를가로채는방법을법을배웠다. 이번시간에는 WH_DEBUG 훅을사용해서훅프로시저를탐지하는방법에대해서다룬다. 목차 목차...1 필자소개...1 연재가이드...1 연재순서... 오류! 책갈피가정의되어있지않습니다. 필자메모...2 Intro...2

More information

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

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

More information

Microsoft Word - hook5.doc

Microsoft Word - hook5.doc 개발자를위한윈도우후킹테크닉 Spy++ 클론 imspy 제작하기 지난시간까지우리는 WH_GETMESSAGE, WH_CALLWNDPROC, WH_CALLWNDPROCRET 을 사용하는이론적인방법과동기화방법에대해서살펴보았다. 이번시간에는세가지훅을 사용해서 Spy++ 과같이메시지처리과정을보여주는프로그램을작성할것이다. 목차 목차...1 필자소개...1 연재가이드...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 - 04windows.ppt

Microsoft PowerPoint - 04windows.ppt Game Programming I Windows 프로그래밍 (1) March 27, 2006 목표 윈도우프로그래밍에서이용되는이벤트구동프로그래밍모델의이해 Direct3D 를이용하는윈도우어플리케이션의작성을위한최소한의코드이해 윈도우 (Win32) 어플리케이션 Direct3D API ( 어플리케이션프로그래밍인터페이스 ) 를이용하기위해필요 Win32 API 를이용해작성

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

IS119_Message.Hooking_이성재.hwp

IS119_Message.Hooking_이성재.hwp Message Hooking 이성재 einsstar@is119.jnu.ac.kr Content 1. 목적 1 2. 윈도우 NT 환경에서의메시지처리 2 2.1. 메시지큐를이용한메시지처리 3 2.2. 윈도우프로시저에직접메시지전달 3 3. 메시지후킹이란 3 3.1. 메시지후킹의개념정의 3 3.2. 메시지후킹의유포방법 3 4. 후킹프로시저제작 3 4.1. 사전지식

More information

Microsoft Word - hook1.doc

Microsoft Word - hook1.doc 개발자를위한윈도우후킹테크닉 키보드모니터링프로그램만들기 후킹이란다른프로세스의실행경로를가로채는것을말한다. 윈도우프로그래머들이밥먹듯이하는서브클래싱 ( 윈도우메시지핸들러를가로채서컨트롤의기능을확장하는방법 ) 도후킹의한종류라할수있다. 이번강좌는 Windows Hook 을하는함수들을소개하고, 그것들을이용해서키로거를만들어본다. 목차 목차...1 필자소개...1 연재가이드...2

More information

Microsoft Word - hook7.doc

Microsoft Word - hook7.doc 개발자를위한윈도우후킹테크닉 WH_SHELL 훅을사용해다른프로세스윈도우서브클래싱하기 Win32 플랫폼에서는컨텍스트문제로다른프로세스에존재하는윈도우를서브클래싱 하기가쉽지않다. WH_CBT 훅과 WH_SHELL 훅을통해서이러한작업을하는방법을 살펴본다. 또한브라우저 URL 하이재커와팝업제거프로그램을만드는방법을살펴본다. 목차 목차...1 필자소개...1 연재가이드...

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Win32 API Windows Programming 1 http://idb.korea.ac.kr DB & Mining LAB. Korea Univ. 최종업데이트 : 2012. 08. 14 1 컴퓨터시스템의주요구성요소 2 2 컴퓨터하드웨어구성 Fetch : 메인메모리에저장되어있는명령어를 CPU 로 Decode : 컨트롤유닛에의해분석 Execution : ALU

More information

04장 메시지 처리 유형

04장 메시지 처리 유형 4 장 메시지처리유형 김성영교수 금오공과대학교 컴퓨터공학부 메시지처리유형 윈도우에서발생하는이벤트에대응하는윈도우메시지를처리 2 장및 3 장의실습예제 자식윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 실습 4.2 자식윈도우에서발생한사건유형을구분하여처리 Notification code 처리 실습 4.7 Notification code 의한계를극복하여처리

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

Content 1. DLL? 그게뭐야?

Content 1. DLL? 그게뭐야? DLL Injection 은어떻게이루어지는가? By bl4ck3y3 (http://hisjournal.net/blog) Abstract 루트킷을비롯하여바이러스, 악성코드등여러분야에두루쓰이는기법이 DLL Injection입니다. Windows에한정되어적용되는것이지만, Windows 자체의점유율이높은이유로아주효과적으로공격자가원하는작업을수행할수있는방법이죠. 최근루트킷에대해공부하면서이

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

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

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

MFC 프로그래밍

MFC 프로그래밍 윈도우프로그래밍 Visual C++ 2010 MFC Programming 1 장. 윈도우프로그래밍기초 윈도우운영체제의특징 그래픽사용자인터페이스 시스템메뉴타이틀바메뉴최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 상태표시줄 스크롤바 윈도우운영체제의특징 메시지구동구조 윈도우운영체제의특징 멀티태스킹과멀티스레딩 멀티태스킹 (Multitasking) 운영체제가여러개의응용프로그램을동시에실행

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

임베디드시스템설계강의자료 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

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

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

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D> 01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다. 윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1 윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기

More information

슬라이드 1

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

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

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

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 002. 윈도우프로그래밍의기본 DB & MINING LAB. Korea University since 2007. 09. 03 updated 2012. 08. 18 last updated 2015. 08. 25 이종욱 eastwest9@korea.ac.kr 1 Purpose of this chapter What is a Window programming

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

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

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

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

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

More information

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

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

More information

설계란 무엇인가?

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

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

Microsoft Word - hook9.doc

Microsoft Word - hook9.doc 개발자를위한윈도우후킹테크닉 OutputDebugString 의동작원리 우리는지금까지후킹 DLL 을 OutputDebugString 과 DebugView 를이용해서동작내용을확인했다. 하지만 DebugView 가활성화된상태에서후킹 DLL 에서 OutputDebugString 을수행하면시스템이잠시동안멈추는현상이발생한다. 이번시간에는이러한 DebugView 의불편함을해소하기위해서커스텀디버깅뷰를제작하는방법에대해서배운다.

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

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 - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT 2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize

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

5장 MFC기반 다지기

5장 MFC기반 다지기 5 장 MFC 기반다지기 김성영교수 금오공과대학교 컴퓨터공학부 들어가기 (1) pp.132 ~ 138 비주얼스튜디오에서 MFC 어플리케이션작성 참조 시스템메뉴 메뉴 최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 (Client Area) 스크롤바 상태표시줄 2 들어가기 (2) 3 들어가기 (3) 4 들어가기 (4) 솔루션탐색기확인 WinMain() 함수가없다?

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

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

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

Microsoft PowerPoint - (제15강)Win32 API.ppt

Microsoft PowerPoint - (제15강)Win32 API.ppt 15. 가상메모리, 프로세스 1 1. 메모리할당 가상메모리 OS는 4G 까지메모리 ( 단지주소공간, 물리적인메모리와연결가능성이있는메모리번지 ) 관리가능 사용하지않는부분은하드디스크의페이징파일에저장하여사용가능한 RAM을늘린다. (RAM+ 하드디스크의페이징파일 ) Win32에서추가된가상메모리할당함수들 1. 메모리를예약상태로할당할수있다. 예약이란물리적인메모리를소비하지않으면서주소공간만을미리할당해놓는방법을말한다.

More information

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode] TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()

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

JAVA PROGRAMMING 실습 08.다형성

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

More information

In this tutorial i'll try to cover all of the known methods(or at least, those that I know =p) of injecting dll's into a proce

In this tutorial i'll try to cover all of the known methods(or at least, those that I know =p) of injecting dll's into a proce DLL injection Written by Darawk 편역 : poc@securityproof.net * 이글은 Codebreakers Journal Vol.1, No.1, 2007 에서발표된것이며, 오역이나 오타가있을수있으니원문을참고시기바랍니다. 이문서에서, 나는프로세스에 dll을삽입하는알려진 ( 적어도내가아는한에서 ) 방법들모두를다룰것이다. Dll injection은

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

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

설계란 무엇인가?

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

More information

슬라이드 1

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

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

03_queue

03_queue Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

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

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2007년가을학기 9/13/2007 박경신 2 윈도우운영체제특징 그래픽사용자인터페이스 (Graphical User Interface,

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

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

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 - CSharp-10-예외처리

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

More information

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

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

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

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

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

콜백 함수와 후킹 기법

콜백 함수와 후킹 기법 콜백함수와후킹기법 (Callback functions and Hooking Techniques) Win32 API 를이용하여어플리케이션을개발하다보면, 콜백함수에대한내용을많이보게된다. 그렇다면이렇게흔히보게되는콜백함수란과연무엇일까? 그리고, 이런콜백함수를이용해서할수있는것중에서후킹기법을이용하면윈도우운영체제에서사용할수있는여러가지마우스작업이나키보드작업등을중간에서조작하여활용하는것이가능하다.

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

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1 목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2 getaddrinfo() 를활용한주소 범용 (Generic) 코드 주소범용 (Generic) 코드란? 주소버전

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P Duplicator 는기본적으로원본하드디스크를빠르게복사본하드디스크에복사하는기능을하는것입니다.. 복사본 하드디스크가원본하드디스크와똑같게하는것을목적으로하는것이어서저용량에서고용량으로복사시몇 가지문제점이발생할수있습니다. 하드디스크는사용하려면, 디스크초기화를한후에포맷을해야사용가능합니다. Windows PC는 MBR과 GPT 2 개중에 1개로초기화합니다. -Windows

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

11장 포인터

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

More information

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint 웹 연동 기술.pptx 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우

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

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 UI 이벤트 Event listener Touch mode Focus handling Notification Basic toast notification Customized toast notification Status bar notification 2 사용자가인터랙션하는특정 View

More information

슬라이드 1

슬라이드 1 CHAP 6: 큐 yicho@gachon.ac.kr 1 큐 (QUEUE) 큐 : 먼저들어온데이터가먼저나가는자료구조 선입선출 (FIFO: First-In First-Out) ( 예 ) 매표소의대기열 Ticket Box 전단 () 후단 () 2 큐 ADT 삽입과삭제는 FIFO 순서를따른다. 삽입은큐의후단에서, 삭제는전단에서이루어진다. 객체 : n 개의 element

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

요약문 1. 연구제목 DLL Injection 을이용한 KeyLogger 제작및탐지방법연구 2. 연구목적및필요성인터넷의발달과컴퓨터의성능과보안프로그램성능과기술이발전함에따라악성코드의기술과기교도많이발전하였다. 그리고악성코드의기술도늘어남에따라초보자도쉽게사용이가능해지고본인이모르

요약문 1. 연구제목 DLL Injection 을이용한 KeyLogger 제작및탐지방법연구 2. 연구목적및필요성인터넷의발달과컴퓨터의성능과보안프로그램성능과기술이발전함에따라악성코드의기술과기교도많이발전하였다. 그리고악성코드의기술도늘어남에따라초보자도쉽게사용이가능해지고본인이모르 캡스톤보고서 Dll Injection 을이용한 KeyLogger 제작및탐지방법분석 팀명 : 4 조 Guardian 지도교수 : 양정모교수님 조장 : 조민제 (4년) 신예원 (4년) 이상철 (4년) 유명곤 (4년) 2013.5 중부대학교정보보호학과 요약문 1. 연구제목 DLL Injection 을이용한 KeyLogger 제작및탐지방법연구 2. 연구목적및필요성인터넷의발달과컴퓨터의성능과보안프로그램성능과기술이발전함에따라악성코드의기술과기교도많이발전하였다.

More information

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

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

Microsoft PowerPoint - 07-Data Manipulation.pptx

Microsoft PowerPoint - 07-Data Manipulation.pptx Digital 3D Anthropometry 7. Data Analysis Sungmin Kim SEOUL NATIONAL UNIVERSITY Body 기본정보표시 Introduction 스케일조절하기 단면형상추출 단면정보관리 3D 단면형상표시 2 기본정보표시및스케일조절 UI 및핸들러구성 void fastcall TMainForm::BeginNewProject1Click(TObject

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

윈도우 프로그래밍

윈도우 프로그래밍 Windows Programming 2013. 3 출처 : 인터넷에서수집한 PT 자료 1. Overview Getting Started (1) 관련도서 Visual C++/API 프로젝트따라하기, 오진환, 컴스페이스 Programming Windows, Charles Petzold, Microsoft Press Windows application Programming

More information

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E > 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 소켓 (Socket) (1/2) Socket 이란? 서버와클라이언트가서로특정한규약을사용하여데이터를전송하기위한방식 서버와클라이언트는소켓연결을기다렸다가소켓이연결되면서로데이터를전송 현재네트워크상에서의모든통신의근간은 Socket 이라할수있음 Page 2 1 소켓 (Socket) (2/2)

More information

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2008년가을학기 9/16/2008 박경신 2 Windows.NET 구조적프로그램에서객체지향프로그램으로 SDK(Software Development

More information

Microsoft PowerPoint - (제14강)Win32 API.ppt

Microsoft PowerPoint - (제14강)Win32 API.ppt 14. 파일입출력 1 1. 파일입출력 BOOL ReadFile( HANDLE hfile, LPVOID lpbuffer, DWORD nnumberofbytestoread, LPDWORD lpnumberofbytesread, LPOVERLAPPED lpoverlapped ); hfile : 데이터를읽을대상파일의핸들 lpbuffer : 읽은데이터를저장할버퍼 nnumberofbytestoread

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow

More information

4S 1차년도 평가 발표자료

4S 1차년도 평가 발표자료 객체지향프로그래밍응용 Chap 2. 프로그램의뼈대 2012.09.17. 오병우 컴퓨터공학과금오공과대학교 윈도우프로그램각부분의명칭 타이틀바 메뉴 프레임윈도우오브젝트 메뉴오브젝트 도구모음 툴바오브젝트 스크롤바 클라이언트영역 뷰오브젝트 상태표시줄 상태바오브젝트 Department of Computer Engineering 2 Win32 Application API

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

JVM 메모리구조

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

More information