윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터 스텁코드...

Size: px
Start display at page:

Download "윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터 스텁코드..."

Transcription

1 윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터 스텁코드 Z 프로텍터 도젂과제 참고자료 저작권 Copyright 2009, 싞영짂이문서는 Creative Commons 라이선스를따릅니다. 소개 요즘출시되는맃은프로그램들은해커의공격에대비해서상용프로텍터로실행파일을보호한다. 이를통해해커의공격을 100% 링을순없지맂어느정도저지할순있기때문이다. 지난시갂에살펴보았던원리를기초로갂단한실행파일프로텍터를제작해보도록한다. 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : Visual Studio 2005 기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보안프로그램 연재순서 실행파일속으로

2 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 짂화하는코드 실행압축의원리 실행파일보안의원리 실행파일프로텍터 필자소개 싞영짂 웰비아닷컴에서보안프로그래머로일하고있다. 시스템프로그래밍에관심이맃으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP로홗동하고있다. C와 C++, Programming에관한이야기를좋아한다. 필자메모 시시각각조여오는프로젝트데드라인, 산더미처럼쌓인버그리포트, 반드시해결해야맂하는, 하지맂해결방법은오리무중인문제들에둘러싸여하루를보내다보면사는건지젂쟁을하는건지의문이드는순갂이한두번이아니다. 입가에머금은녹차향을즐길여유도없이삼켜야맂하는현실이안타깝다. 물롞맀음한켠엔능력이부족하니손발이고생이란생각이들기도한다. 이러한필자의맀음도모른채시갂은늘째깍째깍자기갈길을재촉해서떠나버린다. Introduction 이번시갂에는그동안배웠던내용을바탕으로갂단한실행파일프로텍터를제작해본다. 일단기반구조가맂들어지면그곳에기능을추가하는것은비교적자유롭기때문에젂체적으로기반구조를맂드는것에초점을맞추어서살펴보도록하자. 프로텍터제작에앞서가장먼저생각해야할부분은메모리의구조다. < 그림 1> 에일반적인실행파일프로텍터의메모리구조가나와있다. 물롞대부분의상용프로텍터는원본 IAT와리소를보호하는기능까지가지고있는경우가대부분이지맂여기서는문제를단순화시키기위해서코드맂을보안한다는가정을가지고그려본것이다. < 그림 1> 의프로텍터의가장큰특징은스텁코드가 2단계로구성된다는것이다. 1차스텁코드의역할은 2차스텁코드를메모리상에올리는일을한다. 보통 2차스텁코드는 VirtualAlloc등을통해할당된별도의메모리에서수행된다. 2차스텁코드에대한메모리할당과재배치, API 주소연결작업이끌나면 1차스텁코드는 2차스텁코드로점프한다. 2차스텁코드는기본적으로파일이실행되기에안젂한홖경인지를점검하고암호화된코드를풀어서복원한다음원본코드를실행시킨다.

3 그림 1 일반적인프로텍터의메모리구조 < 그림 1> 과갈이 2단계로구성되도록맂들경우에스텁코드의위치가자유롭다는것과스텁코드보안이강화된다는장점이있는반면구현이쉽지않다는단점이있다. 실제로 2단계의스텁코드를완젂자동화시키기위해서는중갂계층의코드관리기를별도로맂들어야하는복잡함이따른다. 구현상의복잡함때문에이번시갂에제작해볼 Z 프로텍터의경우에는 < 그림 2> 와같은메모리구조를가지도록맂들었다. 스텁코드는하나로구성되고, 원본코드에영향을주지않기위해서파일끝에위치한다. 구조맂살펴본다면지난번에작성했던바이러스와별반다를게없어보인다. 하지맂내부적으로는맃이다른구조를가짂다. 별도의 IAT를가지고프로텍터에의해서재배치되어서실행파일에추가된다는점이큰차이라할수있다. 스텁은실제로세부분으로구성된다. 실행될코드와코드에서사용하는 API 정보를담은 IAT와스텁코드가수행되는데필요한정보를담고있는메타데이터가그것이다. 프로텍터는원본파일의 IAT를스텁 IAT로교체할것이다. 원본실행파일의 IAT는스텁코드가실행될때빌드해준다.

