Microsoft Word - hook3.doc

Size: px
Start display at page:

Download "Microsoft Word - hook3.doc"

Transcription

1 개발자를위한윈도우후킹테크닉 메시지훅이용한 Spy++ 흉내내기 우리는지난강좌에서후킹을하는기초적인방법과사용되는 API 들을비롯해서후킹함수가호출되는컨텍스트에대해서배웠다. 이번강좌에서는 WH_GETMESSAGE 훅을통해서 Spy++ 과유사한프로그램을제작할것이다. 이과정에서 Windows 애플리케이션이메시지를처리하는과정과윈도우를열거하는방법에대해서알아보도록하자. 목차 목차...1 필자소개...1 연재가이드...2 연재순서...2 필자메모...2 메시지는어떻게처리될까?...3 특수한메시지...3 WM_COPYDATA...4 Spy++ 은무엇에쓰는물건인고?...5 WH_GETMESSAGE 훅...9 윈도우핸들을열거하는방법 메시지를후킹해보자 Spy 도전과제 참고자료 필자소개 신영진 부산대학교정보, 컴퓨터공학부 4 학년에재학중이다. 모자란학점을다채워서졸업하는것이꿈이되버린소박한괴짜프로그래머. 병역특례기간을포함해서최근까지다수의보안프로그램개발에참여했으며, 최근에는모짜르트에심취해있다.

2 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : 마이크로소프트비주얼스튜디오 2003 기초지식 : C/C++, Win32 프로그래밍응용분야 : 메시지모니터링프로그램 연재순서 키보드모니터링프로그램만들기 마우스훅을통한화면캡쳐프로그램제작 메시지훅이용한 Spy++ 흉내내기내기 SendMessage 후킹하기 Spy++ 클론 imspy 제작하기 저널훅을사용한매크로제작 WH_SHELL 훅을사용해다른프로세스윈도우서브클래싱하기 WH_DEBUG 훅을이용한훅탐지방법 OutputDebugString 의동작원리 필자메모 이제껏우리는후킹함수내에서실행프로그램으로정보를교환하기위해서 SendMessageTimeout 함수를사용했었다. 하지만전달되는정보에포인터가포함된것도아니기때문에 PostMessage 를사용해도될것이란의문은누구나품었을것이다. 지난 5 월호에연재되었던키보드모니터링프로그램의경우더더욱그렇다. 아마도 PostMessage 로변경해서테스트해보신분들은알겠지만 PostMessage 로해당훅코드를수행할경우이상한동작을한다. 테스트를안해봤다면지금한번해보도록하자. 훅코드를 PostMessage 로변경한다음훅을시작시키고모니터링프로그램에서키보드를막눌러보자. 아마도심하게몇번누르다보면어느순간화면에누르지도않았는데키보드정보가쉬지않고올라오는것을볼수있을것이다. 그원인을얼마전에알수있었다. 원인은다름아닌훅코드에서비교하는 code 변수값과관계가있었다. 통상적으로우리는 code 가 0 이상인경우수행하도록했었다. 그것이문제가된것이다. code 값이 HC_ACTION 인경우에만처리하도록하면그러한문제가없어진다. 2/20 페이지

3 메시지는어떻게처리될까? API 프로그래밍을한번도해보지않은독자분들이라면아마도애플리케이션에서메시지를어떻게처리하는지궁금할것이다. 실제로이부분은간단한메시지루프를통해서이루어진다. < 리스트 1> 은가장단순한형태의메시지루프다. MFC 프로그램같은경우에도프로그래머가작성한부분에메시지루프가없다고하더라도 MFC 내부적으로 < 리스트 1> 과같은형태의메시지루프를가지고있다. 리스트 1 간단한메시지루프 while(getmessage(&msg, 0, 0, 0)) TranslateMessage(&msg); DispatchMessage(&msg); 메시지루프가하는일은매우간단하다. 큐에서메시지를꺼내서, 적당히가공한다음해당 메시지를받을윈도우의메시지핸들러를호출한다. 이것이메시지처리의전부다. GetMessage 가하는역할은메시지큐에서메시지를하나꺼내는일이다. 메시지가없는경우는메시지가들어올때까지대기한다. 원활하게메시지를처리하기위해서 GetMessage 는메시지에우선순위를두어서처리한다. 즉, 먼저들어왔다고항상먼저처리하는것은아니다. TranslateMessage 가하는일은 WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP 메시지를적절한형태의 WM_CHAR, WM_SYSCHAR, WM_DEADCHAR, WM_SYSDEADCHAR 등의메시지로변환할수있는경우에, 변환된메시지를메시지큐에추가한다. 기본적으로 Windows 시스템의경우키보드를눌렀다떼면단순히 WM_KEYDOWN, WM_KEYUP 메시지만발생한다. DispatchMessage 가하는일은가져온메시지를실제로처리하는일이다. 가져온메시지에 해당하는윈도우의메시지핸들러를호출하는역할을한다고생각하면된다. 특수한메시지 지난강좌에서 Windows 에서실행되는모든프로그램은분리된메모리공간에서실행된다고배웠다. 하지만몇몇특수한메시지는이러한사실이마치거짓말인것처럼만든다. 그대표적인예가 WM_GETTEXT 와 WM_SETTEXT 메시지다. WM_GETTEXT 의경우윈도우텍스트를구해서저장할버퍼의배열을, WM_SETTEXT 의경우윈도우텍스트를 3/20 페이지

