리버싱/리버싱 입문

리버싱 입문 1장 1. 리버싱을 위한 프로그램 실행 구조

상세 2021. 3. 4. 23:11

PE 파일

윈도우에서 실행 파일을 부르는 이름

 

헤더와 보디 

헤더에는 배치 정보가 들어있고 보디에는 코드와 데이터가 들어 있음.

 

PE 포멧 실행시

1.운영체제의 로더가 PE 헤더에 있는 정보를 분석해 PE 보디에 있는 코드와 데이터를 메모리에 배치

2. PE 파일이 메모리에 로딩 될시 코드 영역과 (프로그래머가 만든 함수 등과 같은 코드) 데이터 영역(정적 변수와 전역변수)에 자료가 들어감. 

3. 프로그램이 실행시 스택 영역에 (흔히 아는 지역 변수와 함수의 매개변수) 히프 영역(그 C언어 malloc()함수로 동적할당한 거)에 데이터가 쌓인다.

 

엔트리 포인트

main() 함수처럼 첫번째로 실행되는 위치이자 PE 파일 실행이 시작되는 주소.

운영체제가 알아서 메모리에 있는 PE 파일을 실행하려고 헤더 정보에서 엔트리 포인트를 찾아서 

거기부터 시작함.

 

컨텍스트 스위칭 (Context Switching)

프로그램이 CPU 사용이 끝나면 다른 프로그램에 CPU 사용 권한을 넘겨주는것, 그때 사용하고 있던 모든 레지스터를 메모리 영역으로 복사 해두는 것.

 

너무 딱딱하다... 이 책은 정말 잘 설명해주는 편이지만 분야갸 분야다 보니 딱딱해질수밖에 없는것 같다.

 

 

필자가 기억하기 편하게 적어 놓은것

 

엔트리 포인트 : 엔트리가 엔터와 발음이 비슷하니 들어가는 주소라고 기억

 

컨텍스트 스위칭 : 음...유산상속이라고 생각하자. CPU사용이 끝나면 (부모의 명이 다하면) CPU 사용 권한을 넘겨주는것 (유산상속) 모든 레지스터를 메모리 영역으로 복사 (음... 이건 그냥 외우자 ^^)