본문 바로가기
코스웨어/14년 스마트컨트롤러

20140822 진행중인소스

by 알 수 없는 사용자 2014. 8. 22.
728x90
반응형

#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);

}



728x90