4 설정할문자열포인터를인자로받아들인다. 하지만이두메시지모두다른프로세스에존재하는윈도우에사용해도제대로동작한다. 지난시간에배웠던이론대로라면전달한포인터는다른프로세스로넘어가게되면엉뚱한번지가되고잘못된메모리참조오류가나야정상일것같지만그렇지않은것이다. 왜그럴까? 그비밀은 Windows 내부에있다. Win16 시절에는모든프로세스가동일한메모리공간을공유한다고말했었다. WM_GETTEXT 와 WM_SETTEXT 의경우그시절부터존재하던아주기초적인메시지였다. 따라서그시절프로그램들의경우모두같은공간에있기때문에다른프로세스에대해서도이러한메시지를보내는일이빈번했을것이다. Win32 가되면서더이상이러한일은불법적인것이된다. 하지만 Microsoft 의입장에서볼때그렇게바꾸게되면기존의 Win16 프로그램중많은프로그램에서오류가발생할것이뻔해보였다. 그러한이유로 Microsoft 는 Win32 로넘어오면서기존에사용하던메시지에대해서는포인터처리를자동으로해주자는방침을세운다. 이러한이유로 Win16 부터존재하던대다수의메시지는지금도여전히다른프로세스로포인터를전달해도아무런제약없이잘동작하는것이다. 그내부에서는공유메모리를할당하고다른프로세스로그메모리포인터를전달하는등의복잡한일이일어나고있다. WM_COPYDATA 그렇다면앞에서소개한 Win16 호환메시지를제외한메시지들은다른프로세스로포인터를전송할수없을까? 그렇다. 하지만 Microsoft 에서는다른프로세스로데이터를전달하는목적에사용할수있는범용메시지를하나만들어두었다. 그것이바로 WM_COPYDATA 이다. WM_COPYDATA 의 WPARAM 으로는메시지를보내는윈도우의핸들이지정된다. 받을윈도우가아니라보내는윈도우라는점에주의하도록하자. 만약보내는윈도우핸들이없는경우 0 으로지정하면된다. LPARAM 으로는 COPYDATASTRUCT 의포인터가전달되어야한다. COPYDATASTRUCT 는아래와같이정의되어있다 ( 각필드의의미는 < 표 1> 참고 ). typedef struct tagcopydatastruct ULONG_PTR dwdata; DWORD cbdata; PVOID lpdata; COPYDATASTRUCT, *PCOPYDATASTRUCT; 표 1 COPYDATASTRUCT 구조체필드별의미 4/20 페이지

5 필드명 의미 dwdata 다른프로세스로전달할정수데이터. cbdata lpdata 가가리키는내용의데이터크기. lpdata 다른프로세스로전달할데이터의포인터. 일반적으로 dwdata 에는현재보내는데이터에대한식별자가들어간다. 앞서말했듯이 WM_COPYDATA 는범용적으로설계된메시지다. 따라서이를통해서여러데이터가전송될수있기때문에각각을구분할무엇인가가필요하다. 그것을위한용도로보통 dwdata 를사용한다. lpdata 에는전달할데이터의포인터를, cbdata 에는해당데이터의크기를넣어주면된다. src 윈도우에서 dest 윈도우로 "hello, world" 라는문자열을전송하는경우라면 < 리스트 2> 과같이작성할수있다. 리스트 2 WM_COPYDATA 를통해서 "hello, world" 를전송하는예제 LPCTSTR data = "hello, world"; COPYDATASTRUCT cds; cds.dwdata = 1; // 주고받는쪽에서약속된임의의번호 cds.lpdata = data; cds.cbdata = strlen(data); SendMessage(dest, WM_COPYDATA, (WPARAM) src, (LPARAM) &cds); Spy++ 은무엇에쓰는물건인고? Spy++ 은굉장히유용한유틸리티이다. 그럼에도이것이설명된문서가잘없기에처음윈도우프로그램개발을시작하는분들은잘모르는분들이더러있다. 몇가지자주사용하는기능만간단히살펴보도록하자. 화면 1 Spy++ 시작화면 5/20 페이지

