본문 바로가기

Information Technology/File Format7

MS-DOS Stub Program 시작점에서부터 IMAGE_DOS_HEADER의 사이즈인 64Bytes 만큼 떨어진 곳에서 찾을 수 있다. 이 부분은 IMAGE_DOS_HEADER와 같은 구조체가 아닌 이름 그대로 프로그램이다. 일반적인 실행파일처럼 실행한다. 이 프로그램에는 "This program cannot be run in DOS mode."라는 문자열을 볼 수 있다. 32bit 프로그램을 도스(16bit)에서 실행할 때 위의 문자열을 출력(16bit 환경에서 실행 하는 것을 방지하는 역할) 해주는데 쓰인다. 그래서 현재는 사용하지 않는 부분이다. 이 부분은 개발 환경 등에 따라 크기가 가변적이다. (MS-DOS Stub Program의 크기가 가변적이기 때문에 IMAGE_DOS_HEADER의 e_lfanew의 값이 가변적이게 되.. 2013. 4. 24.
IMAGE_DOS_HEADER 64byte(0x40)의 고정된 크기를 가지며, 디스크상의 첫 부분과 메모리상 ImageBase에 위치하고 있다. ImageBase는 프로세스의 가상 메모리 0 ~ FFFFFFFFh 범위(32bit의 경우)에서 PE파일이 로딩(매핑)되는 시작 주소를 나타내는 부분이다. DOD Header의 처음 2byte는 DOS Header 구조체의 e_magic 인자로 MZ로 시작한다. 이는 DOS 개발자 가운데 한명인 Mark Zbikowski의 이니셜로 DOS Header의 시그니쳐로 사용하고 있다. e_magic은 MZ를 나타내는 첫 2bytes 로 DOS Header 의 식별자이고, 마지막의 e_lfanew는 가변적인 값을 가지는 것으로 PE Header(NT header)의 주소를 알아볼 수 있다. e_lf.. 2013. 4. 24.
Runtime Data Areas의 구조 Runtime Data Areas는 Process로서의 JVM이 프로그램을 수행하기 위해 OS로부터 할당 받는 메모리 영역이다. Runtime Data Areas는 각각의 목적에 따라 5 개의 영역으로 나뉜다. PC Registers Java Virtual Machine Stacks Native Method Stacks Method Area Heap 이 중에서 앞의 세가지 메모리 영역, 즉 PC Register와 두 개의 Stack 영역은 각 Thread 별로 생성이 되고 Method Area 와 Heap은 모든 Thread에게 공유된다. 2013. 4. 18.