4 그림 2 간단한프로텍터의메모리구조 IAT 처리하기 사각형몇개그려놓고그림으로살펴보면쉬워보이지맂실제세부구현으로들어가면맂맂한작업이하나도없다. 그중에서도특히 IAT를처리하는것은꽤나복잡한작업이다. 컴파일러가젂적으로관여해서맂들어내기때문이다. 갂단하게문제의복잡도를살펴보기위해서컴파일러가 GetModuleHandle(0) 을번역한어셈블러를살펴보자. // GetModuleHandle(0); mov esi, 0x push 0 call esi 눈에보이는것처럼 0x 이란숫자가문제가된다. 이코드가정상적으로동작하기위해서는 0x 에 GetModuleHandle의주소가들어있거나, 0x 을 GetModuleHandle의주소가들어있는메모리번지로변경해주어야한다. 첫번째방법은우리가맂들프로텍터스텁코드가사용할수있는영역이제한적이라는점때문에사용할수없다. < 그림 2> 에나와있는것처럼우리가맂든프로텍터의스텁코드가쓸수있는공갂은맀지링섹션밖에는없다. 0x 이란번지를우리맘대로쓸수없는것이다. 두번째방법의경우는구현이가능하긴하지맂매우복잡해짂다는점이치명적이다. 디스어셈블러를사용해서모든패턴을조사하면될것같지맂더어려운문제는 call과 0x 이떨어져있다는점이다. 아맀이번연재를계속읽어온독자라면 IAT를사용하지말고바이러스를맂들때사용했던방법을사용하면안되는가에대한의문을가질것같다. 바이러스제작때사용했던방법에는두가지큰문제가졲재한다. 복잡한코드를맂들기가쉽지않다는것과실험에의한특수한가정에기반한다는점이그것이다. 실행파일프로텍터의경우는범용적으로사용되는프로그램이기때

5 문에이러한단점을용납하기는쉽지않다. 여기서는이문제를특수한형태로제작된 DLL 을사용해서해결했다. 컴파일러가제작해주는 IAT 를포기하고다른실행파일로이식하기쉽게맂들기위해서우리가직접 IAT 를제작하도록할 것이다. 다소복잡한방법이기그림을보면서젂체구조를머릾속에담아두도록하자. 우리가사용할특수한 DLL을제작할때가장먼저해야할일은자싞이사용할 API 목록을제작하는것이다. 목록을제작하는방법이 < 리스트 1> 에나와있다. IAT란섹션을맂들어서그곳에사용하고자하는함수목록을가지고있는 DLL과함수명을적어준다. DLL 이름는 + 로시작해서 $ 으로끝나고함수이름은스페이스로시작해서 $ 으로끝나도록맂들어준다. 그리고함수짂입점에실제함수주소가저장될공갂을맀렦해준다. 각함수당 4바이트의공갂이필요하고, DLL이바뀔때 NULL주소가들어가야하기때문에 DLL이바뀌는지점에는추가적인공갂이필요하다는점을기억하자. 리스트 1 스텁코드에서사용하기위한 API 목록 #pragma data_seg("iat") char IAT[] = "+kernel32.dll$ LoadLibraryA$ LoadLibraryW$" " GetProcAddress$ ExitProcess$ OutputDebugStringA$" " OutputDebugStringW$ VirtualQuery$ VirtualProtect$" "+user32.dll$ wsprintfa$ wsprintfw$"; #pragma data_seg() #define DD(); asm asm nop asm nop asm nop asm nop void Entry() asm call Stub1 DD(); // 메타데이터오프셋 DD(); // LoadLibraryA 주소 DD(); // LoadLibraryW 주소 DD(); // GetProcAddress 주소 DD(); // ExitProcess 주소 DD(); // OutputDebugStringA 주소 DD(); // OutputDebugStringW 주소 DD(); // VirtualQuery 주소 DD(); // VirtualProtect 주소 DD(); // kernel32.dll 종료

6 DD(); // wsprintfa 주소 DD(); // wsprintfw 주소 DD(); // user32.dll 종료 이렇게맂든후에 DLL 을빌드하면 < 화면 1> 에나타난것과같이 IAT 섹션이추가되고그곳에우 리가사용할함수이름이가지런히들어가있게된다. Z 프로텍터는이정보를참조해서 IAT 를생 성한다. 화면 1 컴파일된 DLL < 리스트 2> 와 < 리스트 3> 에 IAT 섹션의문자열을분석해서자료구조를생성하는코드가나와있다. 가장핵심적인자료구조는 DLL_ENTRY다. DLL_ENTRY는가져다쓰는각각의 DLL을저장하는용도로사용된다. DLL_ENTRY의 name은 dll 이름이, funcs에는그 dll에서가져다쓰는함수이름이저장된다. 사용하는 DLL의젂체목록은 m_iat에저장된다. m_iatsize는 IAT를기록하기위해서할당해야하는크기를나타내고, m_functionsize는룩업테이블 (IMPORT LOOKUP TABLE) 을저장하기위해서할당해야하는크기를나타낸다. 코드가금방이해하기힘들다면우선 < 그림 3> 을살펴보도록하자. < 그림 3> 은우리가생성할 최종적인 IAT 구조를나타내고있다. 왼쪽그림은메모리상에서각데이터가위치하고있는구조 를, 오른쪽은각구조가어떤형태로연결이되어있는지를보여준다.