6 Spy++ 을실행시키면 < 화면 1> 과같은윈도우가나타난다. 여기에나타난목록은현재생성된모든윈도우의목록이다. 연하게표시된것은화면에표시되지않는숨김윈도우이고, 진하게표시된것은화면에표시되고있는윈도우다. 트리를통해서자식윈도우와부모윈도우의관계를손쉽게파악할수있다. 화면에나타난윈도우가굉장히많기때문에특정윈도우를찾는것이쉽지않다. 이러한 작업을쉽게하기위해서검색도구가제공된다. ALT + F3 을눌러보자. 그러면 < 화면 2> 와 같은윈도우가나타날것이다. 화면 2 Spy++ 찾기화면 위윈도우에서찾기도구오른쪽의아이콘을드래그하면해당아이콘이포함된윈도우를 찾아서영역을표시해준다. 자신이찾고싶은윈도우로드래그한다음놓으면된다. 노트패드를실행시킨후해당윈도우를찾아보자. 드래그가끝난다음확인을누르면된다. 6/20 페이지

7 화면 3 Spy++ 에서노트패드를찾은화면 < 화면 3> 은 Spy++ 에서노트패드를찾은화면이다. 트리를열어보면어떤자식윈도우로구성되어있는지알수있다. 위에서선택된윈도우에서오른쪽마우스버튼을누른다음속성을선택하면 < 화면 4> 와같은속성윈도우가뜬다. 이곳에서해당윈도우의각종정보를알수있다. 화면 4 Spy++ 에서윈도우속성을확인하는화면 7/20 페이지

8 화면 5 Spy++ 메시지후킹화면 Spy++ 의가장강력한기능은메시지후킹기능이다. Ctrl + M 을누르면 < 화면 5> 와같은 메시지창이뜬다. 여기서메시지후킹할윈도우를지정한다음메시지탭에서검사할 메시지를선택한다. 우리는 WM_KEYDOWN 메시지를선택했다. 그런다음확인을눌러보자. 화면 6 Spy++ 을통해서노트패드로전달되는키보드메시지를살펴본화면 < 화면 6> 은위에서설정한윈도우에서 a,b,c 키를누른화면이다. WM_KEYDOWN 으로 A,B,C 가발생한것을알수있다. 위에서소개한세가지기능이 Spy++ 에서가장많이 사용되는기능이다. 각종윈도우를찾아보고발생하는메시지를살펴보도록하자. 8/20 페이지

9 WH_GETMESSAGE 훅 WH_GETMESSAGE 훅은특정쓰레드로전달된메시지가처리되는것을후킹한다. 이훅의후킹프로시저는쓰레드로전달된메시지가 GetMessage 나 PeekMessage 에의해서제거되거나참조될때호출된다. 따라서후킹된쓰레드의메시지큐로들어가서처리되는모든메시지를살펴볼수있다. LRESULT CALLBACK GetMsgProc(int code, WPARAM wparam, LPARAM lparam); code [ 입력 ] code 값이 HC_ACTION 인경우훅프로시저를수행하고, 0 보다작은경우에는훅프로시저를수행하지않고 CallNextHookEx 를호출한다음리턴해야한다. wparam [ 입력 ] 메시지가메시지큐에서제거되었는지아닌지를나타낸다. 이값의의미는 < 표 2> 을참고하자. 표 2 code 값의미 값 의미 메시지가메시지큐에서제거되지않고참조된경우다. PM_NOREMOVE PeekMessage 를 PM_NOREMOVE 플래그를설정해서호출한 경우다. 메시지가메시지큐에서제거된경우다. GetMessage 나 PM_REMOVE PeekMessage 를 PM_REMOVE 플래그를설정해서호출한 경우다. lparam [ 입력 ] 발생한메시지정보를담고있는 MSG 구조체의포인터를저장하고있다. MSG 구조체는아래와같은형태를하고있다. MSG 구조체의필드별의미는 < 표 3> 를 참고하자. typedef struct HWND hwnd; UINT message; WPARAM wparam; LPARAM lparam; DWORD time; POINT pt; MSG, *PMSG; 표 3 MSG 구조체필드별의미 필드명 의미 hwnd 메시지를받을윈도우핸들. 9/20 페이지

