메모장 입니다2

Windows] 파일 맵핑 본문

Study/Programming

Windows] 파일 맵핑

Wooum@n 2018. 1. 30. 22:07

1.설명


 -파일을 메모리에 그대로 로드시킨 뒤, 디스크와 연결해준다고 함.

>연결 후엔 오브젝트를 생성해주고, 그 오브젝트를 통해 매핑된 파일에 접근 가능.

>큰 용량의 파일일 경우, 기존의 방법(Read/Write)보다 빠름.

 



2.예제 소스


//이상한 이름들이 보이는건 리버싱 문제풀이용으로 사용했던 것이기 때문

//함수명만 보면 됨


#include <windows.h>

#include <stdio.h>



#define FILE_NAME L"c:\\work\\CSHARP.exe"


int main(int argc, char *argv[])

{

HANDLE hF, hMapF;

DWORD f_size, offset;

DWORD area_size;

LPWSTR f_start, f_end;

PCHAR bb;


hF = CreateFileW(FILE_NAME, GENERIC_READ | GENERIC_WRITE, 0,

NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);




f_size = GetFileSize(hF, NULL);




hMapF = CreateFileMapping(

hF,                          //file handle

NULL,

PAGE_READWRITE,

0,                           //file size

0,                           //file size

NULL);                    //map name


if (hMapF == NULL)

{

printf("CreateFileMapping() fail");

CloseHandle(hF);

return 1;

}



f_start = (LPWSTR)MapViewOfFile(hMapF, FILE_MAP_ALL_ACCESS, 0, 0, 0);

f_end = (LPWSTR)((DWORD)f_start + f_size);



offset = 0x538;

area_size = 0xea;

int i = 0;


for (bb=(PCHAR)((DWORD)f_start+offset); i < area_size; i++)

{

printf("%1x\n", (BYTE)*(bb+i));

}




//메모리 내용을 강제로 파일에 쓴다.  //말 그대로 fflush

FlushViewOfFile(bb, 0);




UnmapViewOfFile(bb); //fflush 해주지 않을 경우, unmap되는 순간 변경된 파일 내용이 디스크에 저장됨


CloseHandle(hMapF);


CloseHandle(hF);



return 0;

}



'Study > Programming' 카테고리의 다른 글

codility] Nesting  (0) 2018.02.05
codility] Fish  (0) 2018.02.04
project] 도서 관리  (0) 2018.01.30
codility] Brackets  (0) 2018.01.29
알고리즘]  (0) 2018.01.26