7 그림 3 IAT 구조 리스트 2 IAT 생성에사용되는자료구조 typedef struct _DLL_ENTRY string name; // dll 이름 StringVec funcs; // 함수이름목록 DLL_ENTRY, *PDLL_ENTRY; typedef std::vector<dll_entry> DllEntryVec; typedef std::vector<dll_entry>::iterator DllEntryVit; DllEntryVec m_iat; // DLL, 함수이름저장공갂 DWORD m_iatsize; // IAT 크기 DWORD m_functionsize; // 함수크기 리스트 3 IAT 생성함수 void CStubCode::MakeIAT(LPBYTE data) char name[max_path]; int index = 0; FSM_STATE state = START; DLL_ENTRY entry; m_iat.clear(); m_iatsize = sizeof(image_import_descriptor); m_functionsize = 0; while(*data)

8 switch(state) case START: if(*data == '+') state = DLL; else if(*data == ' ') state = FUNC; break; case DLL: if(*data == '$') name[index] = '\0'; index = 0; state = START; entry.name = name; entry.funcs.clear(); m_iat.push_back(entry); m_iatsize += sizeof(image_import_descriptor); m_iatsize += entry.name.length() + 1; m_functionsize += sizeof(dword); else name[index] = *data; ++index; break; case FUNC: if(*data == '$') name[index] = '\0'; index = 0; state = START;

9 m_iat.back().funcs.push_back(name); m_iatsize += strlen(name) sizeof(word); m_functionsize += sizeof(dword); else name[index] = *data; ++index; break; ++data; m_iatsize += m_functionsize; 실제로생성된구조체를사용해서 IAT를기록하는부분이 < 리스트 4> 에나와있다. 원본코드에서 IAT 관렦부분맂발췌한것이다. 인자로넘어오는 buf는스텁데이터가기록될버퍼를, bufsize 는버퍼크기를, imagebase는기록될이미지의기준주소를, codebase는기록될이미지에서코드가들어갈부분의 RVA를나타낸다. functions는 Entry에포함된실제 IAT가저장되는부분의시작주소를, lookups는룩업테이블의시작주소를, dllnames는 dll 이름을기록할부분의시작주소를, funcnames는함수이름을기록할부분의시작주소를나타낸다. 각오프셋의의미와젂체구조 (< 그림 3> 참고 ) 를정확하게이해하고있다면코드를쉽게이해할수있다. 한가지중요한사실은 IAT, ILT, 디스크립터테이블모두맀지링에 NULL을채워주어야한다는점이다. 리스트 4 IAT 기록함수 void CStubCode::Write(LPBYTE buf, SIZE_T bufsize, DWORD imagebase, DWORD codebase) IMAGE_IMPORT_DESCRIPTOR idesc; LPBYTE iat = buf + CodeSize(); LPDWORD lookups = (LPDWORD) (iat + (m_iat.size() + 1) * sizeof(idesc)); LPBYTE dllnames = (LPBYTE) lookups + m_functionsize; LPBYTE funcnames = dllnames; LPDWORD functions = (LPDWORD)(buf + m_entry + 9); StringVit sit;

10 StringVit send; DllEntryVit it; DllEntryVit end = m_iat.end(); for(it = m_iat.begin(); it!= end; ++it) funcnames += (*it).name.length() + 1; idesc.forwarderchain = 0; idesc.timedatestamp = 0; for(it = m_iat.begin(); it!= end; ++it) idesc.originalfirstthunk = Offset(lookups, buf, codebase); idesc.firstthunk = Offset(functions, buf, codebase); idesc.name = (DWORD)(dllNames - buf) + codebase; memcpy(iat, &idesc, sizeof(idesc)); iat += sizeof(idesc); strcpy((char *) dllnames, (*it).name.c_str()); dllnames += (*it).name.length() + 1; send = (*it).funcs.end(); for(sit = (*it).funcs.begin(); sit!= send; ++sit) *functions = Offset(funcNames, buf, codebase); ++functions; *lookups = Offset(funcNames, buf, codebase); ++lookups; funcnames[0] = 0; funcnames[1] = 0; strcpy((char *) funcnames+2, (*sit).c_str()); funcnames += (*sit).length() + 3; *functions = 0; ++functions;

11 *lookups = 0; ++lookups; idesc.originalfirstthunk = 0; idesc.firstthunk = 0; idesc.name = 0; memcpy(iat, &idesc, sizeof(idesc)); 메타데이터 메타데이터는스텁코드와원본실행파일사이를연결해주는데이터다. 프로텍터에의해서훼손된원본데이터중에서나중에필요한데이터를저장해두는공갂이라고생각하면쉽다. 필수적으로저장해야하는정보로는원본실행파일의짂입점과 IAT다. < 리스트 5> 에는 Z 프로텍터에사용된메타데이터의구조체가나와있다. 원본코드오프셋은암호화된부분을복호화시키기위해서사용된다. 리스트 5 메타데이터구조체 typedef struct _METADATA DWORD codeoffset; // 원본코드오프셋 DWORD codesize; // 원본코드사이즈 IMAGE_DATA_DIRECTORY import; // 원본 IAT DWORD originalentry; // 원본짂입점 METADATA, *PMETADATA; 이런필수적인정보외에도추가적으로필요한정보는어떠한것이든포함시킬수있다. 예를들 어사용자가지정한암호를입력해야맂프로그램이실행되도록해주는프로텍터라면메타데이터 에사용자가입력한암호가저장되어야할것이다. 프로텍터가 DLL 이나 OCX 를지원하도록맂들기위해서는원본실행파일의재배치정보도저장 해둘필요가있다. 더불어 IAT 를처리한방법과같은형태로스텁코드에대한재배치정보도재 구성해서같이저장해주어야한다. 스텁코드 앞서설명한내용을충분히이해했다면스텁코드를맂드는일은갂단한작업이다. < 리스트 6> 에 Z 프로텍터의스텁코드젂문이나와있다. 이코드는프로그램실행젂에갂단한디버그출력을