10 message wparam lparam 발생한메시지 ID. 메시지 wparam. 메시지 lparam. time 메시지가발생한시간. pt 메시지가발생한마우스포인터. 리턴값 : code 가 0 보다작은경우에는 CallNextHookEx 의리턴값을그대로리턴해야 한다. 그렇지않은경우에도 CallNextHookEx 의리턴값을그대로사용하는것이좋다. CallNextHookEx 를통해서다음훅체인을호출하지않은경우엔 0 을리턴해야한다. 윈도우핸들을열거하는방법 Spy++ 과같은프로그램을만들기위해서우리가가장먼저해야할일을윈도우핸들을열거하는것이다. < 화면 1> 을보면현재시스템에동작하는모든윈도우가열거되어있는것을볼수있다. 이러한기능을구현하는데핵심역할을하는 API 두개를살펴보자. BOOL EnumWindows(WNDENUMPROC lpenumfunc, LPARAM lparam); EnumWindows 는현재시스템에동작중인 top 윈도우를열거하는역할을한다. top 윈도우는 < 화면 2> 에서루트에존재하는데스크탑윈도우 ( 바탕화면 ) 의직접적인자식윈도우들을말한다. 첫번째파라미터로열거를수행할콜백함수를, 두번째인자로해당콜백함수에전달될파라미터를넣어주면된다. 성공한경우에 0 이아닌값을리턴하고, 실패한경우에 0 을리턴한다. 콜백함수 lpenumfunc 에서 0 을리턴한경우에도 0 을리턴한다. BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam); EnumWindows 의첫번째인자로넘어가는콜백함수는위와같은원형을가지고있다. 첫번째파라미터로현재열거된윈도우의핸들이, 두번째인자로 EnumWindows 로프로그래머가전달한파라미터가넘어온다. TRUE 를리턴하면열거작업이계속진행되고, FALSE 를리턴하면열거작업이중단되고 EnumWindows 함수가 0 을리턴한다. < 리스트 3> 에 EnumWindows 를사용해서 top 윈도우를열거하는코드가나와있다. 리스트 3 top 윈도우를열거하는코드 #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdio.h> 10/20 페이지

11 BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam) TCHAR windowname[max_path] = 0,; TCHAR classname[max_path] = 0,; if(!getwindowtext(hwnd, windowname, sizeof(windowname)) && GetLastError()!= ERROR_SUCCESS) return FALSE; if(!getclassname(hwnd, classname, sizeof(classname)) && GetLastError()!= ERROR_SUCCESS) return FALSE; printf( "Window name = \"%s\"\n" " Class name = \"%s\"\n", windowname, classname ); return TRUE; int main(int argc, char* argv[]) SetLastError(0); EnumWindows(EnumWindowsProc, 0); return 0; BOOL EnumChildWindows(HWND hwndparent, WNDENUMPROC lpenumfunc, LPARAM lparam); EnumChildWindows 는특정윈도우의자식윈도우를열거하는역할을하는함수다. 첫번째파라미터로열거할부모윈도우의핸들을, 두번째파라미터로콜백함수포인터를, 세번째인자로콜백함수로전달될파라미터를넣어주면된다. 성공한경우 TRUE, 실패한경우 FALSE 를리턴한다. 이함수의첫번째인자를 NULL 로주고호출하면위에서소개한 EnumWindows 와동일한역할을수행한다. < 리스트 4> 는 < 리스트 3> 의콜백부분을수정해서자식윈도우까지모두출력하도록만든것이다. 수행결과가 < 화면 7> 에나와있다. 리스트 4 EnumChildWindows 를사용해서자식윈도우를열거하는콜백함수 BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam) TCHAR windowname[max_path] = 0,; TCHAR classname[max_path] = 0,; if(!getwindowtext(hwnd, windowname, sizeof(windowname)) && 11/20 페이지

12 GetLastError()!= ERROR_SUCCESS) return FALSE; if(!getclassname(hwnd, classname, sizeof(classname)) && GetLastError()!= ERROR_SUCCESS) return FALSE; printf( "%*swindow name = \"%s\"" " Class name = \"%s\"\n", lparam, "", windowname, classname ); EnumChildWindows(hwnd, EnumWindowsProc, lparam+4); return TRUE; 화면 7 자식윈도우열거화면 12/20 페이지

