본문 바로가기
reversing

PE File Format 구조

by 코끼리_땃쥐 2022. 11. 25.
반응형

DOS header 부터 Section header 까지를 PE 헤더 , 그 밑의 Section들을 합쳐서 PE 바디(Body) 라고 합니다. 파일에서는 offset으로, 메모리에서는 VA(Virtual Address, 절대주소)로 위치를 표현합니다. 파일이 메모리에 로딩되면 모양이달라집니다. (Section의 크기, 위치 등) 파일의 내용은 보통 코드(.text), 데이터(.data), 리소스(.rsrc) 섹션에 나뉘어서 저장됩니다

섹션 헤더에 각 Section에 대한 파일/메모리에서의 크기, 위치, 속성등이 정의되어 있습니ㅏㄷ. PE 헤더의 끝부분과 각 섹션의 끝에는 NULL Padding이라고 불리우는 영역이 존재합니다. 컴퓨터에서 파일. 메모리, 네트워크 패킷 등을 처리할 때 효율을 높이기위해 최소 기본단위 개념을 사용하는데, PE 파일에도 같은 개념이 적용된 것입니다. 파일/메모리에서 섹션의 시작위치는 각 파일/메모리의 최소 기본단위의 배수에 해당하는 위치여야 하고, 빈공간은 NULL 로 채워버립니다.(그림을 보면 각 섹션의 시작 주소가 어떤 규칙에 의해 딱딱 끊어지는 걸 볼수 있습니다.)

 

VA & RVA

VA(Virtual Address)는 프로세스 가상 메모리의 절대주소를 말하며, RVA(Rela-tive Vitrual Address)는 어느 기준 위치(Image Base)에서 부터의 상대 주소를 말합니다. VA와 RVA의 관계는 다음 식과 같습니다.

 

RAV + Image Base = VA
상대주소 + 기준위치 = 가상메모리의 절대주소

 PE 헤더 내의 정보는 RVA 형태로 된 것이 많습니다. 그 이유는 PE파일 (주로 DLL)이 프로세스 가상 메모리의 특정 위치에 로딩되는 순간 이미 그 위치에 다른 PE파일(DLL)이 로딩되어 있을 수 있습니다. 그럴 때 재배치(Relocation) 과정을 통해서 비어 있는 다른 위치에 로딩되어야 하는데 만약 PE 헤더 정보들이 VA(Virtual Address, 절대주소)로 되어 있다면 정상적인 엑세스가 이루어지지 않을 것입니다. 그러므로 정보를 RVA(Rela-tive Virtual Address, 상대주소)로 해두면 Relocation이 발생해도 기준위치에 대한 상대주소가 변하지 않기 때문에 아무런 문제없이 원하는 정보에 엑세스 할 수 있는 것 입니다.

반응형

'reversing' 카테고리의 다른 글

PE File Format 중요 멤버 간단정리  (0) 2022.12.05
IMAGE_FILE_HEADER - OPTINAL_HEADER  (0) 2022.11.29
바이트 오더링  (0) 2022.11.03
고급 안티 디버깅  (0) 2022.10.20
안티 디버깅 Dynamic  (1) 2022.10.05

댓글