메모장 입니다2
Windows] 파일 맵핑 본문
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 |