13 박스 1 응용프로그램을열거하는방법 화면 8 작업관리자에나타난응용프로그램목록 EnumWindows 를사용하면작업표시줄에나타나는응용프로그램을열거할수있다. 작업관리자는화면에표시되는 top 윈도우중에서다음속성을만족하는것을열거한다. WS_EX_APPWINDOW 속성을가지고있다. WS_EX_TOOLWINDOW 속성을가지고있지않으면서, 소유주 (owner) 윈도우가없다. 위의두가지조건을체크하는코드를만들어보면다음과같다. DWORD exstyle = GetWindowLong(hwnd, GWL_EXSTYLE); BOOL isvisible = IsWindowVisible(hwnd); BOOL istoolwindow = (exstyle & WS_EX_TOOLWINDOW); BOOL isappwindow = (exstyle & WS_EX_APPWINDOW); BOOL isowned = GetWindow(hwnd, GW_OWNER)? TRUE : FALSE; if(isvisible && (isappwindow (!istoolwindow &&!isowned))) // 응용프로그램 위에서 if 문을통과한 top 윈도우를열거해보면작업관리자의응용프로그램에나타난 윈도우목록과동일함을알수있다. 13/20 페이지

14 메시지를후킹해보자. 메시지를후킹하는기본적인함수들은지난시간에소개한것과모두동일하기때문에별도로설명하지않겠다. 새롭게추가된부분만살펴보도록하자. < 리스트 5> 에 InstallHookEx 함수의코드가나와있다. 이함수는기존에사용하던 InstallHook 과동일한역할을한다. 하지만다른점은기존의 InstallHook 의경우훅을전역으로설치했었다. 반면에 InstallHookEx 의경우인자로받아들인쓰레드 ID 에해당하는쓰레드만후킹한다. 리스트 5 InstallHookEx 코드 MSGHK_API BOOL WINAPI InstallHookEx(DWORD tid) BOOL ret = FALSE; if(!g_hhook) g_hhook = SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc, g_hinst, tid); if(g_hhook) ret = TRUE; return ret; GetMessage 와 PeekMessage 모두모든윈도우에서기본적으로가지고있는메시지루프의일부분이기때문에호출빈도가매우높기때문에전역으로후킹할경우시스템성능이상당히저하될수있다. 따라서메시지를살펴보고싶은윈도우를생성한쓰레드만후킹하는것이바람직하다. < 리스트 6> 는 InstallHookEx 를사용해서특정윈도우에해당하는쓰레드만후킹하는방법을보여주고있다. 리스트 6 InstallHookEx 를사용해서후킹하는부분 void CspyDlg::OnBnClickedHook() // 선택한항목의핸들을얻어온다. HTREEITEM item = m_treewindows.getselecteditem(); if(!item) AfxMessageBox(" 훅을설치할윈도우를선택해주세요 "); return; // 해당핸들에대한윈도우핸들을구한다. HWND hwnd = (HWND) m_treewindows.getitemdata(item); DWORD tid = GetWindowThreadProcessId(hwnd, NULL); 14/20 페이지

15 // 윈도우를생성한쓰레드를후킹한다. if(!installhookex(tid)) AfxMessageBox(" 훅설치에실패하였습니다."); return; // 후킹할메시지맵생성 m_hookmsgs.clear(); for(int i=0; i<g_msgscnt; ++i) if(m_lstmsgs.getsel(i) > 0) m_hookmsgs.insert(make_pair(g_msgs[i].id, g_msgs[i].desc)); // 리스트초기화 m_lsthookmsg.deleteallitems(); WH_GETMESSAGE 훅프로시저는 < 리스트 7> 에나와있다. WPARAM 값이 PM_REMOVE 인경우만체크해서메시지가실제로메시지큐에서꺼내지는시점에만메시지를보내도록되어있다. 메시지정보를다른프로세스로보내기위해서 WM_COPYDATA 를사용하고있다. 리스트 7 WH_GETMESSAGE 훅프로시저 LRESULT CALLBACK GetMessageProc(int code, WPARAM w, LPARAM l) if(code == HC_ACTION && w == PM_REMOVE) PMSG msg = (PMSG) l; if(iswindow(g_targetwnd)) COPYDATASTRUCT cds; cds.cbdata = sizeof(msg); cds.lpdata = msg; cds.dwdata = g_callbackmsg; SendMessageTimeout( g_targetwnd, WM_COPYDATA, 0, (LPARAM) &cds, SMTO_BLOCK SMTO_ABORTIFHUNG, 50, NULL ); 15/20 페이지

