다시시작하는윈도우프로그래밍 메모리이야기 (2) 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 2 가상메모리의기본개념... 3 가상메모리할당... 4 가상메모리해제... 7 할당과해제... 7 가상메

Size: px
Start display at page:

Download "다시시작하는윈도우프로그래밍 메모리이야기 (2) 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 2 가상메모리의기본개념... 3 가상메모리할당... 4 가상메모리해제... 7 할당과해제... 7 가상메"

Transcription

1 다시시작하는윈도우프로그래밍 메모리이야기 (2) 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 2 가상메모리의기본개념... 3 가상메모리할당... 4 가상메모리해제... 7 할당과해제... 7 가상메모리상태조회및보호속성변경... 9 vmwalk 참고자료 소개 윈도우메모리관리의내부밑단계에는가상메모리관리자가존재한다. 지난시갂에살펴보았던힙과스택도이러한가상메모리관리자의도움을받아구현되는것들이다. 이번시갂에는이러한가상메모리의개념에대해서살펴보고, 가상메모리를조작하는 API의사용법에대해서알아본다. 연재가이드 운영체제 : Windows XP 개발도구 : Visual Studio 2005 기초지식 : C/C++ 문법응용분야 : 윈도우응용프로그램 필자소개 싞영진 pop@jiniya.net, 웰비아닷컴에서보안프로그래머로일하고있다. 시스템프로그래밍에관심이맋으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP로홗동하고있다. C와 C++, Programming에관한이야기를좋아한다. 1/13 페이지

2 필자메모 벌써여름이다. 날씨가더워지면서새로이사한집의에어컨을가동할일이있었다. 첫입주라처음리모컨비닐을뜯고에어컨을동작시키는영광을얻을수있었다. 에어컨은가동했고, 방은아주시원해졌다. 한시갂정도생각없이놀다가추워서에어컨을끄러갔다. 그런데왠일인지에어컨밑에물이심하게떨어지고있는것이아닌가? 삼십분맊늦게봤으면집이물바다가될뻔한상황이었다. 일단에어컨을끄고왜그곳으로물이떨어졌는지를관찰했다. 화장실쪽으로연결해둔배수구 가문제였다. 배수구로물이정상적으로배출이되지않아에어컨은토를해대고있었던것이다. 길게늘어진배출구를두드리자미친듯이물을내뿜기시작했다. 처음이라그랬겠지라는생각에다시에어컨을가동시켰다. 다시삼십분정도의시갂이흘렀다. 에어컨은다시토를하기시작했다. 난다시배출구로갔고배출구가검은젂기테이프로막혀 있는것을발견했다. 그것을뜯고두드리자다시물이배출구로나오기시작했다. 이젠고쳐졌겠지라고생각하며다시에어컨을가동시켰다. 다시삼십분후에어컨은여젂히토를하기시작한다. 난다시배출구를살핀다. 중요한결함을이제서야눈치챈다. 쭉늘어진배출구끝이올라가있어서물이정상적으로빠져나오지못하는것이었다. 즉배출구를젃단해야하는상황이었다. 고민이앞선다. 배출구를젃단했다가더큰문제가생기는것은아닐까? 하지맊이내배출구를젃단했다. 그날이후에어컨은토를하지않았고, 시원하게잘동작한다. 재미없는에어컨이야기를이리도길게쓴이유는나는저이야기에서맋은것을느낄수있었기때문이었다. 에어컨이토를하는상황은버그였고, 나는그것을고치는개발자였다고생각해보자. 나는왜그버그를한번에고치지못했을까? 저문제를한번에해결하기위해서는어떠한식으로문제에접근해야했을까? 또는에어컨이토를하는버그가발생하기젂에문제점을발견해낼수있는방법은없었을까? Introduction 멀티태스킹은정말마법같은일이다. 어떻게그렇게맋은프로그램들이동시에동작할수있을까? 물롞동시에동작한다는사실맊이놀라운것은아니다. 제한된물리메모리내에서그렇게맋은프로그램들을동시에실행한다는것은더싞기한일이다. 물롞그마법뒤에서벌어지는일을알고있다면젂혀싞기한일이아니지맊말이다. 우리는지난시갂에스택과힙메모리에대해서살펴보았다. < 그림 1> 에나와있는것처럼스택 과힙메모리는윈도우메모리관리의상단에위치한것으로가상메모리 API 의도움을얻어구 현된다. 이번시갂에는앞서소개한마법같은일의핵심적인기능을하는가상메모리의개념과 2/13 페이지

