20140822 진행중인소스
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <windows.h>
#define MAX_PROGRAM_SIZE 0x10000
static unsigned char * Mem; // 동적 메모리 시작 주소
static unsigned char * Mem_End; // 동적 메모리 끝 주소
static unsigned char * code; // 프로그램 저장공간의 시작 위치 - Code
int File_DS; // 저수준 파일의 데스크립터
void load();
int main()
{
Mem = malloc(MAX_PROGRAM_SIZE*2);
if(0 == Mem)
{
printf("동적 할당을 받을 수 없습니다.\n");
printf("프로그램을 종료합니다.\n");
return 0;
}
else
{
code = Mem;
Mem_End = Mem + MAX_PROGRAM_SIZE*2 - 1;
printf("Dynamic Memory area\t: 0x%08X to 0x%08X (128KBytes)\n", Mem, Mem_End);
}
load();
free(Mem);
return 0;
}
void load()
{
int Read_Num;
int Header_Size;
IMAGE_DOS_HEADER * stpDH;
IMAGE_NT_HEADERS * stpPH;
IMAGE_FILE_HEADER * stpFH;
IMAGE_OPTIONAL_HEADER32 * stpOH;
File_DS = open("t1.exe", O_RDONLY);
if(File_DS < 0)
{
printf("파일 열기 실패.\n");
return;
}
Read_Num = read(File_DS, code, MAX_PROGRAM_SIZE*2);
if(0 >= Read_Num)
{
printf("파일 읽기 실패.\n");
close(File_DS);
return;
}
stpDH = (IMAGE_DOS_HEADER *)code;
stpPH = (IMAGE_NT_HEADERS *)(code + stpDH->e_lfanew-1);
stpFH = (IMAGE_FILE_HEADER *)( ((char *)(stpPH)) + 4 );
stpOH = (IMAGE_OPTIONAL_HEADER32 *)( ((char *)(stpFH)) + sizeof(IMAGE_FILE_HEADER));
Header_Size = stpOH->SizeOfHeaders; // Header size
close(File_DS);
}