LOAD함수를 사용하여 실행 파일 동적할당 받은 영역에 올린 후 메모리의 어떻게 적재 되어 있는지 확인해 보자.
LOAD함수가 실행되면 우선 사용자로부터 실행파일명을 입력 받고 파일이 존재하는지 검사 후 파일이 존재하면 파일을 동적 할당 받은 메모리에 적재한다.
프로그램 적재 후 코드와 데이터 영역을 메모리에 적재하는데 이 때 각 영역의 주소를 알아내기 위해서 PE 파일 포맷에 대해 알아야 한다.
해당 블로그에 자세한 설명이 나와 있음으로 참고한다.
http://haerakai.tistory.com/18
우선 PE 파일 포맷의 전체적인 구조를 살펴보자.
헤더와 섹션으로 구분이 되어 있다. 헤더 부분은 각 섹션에 대한 주요 정보를 담고 있으며 헤더의 정보를 참조하여 각 섹션으로 이동할 수 있다.
우선 IMAGE_DOS_HEADER를 살펴보자.
//구조체의 원형은 Windows.h에 담겨 있음으로 헤더파일을 추가한다.
//#include <Windows.h>
다음 섹션으로 넘어가기 위해 보아야 할 구조체의 멤버는 ‘e_lfanew'이다. 4byte로 되어 있으며 다음 헤더의 주소를 담고 있다.
이를 통해 다음 헤더인 IMAGE_INT_HEADER로 이동한다.
Signature는 4byte임으로 이를 포인터의 주소를 4byte이동 시킨 후 IMAGE_FILE_HEADER를 가리키게 한다.
IMAGE_FILE_HEADER의 멤버인 SizeOfOptionalHeader에 말 그대로 Optional_Header의 크기가 담겨져 있다. 이를 활용하여 Optional_Header의 주소에서 Optional_Header의 크기만큼을 더하면 SECTION_TABLE로 넘어갈 수 있다.
SECTION헤더에서 각 헤더에 대한 크기와 위치가 저장되어 있다. 이것을 활용하여 원하는 섹션의 위치에 데이터를 집어 넣으면 된다.
/*** 코드 ***/
어제 멍때려서 이것도 얻어서 올립니다..
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151027_ContextSwitchig_소스&결과 (0) | 2015.10.27 |
---|---|
20151027 -여지윤- 소스파일 (0) | 2015.10.27 |
20151026-23번-업무일지-이량경_ASM { go함수 } , linux { 웹페이지를 통해 LED제어 } (13) | 2015.10.27 |
20151023(금) 윤재희 - GPIO를 통한 웹서비스 메시지 제어, 메모리 출력 함수, 프로그램 실행 함수 (9) | 2015.10.23 |
load함수(우대희군이 알려준 방법으로 구현) (2) | 2015.10.23 |
load함수 참고하세요.. (6) | 2015.10.23 |
20151020-21번-여지윤 GPIO6/모니터프로그램 (15) | 2015.10.21 |
20151020 엄민웅 armCortex3 TIM, asm MEMORY_MODIFY (6) | 2015.10.20 |