3 그것을사용하는 API 에대해서알아볼것이다. 끝으로해당지식을사용해서 vmwalk 라는갂단한 프로그램을제작해본다. 그림 1 윈도우메모리아키텍처 가상메모리의기본개념 가상메모리의개념을이해하기위한첫단추는페이징과스와핑이다. 페이징이란물리메모리주소와논리메모리주소를분리시키는것을의미한다. 운영체제에서사용되는 0x100이란주소가실제물리적인메모리의 0x100번지를의미하지않는다는이야기다. 스와핑이란이렇게분리된물리주소공갂을확장시키는기능으로메모리에서현재참조되지않는부분을디스크에저장하는기술을말한다. 물롞해당메모리가다시참조되는순갂디스크에서다시불려진다. 페이징은페이지테이블이라는것을통해서구현된다. 페이지테이블은논리주소를실제물리주소로맵핑시키는테이블이다. 즉 0x 이라는주소번지가실제물리메모리의어떤위치에기록되었는지를찾기위해서 CPU는페이지테이블참조해서실제메모리번지를알아내고, 그번지를접근해서데이터를읽는것이다. 이렇게함으로써실제로컴퓨터에탑재된물리메모리의양에상관없이더넓은주소공갂을사용하도록할수있다. 또한페이징을사용하는운영체제는응용프로그램에게실제그주소가어떤물리메모리에맵핑되었는지를감춤으로해서높은수준의추상화와보안성을가지게된다. 윈도우는이러한페이징기술을사용해서시스템의물리메모리의양에관계없이 32비트컴퓨터라면 4GB의논리적인주소공갂을제공해준다. 여기다윈도우는앞서설명한페이지테이블을프로세스별로관리해서각각의프로세스별로별도의메모리공갂을제공해준다. 이렇게분리된주소공갂을윈도우에서는가상메모리라부른다. 즉, 실제메모리가아닌가상의논리메모리란의미로이해하면되겠다. 3/13 페이지

4 가상메모리는해제 (FREE), 예약 (RESERVE), 할당 (COMMIT) 이라는세가지상태로관리된다. 해제상태는해당가상메모리에접근을할수없는단계이다. 이상태의메모리는페이지테이블이존재하지않는다. 예약단계는해당가상메모리에대한페이지테이블이생성된단계이다. 하지맊실제물리메모리가해당페이지에연결되지는않은단계다. 끝으로할당단계는해당가상메모리주소를사용할수있으며, 물리메모리가연결된단계다. 박스 1 유저메모리와커널메모리윈도우는커널과응용프로그램을위한메모리공갂을분리해서사용한다. 커널모드에서동작하는프로그램은모든메모리영역이참조가능하지맊, 일반응용프로그램은커널메모리에접근할수없다. 이렇게설정한이유는시스템의안정성을높이기위해서다. 응용프로그램이커널주요부의메모리를접근하지못하게맊듦으로써시스템내부상태가쉽게변경되는실수를막을수있기때문이다. < 그림 2> 에는일반적으로윈도우의메모리영역이분리된것이나와있다. 보통의경우윈도우는왼쪽그림과같이커널을위해상위 2GB의메모리를사용하며, 응용프로그램을위해하위 2GB 의메모리를사용한다. 오른쪽그림은 /3GB 옵션을사용해부팅한경우로이경우에커널메모리는 1GB로줄어들고, 유저메모리는 3GB로늘어난다. 그림 2 윈도우메모리구조 가상메모리할당 가상메모리함수는크게두가지군으로나뉜다. 일반함수와 Ex 함수가그것이다. Ex 함수는다른프로세스의메모리를조작할수있다는추가적인점외에는일반함수와기능면에서 100% 동일하다. 여기서는일반함수의사용법에대해서맊살펴본다. 가상메모리를할당하기위해서윈도우는 VirtualAlloc, VirtualAllocEx 라는두가지 API 를제공한다. VirtualAlloc 은현재프로세스의주소공갂에메모리를할당하는역할을한다. 앞서설명한것과 같이 VirtualAllocEx 함수는특정프로세스의주소공갂에메모리를할당하는기능을추가적으로 4/13 페이지

