김승현
KISA Academy - 리버스 코드 엔지니어링 중급 (1~3강) 본문
1강 [이론] 윈도우 실행파일의 생성 및 실행과정
포노이만 구조에 의해 실행파일의 실행 과정은
스토리지 저장 - 메모리에 로드 - CPU에 의해 실행
스토리에선 실행파일의 형태가 아닌 a.c와 같은 코드의 형태
c언어 코드는 사람을 위한 문법으로 작성된 것 -> 고급언어 (java, c, c++)
위의 c언어와 같은 고급언어를 cpu가 이해할 수 있는 머신언어로 컴파일하는 과정이 필요함
컴파일이란?
기계가 이해할 수 있게 번역하는 과정이라 볼 수 있음
컴파일 과정 중 문법체크는 필수
기계어로 번역된 게 컴파일 후 나온 아웃풋인데 이걸 .obj인 오브젝트 파일이 나옴
java에선 a.java가 a.class파일이 되는 것과 동일함
아래는 예시
exam.c -> exam.obj
exam.java -> exam.class
이렇게 기계어가 되었다 해도 바로 실행 가능한 건 아님
obj는 실행하기에 적합하지 않음 단순한 번역된 파일인듯?
- 로드될 메모리 주소 x
- 처음 실행될 코드의 주소 x
- 함수, 라이브러리 정보 x (messageBox를 띄우려고 해도 이걸 할 수 없음)
위의 문제들을 해결하기 위한 링킹을 해야 함 (링킹이 위의 내용들을 모두 포함한 동작을 함)
링커가 링킹을 마치면 실행파일이 생성되고,
이 생성된 실행파일을 더블클릭시 RAM(메모리)에 적재가 됨
storage엔 a.c, a.obj같은 것들이 적재가 되고 memory엔 a.exe 같은 것들이 적재가 되는 것
위 행위들은 CPU가 다 시킴. Command Center임.
cpu 안에 있는 산술논리연산 - ALU(Arithmetic Logic Umit)에 버스를 타고 이동함 -> CPU의 기계어 코드를 이해하는 부품
2강 [이론] 운영체제의 프로세스 가상주소공간
프로그램 간 물리 메모리 공유로 인한 문제에 대해 다루는 챕터
가상 주소 공간의 등장 배경
Process A, B, C의 실행파일들이 물리 메모리인 RAM에 적재가 될 때 각 프로세스는 RAM의 일정부분에 매핑이 됨
But, 이 공간이 겹친다면??
배경
- 충분하지 않은 메모리 문제
- 32비트 아키텍쳐의 경우 4GB까지 표현이 가능, 2GB의 RAM의 경우 모두 사용 가능하지만 8GB라면? -> 4GB만 사용 가능
- 만약 2GB의 RAM인데 아키텍쳐가 2GB를 넘어서는 주소 값을 이용하려고 하면? -> crash 발생 !
- 프로그램 간 사용 메모리 접근 통제 문제
- 동일한 물리 메모리 정보에 접근하여 데이터를 읽고 쓰는 경우 데이터 오염 등 보안 issue 발생
- 단편화로 인한 메모리 낭비 문제
- 근본적인..문제?
위 문제들은 물리 메모리를 공유하기 때문 -> 가상 주소 공간의 등장
가상 메모리의 운용 개념
프로세스에게 독립적이고 베타적으로 사용 가능한 가상의 주소 공간을 부여
실행 예시 - a.exe 실행
1. a.exe의 가상 메모리에 a.exe 적재 (가상메모리의 30번지에 적재했으면 20~30번지에 저장됨 )
2. 물리 메모리에 그대로 20~30번지에 적재되는 것이 아닌 50~60번지 등 이런 식으로 적재
3. b.exe도 동일함, 가상 메모리 20-30에 적재되어도 물리 메모리에선 10-20번
-> 프로세스는 물리 메모리 주소 공간을 바라볼 수 없고 직접 접근할 수 없음
Mapping Table
Process | VAS( Virtual Address Space) | PAS (Pysical Address Space) |
a.exe | 20-30 | 50-60 |
b.exe | 20-30 | 10-20 |
윈도우 설정에서 storage에 page 파일을 몇 기가로 설정할 거냐는 질문을 볼 수 있음
유휴 상태인 프로세스의 메모리 공간의 사용, 공간의 효울성을 위해 page file을 storage에 둠
여기선 물리 메모리의 부족한 걸, 오랫동안 사용하지 않는 걸 여기에서 실행한다. storage의 저장매체 내의 파일이지만 이걸 실제 메모리처럼 사용하는 방식 (disk, storage, page file = page out이라고 부름)
-> 가능한 이유는? => mapping table이 있기 때문! (보안 문제 해결 및 공간 부족 해결)
3강 [실습] 프로세스의 가상주소공간 이해를 위한 검증실습
가상 주소 공간의 핵심 keyword - 매핑
매핑 테이블을 이용하 가상 주소 공간과 물리 주소 공간을 연결함.
각 프로세스가 가상 주소 공간 내 동일한 주소를 사용하더라도 물리 주소 공간에선 다를 수 있음
위 메모리는 가상 메모리로 다른 것들과 주소 값이 겹칠 수 있는데 이는 가상 주소 공간이기 때문에 같은 주소 값을 가질 수 있지만 실제 물리 주소 공간은 다르다!
protection은 쉽게 말해서 권한(RW, ER, R....)
'교육 > KisaGym' 카테고리의 다른 글
KISA Academy - 리버스 코드 엔지니어링 중급 (24~26강) (0) | 2024.07.13 |
---|---|
KISA Academy - 리버스 코드 엔지니어링 중급 (21~23강) (0) | 2024.07.12 |
KISA Academy - 리버스 코드 엔지니어링 중급 (16~20강) (1) | 2024.07.12 |
KISA Academy - 리버스 코드 엔지니어링 중급 (13~15강) (0) | 2024.07.11 |
KISA Academy - 리버스 코드 엔지니어링 중급 (4~12강) (0) | 2024.07.08 |