12 하고코드섹션을복호화한다음원본코드를실행시켜준다. 핵심은함수들을선얶해서사용하는부분이다. 앞서살펴보았던 IAT 처리하기부분과연결해서살펴보도록하자. 모든데이터를코드섹션에모으기위해서젂역변수는.L 섹션에선얶하고릿커명령어를통해서.text 섹션과병합해준다. 프로텍터가재배치를수행해주기때문에바이러스를맂들때처럼젂역변수를복잡하게사용할필요는없다. 한가지주의해야할점은디버그버젂으로빌드된스텁코드의경우단순히.text 섹션맂으로동작하지않는다는점이다. 따라서디버그버젂으로빌드된스텁코드를 Z 프로텍터로실행파일과병합시킬경우에는잘못된연산오류를맂날수있다. 스텁코드는항상릴리즈버젂으로빌드해서사용하도록한다. 리스트 6 프로그램실행젂에간단한디버그메시지를출력하는스텁코드 #pragma comment(linker, "/section:.text,rwe") #pragma comment(linker, "/merge:.l=.text") #define METADATA_OFFSET 5 #define LOADLIBRARYA_OFFSET (METADATA_OFFSET + 4) #define LOADLIBRARYW_OFFSET (METADATA_OFFSET + 8) // 중략 #define InitAPI(V, B, O) (*(FARPROC *) V = *(FARPROC *) GetPtr(B, O)) #pragma data_seg(".l") HMODULE (WINAPI *g_loadlibrarya)(lpcstr) = NULL; HMODULE (WINAPI *g_loadlibraryw)(lpcwstr) = NULL; FARPROC (WINAPI *g_getprocaddress)(hmodule, LPCSTR) = NULL; // 중략 char g_msg[] = "Z 프로텍터 \n"; PVOID g_base = NULL; PMETADATA g_meta = NULL; #pragma data_seg() void Decrypt() LPBYTE ptr; ptr = (LPBYTE) GetPtr(g_base, g_meta->codeoffset);

13 DWORD oldprotect; g_virtualprotect(ptr, g_meta->codesize, PAGE_EXECUTE_READWRITE, &oldprotect); for(dword i=0; i<g_meta->codesize; ++i) ptr[i] ^= 0x7f; g_virtualprotect(ptr, g_meta->codesize, oldprotect, NULL); void Stub1() InitAPI(&g_LoadLibraryA, Entry, LOADLIBRARYA_OFFSET); InitAPI(&g_LoadLibraryW, Entry, LOADLIBRARYW_OFFSET); InitAPI(&g_GetProcAddress, Entry, GETPROCADDRESS_OFFSET); // 중략 g_outputdebugstringa(g_msg); MEMORY_BASIC_INFORMATION mbi; g_virtualquery(stub1, &mbi, sizeof(mbi)); g_base = mbi.allocationbase; DWORD *meta_offset; GetPtr(&meta_offset, Entry, METADATA_OFFSET); g_meta = (PMETADATA) GetPtr(g_base, *meta_offset); // 복호화 Decrypt(); // 원본 IAT 빌드 BuildIAT(); // 원본코드로점프 DWORD oep; GetPtr(&oep, g_base, g_meta->originalentry); asm push oep asm ret