5 가지고있다. 이함수의원형은다음과같다. LPVOID VirtualAlloc(LPVOID lpaddress, SIZE_T dwsize, DWORD flallocationtype, DWORD flprotect); 첫번째인자인 lpaddress는할당할베이스주소번지를지정한다. NULL을지정하면시스템이알아서비어있는공갂을찾아서할당한다. lpaddress는예약 (MEM_RESERVE) 작업을수행하는경우에는내부적으로페이지할당단위의배수로조정된다. 또한할당 (MEM_COMMIT) 작업을수행하는경우에는페이지단위의배수로조정된다. 두번째인자인 dwsize 에는할당하려고하는메모리크기를지정한다. lpaddress 가 NULL 인경우 에 VirtualAlloc 함수는 dwsize 를페이지크기의배수배가되도록조정한다. lpaddress 가 NULL 이 아닌경우에는해당크기영역을포함하는모든페이지가포함되도록조정된다. fallocationtype 에는할당하려고하는타입을지정한다 (< 표 1> 참고 ). 예약과할당을한번에하 기위해서는 MEM_COMMIT MEM_RESERVE 와같이지정할수있다. 표 1 fallocationtype 값의의미값의미 MEM_COMMIT 메모리를할당한다. MEM_RESERVE 메모리를예약한다. MEM_RESET 해당페이지들을현재사용하지않는다는것을운영체제에알려준다. 해당페이지들은스왑되어서페이지파일에기록된다. 끝으로 fprotect 에는페이지보호속성을지정한다. fprotect 에는 < 표 2> 에나와있는값중하나 를지정한다. 여기에추가적으로 < 표 3> 에나와있는값을지정할수있다. 표 2 fprotect 값의의미값의미 PAGE_EXECUTE 이페이지는실행가능하다. 해당페이지에읽기, 쓰기접근을시도하는경우잘못된접근오류가발생한다. PAGE_EXECUTE_READ 이페이지는실행, 읽기작업이가능하다. PAGE_EXECUTE_READWRITE 이페이지는실행, 읽기, 쓰기작업이가능하다. PAGE_EXECUTE_WRITECOPY 이페이지는실행, 읽기, 쓰기작업이가능하다. 추가적으로기록시복사기능을가진다. VirtualAlloc, VirtualAllocEx, CreateFileMapping 함수는이플래그를지원하지않는다. PAGE_NOACCESS 이페이지는어떠한작업도허용되지않는다. CreateFileMapping 함 5/13 페이지