16 return CallNextHookEx(NULL, code, w, l); Spy 이번강좌에서우리가제작해볼프로그램은 Spy++ 의변종 Spy 프로그램이다. Spy 의실행화면이 < 화면 9> 에나와있다. 화면은전체적으로세부분으로나뉘어져있다. 왼쪽위에나오는부분이윈도우목록을열거하는부분이다. 그옆으로있는리스트는후킹해서검사할메시지목록을나타내고있다. 지금은네개의메시지만등록되어있다. 아래쪽에있는목록은후킹한윈도우에서발생한메시지를나타낸다. 훅일시중지버튼이선택되면훅이설치된상태라도훅메시지가올라오지않는다. 체크가해제되면다시메시지가올라온다. 전체삭제버튼을누르면지금까지추가되었던후킹메시지가모두제거된다. 윈도우목록갱신버튼은윈도우목록을최신의상태로업데이트시키는역할을한다. 훅설치버튼은윈도우목록에서선택한윈도우에메시지목록에해당하는메시지를후킹하는훅프로시저를설치하는역할을한다. 훅제거버튼은설치된훅을제거하는역할을한다. 화면 9 WH_GETMESSAGE 훅을사용한 Spy 프로그램실행화면 16/20 페이지

17 윈도우목록을트리로표현하는것과관련된코드가 < 리스트 8> 에나타나있다. 앞서소개한 EnumWindows 와 EnumChildWindows 함수를사용하고있다. 트리에표시하기위해서트리컨트롤의핸들과추가할아이템노드를콜백함수의파라미터로전달하고있다. 트리에뭔가를재귀적으로추가하는경우에많이사용되는코드이므로한번찬찬히살펴보도록하자. 리스트 8 윈도우목록을구해서트리로만드는코드 // FillTreeProc 콜백파라미터구조체 typedef struct _FTCBPARAM CTreeCtrl *ptree; // 트리핸들 HTREEITEM parent; // 부모아이템핸들 FTCBPARAM, *PFTCBPARAM; BOOL CALLBACK FillTreeProc(HWND hwnd, LPARAM p) FTCBPARAM np; PFTCBPARAM param = (PFTCBPARAM) p; TCHAR windowname[1024]; TCHAR classname[1024]; TCHAR title[1024]; // 윈도우이름과클래스이름을구한다음추가할문자열을만든다. GetWindowText(hwnd, windowname, sizeof(windowname)); GetClassName(hwnd, classname, sizeof(classname)); StringCbPrintf(title, sizeof(title), "%08X \"%s\" \"%s\"", hwnd, windowname, classname); // 아이템을추가한다음자식을열거한다. np.ptree = param->ptree; np.parent = param->ptree->insertitem(title, 0, 0, param->parent, TVI_LAST); param->ptree->setitemdata(np.parent, (DWORD_PTR) hwnd); EnumChildWindows(hwnd, FillTreeProc, (LPARAM) &np); return TRUE; void CspyDlg::RefreshWindowList() FTCBPARAM param; param.ptree = &m_treewindows; param.parent = TVI_ROOT; m_treewindows.lockwindowupdate(); m_treewindows.deleteallitems(); EnumWindows(FillTreeProc, (LPARAM) &param); 17/20 페이지

18 m_treewindows.unlockwindowupdate(); 실제로후킹된메시지를리스트에표시하는메시지핸들러는 < 리스트 9> 에코드가나와있다. 앞서살펴보았듯이이번강좌에사용된메시지후킹의경우정보전달을위해서 WM_COPYDATA 를사용했었다. 따라서후킹메시지도 WM_COPYDATA 에서처리되어야한다. 훅의일시중지상태와콜백메시지여부를확인한다음처리하고있다. 우리가모니터링하고싶은메시지인지를빠르게확인하기위해서맵을사용했다. 리스트 9 후킹메시지핸들러 BOOL CspyDlg::OnCopyData(CWnd* pwnd, COPYDATASTRUCT* pcopydatastruct) if(!m_hookpaused && pcopydatastruct->dwdata == WM_MSGHOOKNOTIFY) CString buf; int id; PMSG msg = (PMSG) pcopydatastruct->lpdata; if(msg->hwnd == m_hookwnd && m_hookmsgs.find(msg->message)!= m_hookmsgs.end()) id = m_lsthookmsg.getitemcount(); buf.format("%d", id+1); m_lsthookmsg.insertitem(lvif_text, id, buf, 0, 0, 0, 0); buf.format("%08x", msg->hwnd); m_lsthookmsg.setitemtext(id, 1, buf); m_lsthookmsg.setitemtext(id, 2, "POSTED"); m_lsthookmsg.setitemtext(id, 3, m_hookmsgs[msg->message]); buf.format("%08x", msg->wparam); m_lsthookmsg.setitemtext(id, 4, buf); buf.format("%08x", msg->lparam); m_lsthookmsg.setitemtext(id, 5, buf); return CDialog::OnCopyData(pWnd, pcopydatastruct); 메시지맵과관련된코드가 < 리스트 10> 에나와있다. 기본적으로화면에보이는메시지 목록은배열을통해서미리저장해둔것을출력한다. 그중에사용자가선택한메시지만 맵으로들어가게된다. 맵에메시지를추가하는부분은 < 리스트 6> 코드를참고하자. 18/20 페이지

