운영체제/[ecourse] Windows Programming

2-2. 실행 파일 포맷

헛둘이 2022. 9. 7. 12:58

본 글은 코드누리의 Windows Programming 강좌를 개인 학습 목적으로 정리한 글 입니다.

https://www.ecourse.co.kr/

 

ecourse 온라인 강의 – S/W 교육의 새로운 시도

개강 예정 과정입니다. {"title":"\uac1c\uac15 \uc608\uc815 \uacfc\uc815\uc785\ub2c8\ub2e4.","show_title":"1","post_type":"course","taxonomy":"course-cat","term":"COMMINGSOON","post_ids":"","course_style":"popular","featured_style":"course","masonry

www.ecourse.co.kr

 

 

PE 포맷
  • 실행파일은 복잡한 구조로 되어 있는데 그걸 PE 포맷이라고 한다.
  • 헤더는 MS도스가 있는데 과거와의 호환성 때문에 존재한다.
  • 여기서 NT 헤더가 중요한데, 실행파일이 실행될 때 몇 번지 메모리로 올라와야 하는지 정보가 담겨 있음

  • (메모리 주소, 스택 크기 등등)

 


PE BODY

 

#include <iostream>
using namespace std;


int main()
{
	char* arr = (char*)malloc(256 * sizeof(char));
	memset(arr, 0, 256 * sizeof(char));

	const char* message = "Hello world!";
	memcpy(arr, message, strlen(message) + 1);

	printf("%s\n", arr);

	free(arr);
}

 

Section .text
  • 우리가 만든 코드 부분의 기계어 코드가 들어가는 곳.

 

Section .rdata
  • read-only data가 들어가는 곳
  • 문자열 상수 같은 읽기 전용 값들이 들어간다.

 

Section .idata
  • Directory Table - 프로그램이 사용하는 dll 파일이 어떤 파일인지 확인할 수 있다.

 

  • Name Table - 어떤 dll의 어떤 함수를 사용하는지 확인할 수 있다.