6 수는이플래그를지원하지않는다. PAGE_READONLY 이페이지는읽기작업맊가능하다. PAGE_READWRITE 이페이지는읽기, 쓰기작업이가능하다. PAGE_WRITECOPY 이 페이지는 기록 시 복사 기능을 가진다. VirtualAlloc, VirtualAllocEx 함수는이플래그를지원하지않는다. 표 3 fprotect에추가적으로지정할수있는값의의미값의미 PAGE_GUARD 이페이지는접근시에 STATUS_GUARD_PAGE_VIOLATION 예외가발생한다. PAGE_NOCACHE 이페이지는캐싱되지않는다. PAGE_WRITECOMBINE 이페이지는쓰기조합최적화기능을사용할수있다. 갂단하게함수사용방법에대해서살펴보았다. 할당과해제를하는실질적인코드는나중에자 세히살펴보도록하자. 박스 2 기록시복사 (Copy on write) 게으른최적화기법의대표적인방법으로동일한내용을참조하는경우에쓰기가발생하는경우에해당메모리를로컬메모리로복사하는것을의미한다. A와 B라는프로세스가모두 kernel32.dll을사용한다고가정해보자. 두프로세스가로딩되는시점에는메모리에는 kernel32.dll 이하나맊올라와있고, 두프로세스모두동일한영역을참조한다. A라는프로세스가 kernel32.dll의메모리를조작하면, 운영체제는해당메모리를 A프로세스영역에복사한다음변경한다. 일반적으로이미지의코드내용자체가변경되는경우는거의없기때문에이러한방식의최적화방법은매우효과적이다. 박스 3 쓰기조합최적화 (Write combine) 쓰기조합최적화란여러번의쓰기작업을운영체제가최적화시키는것을말한다. 예를들어, A 라는프로세스가 100번지에 A 라는값을쓰고, 또 B 라는값을기록하는두번의호출을했다면, 운영체제는두번째호출맊실제적으로수행하는것을말한다. 박스 4 GetSystemInfo VirtualAlloc 함수설명을보면페이지크기라는말과할당단위라는말이나온다. 페이지크기라는말은하나의페이지크기를나타낸다. 4GB의공갂을바이트단위로페이지테이블을맊든다면 4GB보다더큰메모리가페이지테이블을위해서필요할것이다. 이렇게된다면배보다배꼽이큰상황이되기때문에보통의운영체제는페이지를바이트단위가아닌그보다큰단위로관리한다. 이단위를페이지크기라고부른다. 할당단위는이러한페이지를관리하는테이블을몇개씩할당하는지를결정하는단위가된다. 이들은시스템에따라가변적으로관리된다. 윈도우에서 6/13 페이지

7 이러한정보를구하기위해서는 GetSystemInfo 라는함수를사용하면된다. void WINAPI GetSystemInfo(LPSYSTEM_INFO lpsysteminfo); GetSystemInfo의원형은위와같다. lpsysteminfo의 dwpagesize가페이지크기, dwallocationgranularity 가할당단위가된다. lpminimumapplicationaddress 와 lpmaximumapplicationaddress는각각응용프로그램에서접근할수있는최소메모리주소와최대메모리주소를담고있다. 가상메모리해제 VirtualFree, VirtualFreeEx 함수는할당된가상메모리를해제하는작업을한다. 앞서살펴본할당함수처럼 Ex함수는추가적으로특정프로세스의가상메모리를해제하는기능을가지고있다. VirtualFree 함수의원형은다음과같다. BOOL VirtualFree(LPVOID lpaddress, DWORD dwsize, DWORD dwfreetype); lpaddress 에는해제하고자하는가상메모리의시작번지를입력해준다. 두번째인자인 dwsize에는해제하려고하는가상메모리의크기를입력해준다. 여기서주의해야할점이있다. 맊약 dwfreetype이 MEM_RELEASE인경우에는이값을 0으로지정해야한다. 그러면할당된모든메모리가해제된다. 반대로 dwfreetype이 MEM_DECOMMIT인경우에는해제하고싶은메모리크기를입력하면된다. 이경우에는해당메모리를포함하는모든페이지가예약상태로바뀐다. 마지막인자는 MEM_RELEASE 와 MEM_DECOMMIT 중하나를선택해서지정하면된다. MEM_RELEASE 를지정하는경우에는 VirtualAlloc 시에할당된모든메모리를해제상태로변경하 는작업을한다. MEM_DECOMMIT 을하면해당메모리를예약상태로변경하는작업을한다. 할당과해제 가상메모리를할당하고해제하는함수에대해서살펴보았다. 안타깝게도이두함수는일반적인메모리관리함수보다는복잡하기때문에함수설명맊읽고는제대로사용하기가쉽지않다. 갂단한메모리할당 / 해제예를통해서두함수가동작하는방식을좀더세밀하게살펴보도록하자. 여기서우리는 0x10000부터 0x30000까지는 FREE 상태의메모리라고가정한다. 또한이시스템의페이지크기는 0x1000으로, 할당단위는 0x10000이라고가정한다. VirtualAllocEx(process, 0x10000, 0x8000, MEM_RESERVE, PAGE_READONLY) 7/13 페이지

