지난 리버싱 포스팅에서 가상주소공간의 이론에 대해 알아보았고,
오늘은 실습을 통해 가상주소공간의 실제 구조가 어떻게 구성되어 있는지 알아보자
사용할 툴은 x64dbg
계산기 프로그램 calc.exe을 로드해 보자
(경로는 C:\Windows\System32\calc.exe)
프로세스의 부모자식 관계를 파악하기 위해서는 process explorer64/procexp64.exe를 사용할 수 있다
위에서 x64dbg안에 calc.exe를 실행했기 때문에
procexp64안에서도 x64dbg.exe의 하위에서 calc.exe가 위치해 있는 것이 확인된다.
x64dbg의 메모리탭 Memory Tab에 들어가서 calc.exe가 로드된 주소,
DLL 파일 로드 주소, 권한 등을 확인할 수 있음
→ calc.exe가 로드된 주소가 00007FF77E800000 라는게 확인되고 .text 등의 섹션들도 확인가능
각 섹션의 권한(protection)들도 모두 확인가능하고
프로세스 실행에 필요한 추가 dll 라이브러리도 모두 함께 로드된 것을 알 수 있다.
calc.exe가 로드된 주소가 00007FF77E800000 라는것을 확인했는데
두 번째 계산기 프로그램을 실행하면 가상주소공간이 어떻게 되는지 살펴보자!
x64dbg와 calc.exe를 각각 실행해 보면 둘 다 vas가 동일하다
그런데
process explorer를 보면 PID가 전혀 다르고 있으므로 전혀 다른 프로세스이고
가상주소만 동일한 뿐 물리주소는 겹치지 않게 매핑되어 있다!
storage에 있는 calc.exe라는 프로그램이 두 개가 실행되면 같은 vas를 사용해도
매핑테이블 덕분에 실제로는 메모리 상의 다른 물리주소에 로드되는 것!
그리고 두 프로세스가 동일한 라이브러리를 사용할 경우 중복으로 매핑할 필요 없이
같은 위치를 공유하여 메모리를 효율적으로 사용할 수 있음
'리버싱' 카테고리의 다른 글
PE 파일의 자료구조 헤더 분석 실습 Stud_PE, x32 dbg (0) | 2025.02.21 |
---|---|
윈도우 실행파일 PE파일의 구조와 PE 헤더를 알아보자 (0) | 2025.02.19 |
운영체제 프로세스 가상주소공간 Virtual Adress Space (0) | 2025.02.17 |
윈도우 실행파일의 생성과 실행과정 (0) | 2025.02.17 |
[리버싱] Assembly 어셈블리어 (0) | 2025.02.14 |