19 리스트 10 메시지맵과관련된코드 // 메시지목록배열구조체부분 typedef struct _MSGDESC UINT id; LPCTSTR desc; MSGDESC, *PMSGDESC; MSGDESC g_msgs[] = WM_KEYDOWN, "WM_KEYDOWN", WM_CHAR, "WM_CHAR", WM_KEYUP, "WM_KEYUP", WM_LBUTTONUP, "WM_LBUTTONUP" ; const int g_msgscnt = sizeof(g_msgs) / sizeof(msgdesc); // 사용자가선택한목록만저장할맵 typedef std::map<uint, LPCTSTR> MsgMap; typedef std::map<uint, LPCTSTR>::iterator MsgMIt; MsgMap m_hookmsgs; // 후킹할메시지목록 도전과제 이번달에만든예제프로그램도부족한부분이너무도많다. 좀더그럴듯하게만들어보도록하자. 우리가추가한네개의메시지보다많은수의메시지를손쉽게추가할수있는방법을생각해보자. 그리고개별메시지마다파라미터를보기좋게출력하는방법을연구해보자. Spy++ 의경우 WPARAM 과 LPARAM 의형태로나타내는것이아니라, 각각이의미하는바를정리해서보여준다. 다음달은 WH_CALLWNDPROC 과 WH_CALLWNDPROCRET 를사용해서 SendMessage 를후킹해서보여주는기능을 Spy 프로그램에추가하는것을배울것이다. 여러개의윈도우를후킹했을때그것들을관리하는방법과 WM_COPYDATA 외의다른자료교환방법에대해서한번생각해보도록하자. 참고자료 참고자료 1. Jeffrey Richter. <<Programming Applications for Microsoft Windows (4/E)>> Microsoft Press 19/20 페이지

20 참고자료 2. 김상형, <<Windows API 정복 >> 가남사 참고자료 3. 김성우, << 해킹 / 파괴의광학 >> 와이미디어 참고자료 4. Spy++ 매뉴얼 /20 페이지

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

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

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

개요 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 - hook5.doc

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

More information

Microsoft Word - hook4.doc

Microsoft Word - hook4.doc 개발자를위한윈도우후킹테크닉 SendMessage 후킹하기 지난시간에 WH_GETMESSAGE 훅을통해서메시큐에서메시지가처리되는과정을후킹해보았다. 이번시간에는 WH_CALLWNDPROC, WH_CALLWNDRETPROC 훅을통해서 SendMessage 의처리과정을후킹하는방법과다수의훅프로시저를설치한경우에동기화하는방법에대해서설명할것이다. 목차 목차...1 필자소개...1

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

Microsoft Word - hook8.doc

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

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

Microsoft Word - hook7.doc

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

More information

Microsoft Word - hook1.doc

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

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

슬라이드 1

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

More information

Microsoft PowerPoint - chap06-2pointer.ppt

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

More information

04장 메시지 처리 유형

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

More information

MFC 프로그래밍

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

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

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

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 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

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

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

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

More information

11장 포인터

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

More information

PowerPoint 프레젠테이션

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

More information

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

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

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

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

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

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

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

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

1

1 2/33 3/33 4/33 5/33 6/33 7/33 8/33 9/33 10/33 11/33 12/33 13/33 14/33 15/33 16/33 17/33 5) 입력을 다 했으면 확인 버튼을 클릭합니다. 6) 시작 페이지가 제대로 설정이 되었는지 살펴볼까요. 익스플로러를 종료하고 다시 실행시켜 보세요. 시작화면에 야후! 코리아 화면이 뜬다면 설정 완료..^^

More information

슬라이드 1

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

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

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

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

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

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

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

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 PowerPoint - chap06-5 [호환 모드]

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

More information

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

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

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

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

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 Android-SDK설치.HelloAndroid(1.0h).pptx

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

More information