8 위의호출이이루어지고나면메모리는두개의조각으로나뉘게된다. 0x10000부터 0x20000까지의메모리는 RESERVE 상태가되고, 0x20000부터 0x30000까지의메모리는 FREE 상태의메모리가된다. 여기서 0x10000부터 0x20000까지가예약상태의메모리가되는이유는할당단위가 0x10000이기때문이다. VirtualAllocEx(process, 0x12000, 0x1000, MEM_COMMIT, PAGE_READWRITE); VirtualAllocEx(process, 0x17000, 0x128, MEM_COMMIT, PAGE_EXECUTE); 이제메모리구조는좀더복잡해진다. RESERVE로예약된메모리중에서 0x12000부터 0x13000까지는실제메모리에맵핑되어서읽기 / 쓰기가가능한메모리영역으로사용된다. 0x17000부터 0x18000까지의영역또한실제메모리에맵핑되어서실행가능한메모리로사용이된다. 두번째할당의경우 0x128을할당했지맊, 가상메모리는페이지단위로관리되기때문에페이지크기의배수배로조정되어서 0x1000 맊큼이할당된것이다. 여기까지이루어진메모리할당구조를그림으로그려보면 < 그림 3> 과같이총 6개의구역으로나뉜다는것을알수있다. 그림 3 메모리레이아웃 VirtualAllocEx(process, 0x20000, 0x8000, MEM_RESERVE, PAGE_EXECUTE); VirtualAllocEx(process, 0x20000, 0x1000, MEM_COMMIT, PAGE_READWRITE); 메모리구조를조금복잡하게맊들기위해서위와같은두번의할당을더한경우의메모리구 조를생각해보자. 이상태의메모리레이아웃을그려보면 < 그림 4> 와같이된다. 그림 4 메모리레이아웃 이제할당된메모리의해제작업을해보도록하자. 해제작업을하기에앞서서먼저이해해야하는것은각메모리구역의할당단위다. 1,2,3,4,5 구역은구분되어있지맊실상은최초의 MEM_RESERVE를통해서확보된하나의할당구역에묶여있다. 마찬가지로 6,7도하나의할당구역에묶여있다. 이와같이동일한할당구역에존재하는메모리는 MEM_RELEASE를사용하면한번에모두해제 (FREE) 상태로변경할수있다. 8/13 페이지

9 다음과같이호출하면 1,2,3,4,5 구역에있는메모리는모두한번에해제 (FREE) 상태가된다. 이경우에한할당단위에포함된메모리중에할당 (COMMIT) 상태의구역이있는것은문제가되지않는다. 왜냐하면 VirtualFree 함수가내부적으로모두예약 (RESERVE) 상태로변경한다음해제 (FREE) 로변경하는작업을해주기때문이다. MEM_RELEASE를호출할때기억해야할사항은딱두가지다. 하나는 lpaddress에 MEM_RESERVE를할때의시작주소를넣어주어야한다는점이고, 다른하나는 dwsize에 0을넣어야한다는점이다. VirtualFreeEx(process, 0x10000, 0, MEM_RELEASE); 세부적으로할당 (COMMIT) 된메모리를예약 (RESERVE) 상태로변경하는방법을살펴보자. 6 번구 역메모리를예약 (RESERVE) 상태로변경하기위해서는다음과같이호출하면된다. VirtualFreeEx(process, 0x20000, 0x1000, MEM_DECOMMIT); 이때기억해야할점은 MEM_DECOMMIT 은 lpaddress 부터 dwsize 크기맊큼사이에포함된모든 COMMIT 된메모리를 RESERVE 상태로변경시킨다는점이다. 즉, 다음과같은호출또한 6 번구역 을 RESERVE 상태로맊들수있다는것이다. VirtualFreeEx(process, 0x20000, 0x1, MEM_DECOMMIT); VirtualFreeEx(process, 0x1F000, 0x1200, MEM_DECOMMIT); 그렇다면다음과같은 VirtualFreeEx 함수호출은위의페이지상태를어떻게변화시킬까? 이는 2, 4 번페이지를모두예약 (RESERVE) 상태로변경하는것을의미한다. VirtualFreeEx(process, 0x12000, 0x5000, MEM_DECOMMIT); 가상메모리상태조회및보호속성변경 VirtualQuery, VirtualQueryEx 함수는특정메모리영역의가상메모리정보를반홖해주는역할을한다. 특정메모리영역을우리가사용할수있을지판단할때사용하면된다. VirtualQuery 함수의원형은다음과같다. SIZE_T VirtualQuery(LPCVOID lpaddress, PMEMORY_BASIC_INFORMATION lpbuffer, SIZE_T dwlength); lpaddress 에는정보를알고싶은메모리의주소를입력한다. 9/13 페이지

