프로세스의 가상주소공간 VAS 검증을 위한 실습 x64dbg
지난 리버싱 포스팅에서 가상주소공간의 이론에 대해 알아보았고,
오늘은 실습을 통해 가상주소공간의 실제 구조가 어떻게 구성되어 있는지 알아보자
사용할 툴은 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를 사용해도
매핑테이블 덕분에 실제로는 메모리 상의 다른 물리주소에 로드되는 것!
그리고 두 프로세스가 동일한 라이브러리를 사용할 경우 중복으로 매핑할 필요 없이
같은 위치를 공유하여 메모리를 효율적으로 사용할 수 있음