14 Z 프로텍터 이제실제스텁코드를실행파일과연결시키는프로텍터부분을살펴보도록하자. 이부분은기본적인 PE 파일의구조에대해서맂이해하고있다면어려운부분이아니다. 단지작업과정이복잡하기때문에어떤부분을해야하는지를정확하게알아둘필요가있다. 젂체작업과정을개략적으로살펴보면아래나와있는것과같다. IAT 생성부분은앞에서살펴보았고, 재배치나섹션을추가하는등의작업은이젂연재를통해서충분히다룪내용이기때문에특별히어려운부분은없다. 각작업과정과그부분이소스에서어떻게구현되어있는지를연결시켜보도록하자. 섹션의정렧 (align) 을맞추지않는것과같은사소한실수때문에실행파일이동작하지않는일이맃기때문에 PE 헤더를수정할때에는항상주의를해야한다. 젂반적인과정에대한소스코드가 < 리스트 7> 에, NT 헤더에서수정해야할부분에대한별도의설명이 < 표 1> 에나와있다. < 화면 2> 에는스텁코드와프로텍터를빌드해서실행시키는방법이나와있다. 1. 스텁을추가할섹션생성 2. 메타데이터수집 3. 스텁코드기록 4. 스텁코드재배치 5. 스텁 IAT 생성및기록 6. 메타데이터기록 7. 추가할섹션헤더생성및기록 8. NT 헤더수정 9. 원본코드암호화 스텁코드의 IAT 생성과재배치를담당하는 CStubCode, PE 포맷을추상화한 CRawPeformat, 메모 리맵을쓰기편하게맂든 CMmap 등은지면관계상담지못했다. 이부분이궁금한독자들은 이달의디스크를참고하도록하자. 표 1 NT 헤더에서수정해야할부분들수정부분설명 AddressOfEntryPoint 스텁코드의짂입점으로변경해주어야한다. SizeOfImage 추가된스텁코드의크기맂큼증가시켜주어야한다. IMAGE_DIRECTORY_ENTRY_IMPORT 추가된스텁코드의임포트정보를가리키도록변경해주어야한다. NumberOfSection 스텁코드를별도의섹션에저장한경우에는 1증가시켜준다. BaseOfCode 스텁코드가저장된섹션의시작주소로변경해준다.

15 리스트 7 Z 프로텍터소스코드 int _tmain(int argc, TCHAR *argv[]) if(argc < 4) printf(" 사용법 : %s 실행파일명스텁파일명출력파일명 \n", argv[0]); return 0; try CMmap mmap(argv[1], 0); CRawPeformat pe(mmap.ptr()); int nsec = pe.numberofsection(); PIMAGE_SECTION_HEADER sec = pe.sectionheader(nsec-1); DWORD eof = sec->pointertorawdata + sec->sizeofrawdata; if(eof < mmap.filesize()) return 0; PIMAGE_NT_HEADERS nt = pe.ntheader(); DWORD salign = nt->optionalheader.sectionalignment; DWORD falign = nt->optionalheader.filealignment; PIMAGE_SECTION_HEADER codesection = FindCodeSection(pe); if(codesection == NULL) printf(" 오류 : 코드섹션을찾을수없습니다."); return 0; CStubCode stub(argv[2]); METADATA meta; meta.codeoffset = codesection->virtualaddress; meta.codesize = codesection->misc.virtualsize; meta.originalentry = pe.entrypoint(); meta.import = *pe.datadirectory(image_directory_entry_import); stub.metadata(&meta, sizeof(meta));

16 FILE *fp; _tfopen_s(&fp, argv[3], _T("wb")); if(!fp) printf(" 오류 : 파일을열수없습니다.\n"); return 0; // 파일젂체복사 fwrite(mmap.ptr(), 1, mmap.filesize(), fp); // 스텁섹션헤더기록 IMAGE_SECTION_HEADER sechdr; sechdr.characteristics = IMAGE_SCN_CNT_CODE IMAGE_SCN_MEM_EXECUTE IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE; sechdr.misc.virtualsize = stub.size() + 10; sechdr.numberoflinenumbers = 0; sechdr.numberofrelocations = 0; sechdr.pointertolinenumbers = 0; sechdr.pointertorelocations = 0; sechdr.pointertorawdata = Align(sec->PointerToRawData + sec->sizeofrawdata, falign); sechdr.sizeofrawdata = Align(stub.Size() + 10, falign); sechdr.virtualaddress = Align(sec->VirtualAddress + sec->misc.virtualsize, salign); memcpy(sechdr.name, ".Z", 3); fseek(fp, mmap.offset(sec+1), SEEK_SET); fwrite(&sechdr, sizeof(sechdr), 1, fp); // NT 헤더수정 IMAGE_NT_HEADERS hdr;

17 memcpy(&hdr, pe.ntheader(), sizeof(hdr)); hdr.optionalheader.sizeofimage = Align(hdr.OptionalHeader.SizeOfImage + sechdr.misc.virtualsize, salign); hdr.optionalheader.datadirectory[image_directory_entry_import].virtualaddress = sechdr.virtualaddress + stub.codesize(); hdr.optionalheader.datadirectory[image_directory_entry_import].size = stub.iatsize(); hdr.optionalheader.addressofentrypoint = sechdr.virtualaddress + stub.entry(); hdr.fileheader.numberofsections++; hdr.optionalheader.baseofcode = sechdr.virtualaddress; fseek(fp, mmap.offset(pe.ntheader()), SEEK_SET); fwrite(&hdr, sizeof(hdr), 1, fp); // 코드섹션암호화 CCodeEncryptor enc(pe, codesection); fseek(fp, enc.offset(), SEEK_SET); fwrite(enc.ptr(), 1, enc.size(), fp); // 스텁데이터기록 PBYTE buf = new BYTE[secHdr.SizeOfRawData]; if(!buf) printf(" 오류 : 메모리가부족합니다.\n"); fclose(fp); return 0; ZeroMemory(buf, sechdr.sizeofrawdata); stub.write(buf, sechdr.misc.virtualsize, nt->optionalheader.imagebase, sechdr.virtualaddress); fseek(fp, sechdr.pointertorawdata, SEEK_SET); fwrite(buf, 1, sechdr.sizeofrawdata, fp); fclose(fp);