10 lpbuffer 에는가상메모리정보가담길버퍼를입력해준다. 일반적으로 MEMORY_BASIC_INFORMATION 구조체를젂달해주면된다. MEMORY_BASIC_INFORMATION 구조 체는다음과같은구조로되어있다. typedef struct _MEMORY_BASIC_INFORMATION PVOID BaseAddress; // lpaddress가포함된메모리구역의시작위치 PVOID AllocationBase; // 할당시작위치 DWORD AllocationProtect; // 할당될때의보호속성 SIZE_T RegionSize; // 할당된메모리의크기 DWORD State; // FREE, RESERVE, COMMIT 등의메모리상태 DWORD Protect; // 현재해당메모리구역의보호속성 DWORD Type; // 메모리의타입을나타낸다 (< 표 4> 참고 ). MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; 표 4 메모리타입값 MEM_IMAGE MEM_MAPPED MEM_PRIVATE 의미실행파일이로딩되어사용되는메모리메모리맵파일로사용되는메모리 VirtualAlloc/VirtualAllocEx 등을사용해할당받은메모리 dwlength 에는 lpbuffer 의크기를입력해준다. 보통의경우 sizeof(memory_basic_information) 을지정하면된다. VirtualQuery 함수의사용법은어렵지는않지맊넘어오는구조체의정보를정확하게이해하기위해서는약갂의부연설명이필요할것같다. MEMORY_BASIC_INFORMATION 구조체의내용중에 AllocationBase와 BaseAddress, 그리고 AllocationProtect와 Protect의차이점이가장궁금할것이다. 앞쪽에 Allocation이붙은것은메모리가 RESERVE 될때의단위를말한다. 그리고그런것이없는것은 COMMIT되거나 COMMIT 됨으로해서분리된공갂들의구역을나타낸다. 앞쪽의메모리할당예제를통해서살펴보는것이좀더쉽게이해하는방법이다. < 그림 4> 와같이할당된메모리를생각해보자. 우선 2번구역에속한임의의포인터에대해서 VirutalQueryEx를수행하면그결과가어떻게나올까? AllocationBase는 0x10000, Base는 0x12000, AllocationProtect 는 PAGE_READONLY, Protect는 PAGE_READWRITE가나온다. 그리고끝으로 RegionSize는 0x1000 이된다. 1, 2, 3, 4, 5 구역에속한임의의포인터를질의하더라도모두 AllocationBase는 0x10000, AllocationProtect는 PAGE_READONLY 가나온다. 10/13 페이지

11 끝으로가상함수의보호속성을변경하는 VirtualProtect 함수에대해서살펴보자. 이함수는설 정된페이지의보호속성을변경하는역할을한다. 원형은아래와같다. BOOL VirtualProtect(LPVOID lpaddress, SIZE_T dwsize, DWORD flnewprotect, PDWORD lpfloldprotect); lpaddress에는변경할페이지의시작주소를, dwsize에는페이지크기를입력하면된다. fnewprotect에는변경할보호속성을지정하고, lpfloldprotect는현재보호속성을리턴받기위해사용된다. 현재보호속성을리턴받지않아도되는경우라도반드시합당한포인터를젂달해야한다. vmwalk < 리스트 1> 에는특정프로세스의가상메모리맵을보여주는 vmwalk 프로그램의소스가나와있다. vmwalk <pid> 와같은형태로사용하면 pid에해당하는프로세스의메모리영역을보여준다. 앞서설명한함수들을실제로어떻게사용하는지에초점을맞춰서보도록하자. 리스트 1 vmwalk 소스 #include <windows.h> #include <stdio.h> #include <tchar.h> LPVOID GetPtr(LPVOID address, SIZE_T offset) return (LPVOID)((DWORD_PTR) address + offset); int _tmain(int argc, TCHAR *argv[]) DWORD pid; if(argc < 2) pid = GetCurrentProcessId(); else pid = _tcstoul(argv[1], NULL, 10); HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); if(!process) printf(" 프로세스열기실패 \n"); return 0; printf(" 가상메모리레이아웃 : %d\n\n", pid); 11/13 페이지

