운영체제/[ecourse] Windows Programming
2-2. 실행 파일 포맷
헛둘이
2022. 9. 7. 12:58
본 글은 코드누리의 Windows Programming 강좌를 개인 학습 목적으로 정리한 글 입니다.
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의 어떤 함수를 사용하는지 확인할 수 있다.