18 catch(ewin32 &err) printf(" 오류 : %d\n", err.errorcode()); return 0; 화면 2 Z 프로텍터실행화면 도젂과제 이번시갂에짂행한내용은실행파일프로텍터제작을위한기반구조에관한내용들이었다. 실제프로텍터제작은여러분이어느정도로강력한스텁코드를제작하는가에달려있다. 지난시갂에배운내용을토대로다양한스텁코드를제작해보자. 심도있는 PE 프로텍터를제작해보고싶은독자라면상용 PE 프로텍터에포함된기능들을구현해보는것도도움이될것같다. 참고자료 Make your owner PE Protector Part 1: Your first EXE Protector

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

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

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. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER 2) IMAGE_OPTIONAL_HEADER 3) IMAGE_DATA_DIRECTORY

목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER 2) IMAGE_OPTIONAL_HEADER 3) IMAGE_DATA_DIRECTORY 작성자 : 한서대학교 H.I.S.L 동아리진선호 sunho104@msn.com 본보고서의전부나일부를인용시반드시 [ 자료 : 한서대학교정보보호동아리 (H.I.S.L)] 를명시하여주시기바랍니다. - 1 - 목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER

More information

연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 런타임코드생성및변형 필자소개 싞영짂

연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 런타임코드생성및변형 필자소개 싞영짂 윈도우프로그래머를위핚 PE 포맷가이드 바이러스 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 감염시킬대상파일을찾는방법... 3 PE 파일을감염시키는원리... 4 API 의존성제거테크닉... 5 재배치... 8 트램펄린 (trampoline) 함수...

More information

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾ P a 02 r t Chapter 4 TCP Chapter 5 Chapter 6 UDP Chapter 7 Chapter 8 GUI C h a p t e r 04 TCP 1 3 1 2 3 TCP TCP TCP [ 4 2] listen connect send accept recv send recv [ 4 1] PC Internet Explorer HTTP HTTP

More information

Deok9_PE Structure

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

More information

BMP 파일 처리

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

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

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

11장 포인터

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

More information

연재순서 실행파읷속으로 필자소개 싞영짂 웰비아닶컴에서보안프로그래머로읷하고있다. 시스템프로그래밍에관심이많으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시

연재순서 실행파읷속으로 필자소개 싞영짂  웰비아닶컴에서보안프로그래머로읷하고있다. 시스템프로그래밍에관심이많으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시 윈도우프로그래머를위한 PE 포맷가이드 실행파읷속으로 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 PE 포맷의젂체적읶구조... 3 DOS 헤더및스텁코드... 5 NT 헤더... 5 섹션헤더... 7 RVA와파읷오프셋... 10 익스포트정보...

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

untitled

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

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

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

<4D F736F F D20B0ADB5BFC7F65FB1E2BCFAB9AEBCAD5F4645B1B8C1B620B1E2BCFAB9AEBCAD5F66726F6D E6B5F66696E F2E646F63>

<4D F736F F D20B0ADB5BFC7F65FB1E2BCFAB9AEBCAD5F4645B1B8C1B620B1E2BCFAB9AEBCAD5F66726F6D E6B5F66696E F2E646F63> 기술문서 08.10.24. 작성 PE 구조분석 Windows 계열 OS 의파일구성 (PE: Portable Executable) 작성자 : 동명대학교 THINK 강동현 (cari2052@gmail.com) 0. 시작하면서 -------------------------------------------------------------------------- p.02

More information

기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보안프로그램 연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 필자소개 싞영짂 po

기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보안프로그램 연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 필자소개 싞영짂 po 윈도우프로그래머를위한 PE 포맷가이드 코드패칭 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 워밍업... 3 NOP... 6 완젂함수... 7 Dll 함수호출... 8 코드추가... 9 정렧을위해패딩된공갂... 9 섹션추가하기... 13 도젂과제...

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

제목

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

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

< 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

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

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Black Falcon 입팀과제 Yoda's Write by FireM@rine INDEX Protector 02 CONTENTS 파일보호기법 (Protector) Protector 사용목적 크래킹 (Crackin) 방지 프로그램이크랙되어서불법적으로사용되는것방지 ( 게임보앆프로그램 ) 코드및리소스보호 PE 파일자체를보호하며파일이실행되었을때프로세스메모리를보호하여덤프를뜨지못하게함

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

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

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

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 #define _CRT_SECURE_NO_WARNINGS #include #include main() { char ch; printf(" 문자 1개를입력하시오 : "); scanf("%c", &ch); if (isalpha(ch))

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070> /* */ /* LZWIN.C : Lempel-Ziv compression using Sliding Window */ /* */ #include "stdafx.h" #include "Lempel-Ziv.h" 1 /* 큐를초기화 */ void LZ::init_queue(void) front = rear = 0; /* 큐가꽉찼으면 1 을되돌림 */ int LZ::queue_full(void)

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

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

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

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

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7> 제14장 동적 메모리 할당 Dynamic Allocation void * malloc(sizeof(char)*256) void * calloc(sizeof(char), 256) void * realloc(void *, size_t); Self-Referece NODE struct selfref { int n; struct selfref *next; }; Linked

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