12 SYSTEM_INFO si; GetSystemInfo(&si); LPVOID low = si.lpminimumapplicationaddress; LPVOID high = si.lpmaximumapplicationaddress; printf(" 접근가능메모리 : 0x%08X ~ 0x%08X\n", low, high); printf(" 메모리할당단위 : 0x%08X\n", si.dwallocationgranularity); printf(" 메모리페이지크기 : 0x%08X\n\n", si.dwpagesize); char *protect; char *state; BOOL guard, nocache, writecombine; MEMORY_BASIC_INFORMATION mbi; LPVOID addr = low; while(addr < high) if(virtualqueryex(process, addr, &mbi, sizeof(mbi))!= sizeof(mbi)) printf("vm 질의실패 \n"); break; switch(mbi.state) case MEM_FREE: state = "FREE"; break; case MEM_RESERVE: state = "RESERVE"; break; case MEM_COMMIT: state = "COMMIT"; break; default: state = "?"; break; guard = mbi.protect & PAGE_GUARD; nocache = mbi.protect & PAGE_NOCACHE; writecombine = mbi.protect & PAGE_WRITECOMBINE; mbi.protect &= ~(PAGE_GUARD PAGE_NOCACHE PAGE_WRITECOMBINE); switch(mbi.protect) case PAGE_READONLY: protect = "Read"; break; case PAGE_READWRITE: protect = "Read/Write"; break; case PAGE_EXECUTE: protect = "Execute"; break; case PAGE_EXECUTE_READ: protect = "Read/Execute"; break; case PAGE_EXECUTE_READWRITE: protect = "Read/Write/Execute"; break; case PAGE_NOACCESS: protect = "No Access"; break; case PAGE_WRITECOPY: protect = "Copy On Write"; break; case PAGE_EXECUTE_WRITECOPY: protect = "Execute/Copy On Write"; break; default: protect = "?"; break; 12/13 페이지

13 printf("0x%08x ~ 0x%08X %8s %22s %s %s %s\n", mbi.baseaddress, (DWORD_PTR)mbi.BaseAddress + mbi.regionsize, state, protect, guard? "Guard" : "", nocache? "No Cache" : "", writecombine? "Write Combine" : ""); addr = GetPtr(addr, mbi.regionsize); CloseHandle(process); 참고자료 찰스페졸드의 Programming Windows, 5th Edition Charles Petzold, 한빛미디어 Windows API 정복 김상형, 가남사 13/13 페이지

슬라이드 1

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

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

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

11장 포인터

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

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

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

<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

C# Programming Guide - Types

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

More information

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

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

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

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

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

BMP 파일 처리

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

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

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

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

untitled

untitled if( ) ; if( sales > 2000 ) bonus = 200; if( score >= 60 ) printf(".\n"); if( height >= 130 && age >= 10 ) printf(".\n"); if ( temperature < 0 ) printf(".\n"); // printf(" %.\n \n", temperature); // if(

More information

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드 취약점분석보고서 [Aviosoft Digital TV Player Professional 1.x Stack Buffer Overflow] 2012-08-08 RedAlert Team 강동우 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. 취약점요약... 1 1.3. 취약점정보... 1 1.4. 취약점대상시스템목록... 1 2. 분석...

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

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

제1장 Unix란 무엇인가?

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

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

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

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

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

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

More information

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D> 학습목표 통신프로그램이무엇인지이해한다. 을이용한 IPC 기법을이해한다. 함수를사용해프로그램을작성할수있다. IT CookBook, 유닉스시스템프로그래밍 2/20 목차 의개념 함수 해제함수 의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 의개념 파일을프로세스의메모리에매핑 프로세스에전달할데이터를저장한파일을직접프로세스의가상주소공간으로매핑 read, write

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

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

제 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

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

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 - o8.pptx

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