이번장에서학습할내용 동적메모리란? 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

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

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 4. 대화상자와컨트롤 (#1) 2013.09.27. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window

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

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

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

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

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

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

윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념 제 7 장컨트롤과리소스 I 7.1 리스트컨트롤실습 7-1 대화상자에리스트컨트롤만들기 7.2 트리컨트롤실습 7-2 대화상자에트리컨트롤만들기 컨트롤및리소스 리스트컨트롤 (List Control) 트리컨트롤 (Tree Control) 탭컨트롤 (Tab Control) 슬라이드컨트롤 (Slider Control) 스핀컨트롤 (Spin Control) 프로그레스바컨트롤

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

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

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

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

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

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

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

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

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

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

More information

Install stm32cubemx and st-link utility

Install stm32cubemx and st-link utility STM32CubeMX and ST-LINK Utility for STM32 Development 본문서는 ST Microelectronics 의 ARM Cortex-M 시리즈 Microcontroller 개발을위해제공되는 STM32CubeMX 와 STM32 ST-LINK Utility 프로그램의설치과정을설명합니다. 본문서는 Microsoft Windows 7

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버

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

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

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

슬라이드 1

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

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

PowerPoint 프레젠테이션

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

More information

Microsoft PowerPoint - C++ 5 .pptx

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

More information

View Licenses and Services (customer)

View Licenses and Services (customer) 빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차

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

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

제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

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE> 쉽게풀어쓴 C 언어 Express 제 17 장동적메모리와연결리스트 이번장에서학습할내용 동적메모리할당의이해 동적메모리할당관련함수 연결리스트 동적메모리할당에대한개념을이해하고응용으로연결리스트를학습합니다. 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것

More information

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont 12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 1 목포해양대해양컴퓨터공학과 UDP 소켓 네트워크프로그램설계 4 장 2 목포해양대해양컴퓨터공학과 목차 제 4장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송신및수신 4.4 UDP 소켓의연결 3 목포해양대해양컴퓨터공학과 UDP 소켓의특징 UDP 소켓의특성 신뢰할수없는데이터전송방식 목적지에정확하게전송된다는보장이없음.

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070> 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue

More information

좀비프로세스 2

좀비프로세스 2 Signal & Inter-Process Communication Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 좀비프로세스 2 좀비프로세스 (zombie process) 좀비프로세스란프로세스종료후메모리상에서사라지지않는프로세스 좀비프로세스의생성이유. 자식프로세스는부모프로세스에게실행결과에대한값을반환해야한다.

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

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

Microsoft Word - windows server 2003 수동설치_non pro support_.doc Windows Server 2003 수동 설치 가이드 INDEX 운영체제 설치 준비과정 1 드라이버를 위한 플로피 디스크 작성 2 드라이버를 위한 USB 메모리 작성 7 운영체제 설치 과정 14 Boot Sequence 변경 14 컨트롤러 드라이버 수동 설치 15 운영체제 설치 17 운영체제 설치 준비 과정 Windows Server 2003 에는 기본적으로

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

Microsoft PowerPoint - CSharp-10-예외처리

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

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

5장 MFC기반 다지기

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

More information

Microsoft Word - hook9.doc

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

More information

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt Windows 와 C++ MFC Message Map HCI Programming 2 (321190) 2008년가을학기 10/14/2008 박경신 C++ 의다형성 (Polymorphsim) 기반클래스의어떤멤버함수를파생클래스에서재정의 (overriding) 하기위해서는기반클래스의그멤버함수가가상함수 (virtual function) 로정의되어야함 MFC 의 CWnd

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

노트북 IT / 모바일 데스크탑 34 올인원PC 35 PC 소프트웨어 포터블SSD / SSD / 메모리카드 36 태블릿 37 휴대폰 39 PC 솔루션 IT / 모바일 IT / 모바일 노트북 29 삼성전자는 Windows 를 권장합니다. 삼성전자만의 편리하고 다양한 소프트웨어를 통해 초보자도 보다 쉽고 빠르게 이용 가능합니다. Easy Settings 삼성 패스트

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

Studuino소프트웨어 설치

Studuino소프트웨어 설치 Studuino 프로그래밍환경 Studuino 소프트웨어설치 본자료는 Studuino 프로그래밍환경설치안내서입니다. Studuino 프로그래밍 환경의갱신에따라추가 / 수정될수있습니다. 목차 1. 소개... 1 2. Windows... 2 2.1. 프로그래밍환경설치... 2 2.1.1. 웹설치버전설치방법... 2 2.2. Studuino 프로그래밍환경실행...

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

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

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. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault 사용자매뉴얼 JetFlash Vault 100 ( 버전 1.0) 1 목차 1. 시스템요구사항... 3 2. 암호및힌트설정 ( 윈도우 )... 3 3. JetFlash Vault 시작하기 ( 윈도우 )... 7 4. JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault 찾아보기... 10 JetFlash

More information

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

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

More information