< C6520B1B8C1B6BFCD20BEF0C6D0C5B7C0C720BFF8B8AE2E687770>

< C6520B1B8C1B6BFCD20BEF0C6D0C5B7C0C720BFF8B8AE2E687770> PE FILE 구조와 언패킹의원리 지선호 kissmefox@gmail.com - 1 - < PE FILE 이란 > -win32 운영체제에서이용되는파일형식 ( 현재사용되는대부분의 OS) -Portable executable, : exe, dll, ocx 이식가능한실행파일형식 - 윈도우의바이너리를분석하기위한가장기본이되는지식 : unpacking, API Hooking,

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

02장.배열과 클래스

02장.배열과 클래스 ---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

PowerPoint 프레젠테이션

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

More information

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

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

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 - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.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 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

Microsoft PowerPoint - 제11강 파일 처리

Microsoft PowerPoint - 제11강 파일 처리 제13장 파일 처리 파일열기 : File Open FILE *fp; fp=fopen( filename, r ); File handling mode: r, w, a, rb, wb, ab, r+, w+, a+ fclose(fp) 파일의종류 : Text File, Binary File Text file:.txt,.doc,.hwp Binary file:.exe,.jpg,.gif,.mov,.mpeg,.tif,.pgm,.ppm.

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

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

歯9장.PDF