More information

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

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

DLL Injection

DLL Injection DLL Injection REVERSING CreateRemoteThread() 를중점으로 DLL Injection 에대하여설명 [ Rnfwoa] 김경민 목차 목차 1 개요 1 2 DLL ( Dynamic Link Library ) 2 3 AppInit_DLLs 3 4 원격스레드생성 5 4.1 핸들확보 6 4.2 공간할당 7 4.3 DLL Name 기록 8

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

슬라이드 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

< 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

2009년 상반기 사업계획

2009년 상반기 사업계획 메모리매핑 IT CookBook, 유닉스시스템프로그래밍 학습목표 통신프로그램이무엇인지이해한다. 메모리매핑을이용한 IPC 기법을이해한다. 메모리매핑함수를사용해프로그램을작성할수있다. 2/20 목차 메모리매핑의개념 메모리매핑함수 메모리매핑해제함수 메모리매핑의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 3/20 메모리매핑의개념 메모리매핑 파일을프로세스의메모리에매핑

More information

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers C Programming 포인터 (Pointers) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 포인터의이해 다양한포인터 2 포인터의이해 포인터의이해 포인터변수선언및초기화 포인터연산 다양한포인터 3 주소연산자 ( & ) 포인터의이해 (1/4) 변수와배열원소에만적용한다. 산술식이나상수에는주소연산자를사용할수없다. 레지스터변수또한주소연산자를사용할수없다.

More information

Microsoft PowerPoint - chap05-제어문.pptx

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

More information

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

설계란 무엇인가?

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

More information

chap 5: Trees

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

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

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

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

다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 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

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

C 언어 프로그래밊 과제 풀이

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

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

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

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

Debug Technique

Debug Technique Windows Hook Jerald Lee Contact Me : lucid7@paran.com 본문서는저자가 Windows Hook을공부하면서알게된것들을정리할목적으로작성되었습니다. 본인이 Windows System에대해아는것의거의없기때문에기존에존재하는문서들을짜집기한형태의문서로밖에만들수가없었습니다. 문서를만들면서참고한책, 관련문서등이너무많아일일이다기술하지못한점에대해원문저자들에게매우죄송스럽게생각합니다.

More information

본 강의에 들어가기 전

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

More information

PowerPoint 프레젠테이션

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

More information

OCW_C언어 기초

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

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

2009년 상반기 사업계획

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

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

Content 1. DLL? 그게뭐야?

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

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

좀비프로세스 2

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

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED

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

PowerPoint Presentation

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

More information

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

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

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

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

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

<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++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

[Immunity Debugger & Python (Part 1)] Written by Osiris ( , msn by beistlab(

[Immunity Debugger & Python (Part 1)] Written by Osiris ( , msn by beistlab( [Immunity Debugger & Python (Part 1)] Written by Osiris (email, msn mins4416@naver.com) by beistlab(http://beist.org) Synopsis Immunity Debugger는 Python을플러그인형태로지원하고있습니다. 이 2개를연동할경우강력한 Reverse Engineering

More information

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

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

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

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

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

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터(강의) 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - 제11장 포인터 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

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

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

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

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 Word - MSOffice_WPS_analysis.doc

Microsoft Word - MSOffice_WPS_analysis.doc MS Office.WPS File Stack Overflow Exploit 분석 (http://milw0rm.com/ 에공개된 exploit 분석 ) 2008.03.03 v0.5 By Kancho ( kancholove@gmail.com, www.securityproof.net ) milw0rm.com에 2008년 2월 13일에공개된 Microsoft Office.WPS

More information

슬라이드 1

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

More information

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

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

More information

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint APUE(Intro).ppt 컴퓨터특강 () [Ch. 1 & Ch. 2] 2006 년봄학기 문양세강원대학교컴퓨터과학과 APUE 강의목적 UNIX 시스템프로그래밍 file, process, signal, network programming UNIX 시스템의체계적이해 시스템프로그래밍능력향상 Page 2 1 APUE 강의동기 UNIX 는인기있는운영체제 서버시스템 ( 웹서버, 데이터베이스서버

More information

쉽게 풀어쓴 C 프로그래밍

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

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

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