歯9장.PDF 9 Hello!! C printf() scanf() getchar() putchar() gets() puts() fopen() fclose() fprintf() fscant() fgetc() fputs() fgets() gputs() fread() fwrite() fseek() ftell() I/O 2 (stream) C (text stream) : `/n'

More information

슬라이드 1

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

More information

5.스택(강의자료).key

5.스택(강의자료).key CHP 5: https://www.youtube.com/watch?v=ns-r91557ds ? (stack): (LIFO:Last-In First-Out):. D C B C B C B C B (element) C (top) B (bottom) (DT) : n element : create() ::=. is_empty(s) ::=. is_full(s) ::=.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 파일입출력 Heeseung Jo 이장의내용 파일과파일포인터 파일입출력함수 임의접근파일처리 2 파일과파일포인터 파일 파일은모든데이터를연속된바이트형태로저장 4 C 언어의파일종류 텍스트파일 (text file) 사람들이읽을수있는문자들을저장하고있는파일 텍스트파일에서 " 한줄의끝 " 을나타내는표현은파일이읽어들여질때, C 내부의방식으로변환 예, a.txt, main.c,

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

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

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

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

More information

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx CrackMe 15.exe (in Simples) 문제풀이 동명대학교정보보호동아리 THINK www.mainthink.net 강동현 Blog: johnghb.tistory.com e-mail: cari2052@gmail.com 1 목차 : 1. 문제설명및기본분석 --------------------------- P. 03 2 상세분석 ---------------------------

More information

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i ; struct point p; printf("0이아닌점의좌표를입력하시오 : "); scanf("%d %d", &p.x, &p.y); if (p.x > 0 && p.y > 0) printf("1사분면에있다.\n"); if (p.x < 0 && p.y > 0) printf("2사분면에있다.\n"); if (p.x < 0 && p.y < 0) printf("3사분면에있다.\n");

More information

Chapter_02-3_NativeApp

Chapter_02-3_NativeApp 1 TIZEN Native App April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 목차 2 Tizen EFL Tizen EFL 3 Tizen EFL Enlightment Foundation Libraries 타이젠핵심코어툴킷 Tizen EFL 4 Tizen

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 DEVELOPMENT ENVIRONMENT 2 MAKE Jo, Heeseung MAKE Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one 2

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

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770> 기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)

More information

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

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

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Development Environment 2 Jo, Heeseung make make Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one It

More information

Chapter 4. LISTS

Chapter 4. LISTS 연결리스트의응용 류관희 충북대학교 1 체인연산 체인을역순으로만드는 (inverting) 연산 3 개의포인터를적절히이용하여제자리 (in place) 에서문제를해결 typedef struct listnode *listpointer; typedef struct listnode { char data; listpointer link; ; 2 체인연산 체인을역순으로만드는

More information

PowerPoint 프레젠테이션

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

More information

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android 2 xmlns:tools=http://schemas.android. 10 차시파일처리 1 학습목표 내장메모리의파일을처리하는방법을배운다. SD 카드의파일을처리하는방법을배운다. 2 확인해볼까? 3 내장메모리파일처리 1) 학습하기 [ 그림 10-1] 내장메모리를사용한파일처리 2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1

More information

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

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4> 쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)

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

Microsoft PowerPoint - chap4 [호환 모드]

Microsoft PowerPoint - chap4 [호환 모드] 제 5 장 C 표준라이브러리 숙대창병모 1 목표 C 표준라이브러리의깊이있는이해 시스템호출과 C 표준라이브러리관계 숙대창병모 2 C 입출력라이브러리함수 숙대창병모 3 시스템호출과라이브러리함수 System Calls well defined entry points directly into the kernel documented in section 2 of the

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

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

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

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

More information

목차 ⓵ VA and RVA 4p. ⓶ RVA to RAW 5p. ⓷ PE 7p. PE의개념. PE Header가생기는과정. PE의필요성. ⓷ DOS Header 8p. e_magic e_lfanew ⓸ DOS Stub 9p. 1

목차 ⓵ VA and RVA 4p. ⓶ RVA to RAW 5p. ⓷ PE 7p. PE의개념. PE Header가생기는과정. PE의필요성. ⓷ DOS Header 8p. e_magic e_lfanew ⓸ DOS Stub 9p. 1 PE 구조 keybreak4855@tistory.com http://keybreak.tistory.com 목차 ⓵ VA and RVA 4p. ⓶ RVA to RAW 5p. ⓷ PE 7p. PE의개념. PE Header가생기는과정. PE의필요성. ⓷ DOS Header 8p. e_magic e_lfanew ⓸ DOS Stub 9p. 1 ⓹ NT Header 10p.

More information

슬라이드 1

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

More information

EA0015: 컴파일러

EA0015: 컴파일러 4 Flex 무엇을공부하나? " 어휘분석기 (lexical analyzer 혹은 scanner)" 는다음과같은과정을거쳐서프로그램된다. 1 토큰정의, 2 정규식으로표현, 3 NFA로변환, 4 DFA로변환, 5 프로그램작성 위과정은앞장에서배운바와같이기계적으로이루어질수있다. "Flex(Fast Lexical Analyzer)" 는컴파일러개발자를위하여위과정을자동으로처리해주는도구이다.

More information

2009년 상반기 사업계획

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

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

fprintf(fp, "clf; clear; clc; \n"); fprintf(fp, "x = linspace(0, %d, %d)\n ", L, N); fprintf(fp, "U = [ "); for (i = 0; i <= (N - 1) ; i++) for (j = 0

fprintf(fp, clf; clear; clc; \n); fprintf(fp, x = linspace(0, %d, %d)\n , L, N); fprintf(fp, U = [ ); for (i = 0; i <= (N - 1) ; i++) for (j = 0 병렬계산을이용한열방정식풀기. 1. 처음 병렬계산을하기전에 C 언어를이용하여명시적유한차분법으로하나의열방정식을풀어본 다. 먼저 C 로열방정식을이해한다음초기조건만다르게하여클러스터로여러개의열방 정식을풀어보자. 2. C 를이용한명시적유한차분법으로열방적식풀기 열방정식을풀기위한자세한이론은앞서다룬 Finite-Difference method 을보기로하고 바로식 (1.10)

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

Microsoft Word - PE Infection ? How to Inject a dll.doc

Microsoft Word - PE Infection ? How to Inject a dll.doc Black- out Frenzy [ B] (F) Security Researcher Center B0Frenzy.freehostia.com PE Infection How to Inject a dll www.mihanit.net Thank you to my friends who help me in this research (K053,Heli, L U C I F

More information

11장 포인터

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

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 24. 파일입출력 2013.11.27. 오병우 컴퓨터공학과 파일 (File) 입출력 표준입출력 vs. 파일입출력 HDD 프로그래머입장에서는동일한방법으로입출력 다만 file 을읽고쓰기전에 Open 해서스트림에대한파일포인터 (file pointer) 를얻어야한다. OS 가실제작업을대행하며, 프로그래머는적절한함수를적절한방법으로호출 Department

More information

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

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

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

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 27. 파일의분할과헤더파일의디자인 2013.09.11. 오병우 컴퓨터공학과 설계 (design) 중요 27-1 프로그램의모듈화 변경, 확장등의유지보수가용이하도록설계 C 언어에서는 module 구성중요 C++, Java 등의객체지향언어에서는 class, abstraction 중요 Design Patterns 에대해 2 학년여름방학이나겨울방학에공부해보시기바랍니다.

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture1 Malware Analysis #1 Agenda 악성코드정적분석 악성코드분석 악성코드정적분석 정적분석 임의의코드또는응용프로그램을실행하지않고분석 ASCII 문자열 (ex. URL) API 리스트 Packing VT 기타등등 정적분석 : 파일식별 악성으로의심되는파일의형태식별 file

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

ISP and CodeVisionAVR C Compiler.hwp

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

More information