스토리지 레이아웃
스토리지 레이아웃이란 가상 프로세스 메모리 구성프로그램이 실행될 때 운영 체제는 가상 메모리라는 사용 가능한 메모리 공간을 프로세스에 할당합니다.
운영체제는 프로그램 정보와 관련되어 있으므로 프로그램에 저장된 데이터는 적절한 영역에 저장된다. 프로세스에서 사용하는 가상 메모리 용도별 공유프로세스에서 사용하는 데이터 적절한 구획에 보관유사한 데이터를 그룹화함으로써 운영 체제는 각 구획에 적절한 권한을 할당할 수 있으며 개발자는 프로세스의 메모리를 보다 직관적으로 이해할 수 있습니다.
리버스 엔지니어링 소프트웨어의 핵심은 바이너리를 분석하여 동작을 이해하는 데 있습니다. 바이너리가 동작하는 방식은 메모리와 매우 밀접한 관련이 있기 때문에 바이너리가 어떻게 동작하는지 자세히 이해하기 위해서는 바이너리가 상호작용하는 메모리를 이해하는 것이 필요하다.
프로세스 메모리 구조
윈도우 PE 파일 PE 헤더와 하나 이상의 섹션으로 구성되었습니다 부분이란 유사한 목적으로 사용하기 위해 데이터를 수집하는 영역오전. 예를 들어 “.text.” 섹션에는 PE의 코드가 포함되고 “.data”에는 PE 실행 중에 참조되는 데이터가 포함됩니다.
부분
섹션에 대한 정보는 PE 헤더에 기록됩니다. PE 헤더에 저장되는 섹션 관련 데이터 중 다음 4가지가 중요하다.
- 의 섹션 성
- 의 섹션 크기
- 로드된 섹션 주소 오프셋
- 의 섹션 속성 및 권한
Windows는 PE를 실행할 때 이 정보를 참조하여 PE의 각 섹션을 가상 메모리의 적절한 세그먼트에 매핑합니다. PE에 있어야 하는 섹션은 정의되어 있지 않으나 일반적으로 .text., .data, .rdata 섹션을 사용한다.
.텍스트
.text 섹션은 실행 가능한 기계 코드위치하고 있는 지역입니다.
프로그램이 작동하려면 코드를 실행할 수 있어야 하므로 이 세그먼트에는 다음이 포함됩니다.권한 부여 및 실행 권한 부여반면에 쓰기 액세스는 대부분의 최신 운영 체제와 마찬가지로 공격자가 악성 코드를 쉽게 주입할 수 있도록 합니다. 쓰기 권한 제거하다.

.데이터
.data 섹션에서 컴파일 시간에 값이 설정되는 전역 변수CPU가 이 섹션에서 데이터를 읽고 쓸 수 있어야 하기 때문에 읽기/쓰기 권한부여된다

.rdata
.rdata 섹션에서 컴파일 타임에 값이 결정되는 전역 상수와 참조할 DLL 및 외부 함수에 대한 정보.CPU가 이 섹션의 데이터를 읽을 수 있어야 하기 때문에 저장됩니다. 읽기 권한 부여됨하지만 쓸 수 없다하다.

위 코드에서 str_ptr 변수에 주목하십시오. str_ptr은 문자열 “readonly”를 가리킵니다. str_ptr은 전역 변수로 .data에 있지만 “readonly”는 상수 문자열로 취급되며 .rdata에 있습니다.
과거에는 참조할 DLL 및 외부 함수에 대한 정보가 .idata 섹션에 저장되었지만 최근에는 대부분 .rdata에 저장됩니다.
비섹션 메모리
Windows의 가상 메모리 영역에 섹션이 로드될 뿐만 아니라 프로그램 실행에 필요한 스택과 힙도 가상 메모리 영역에 로드됩니다.
스택
Windows 프로세스의 각 스레드에는 자체 스택 공간이 있습니다. 자주 로컬 변수 또는 함수의 반환 주소를 저장합니다.이 영역은 자유롭게 읽고 쓸 수 있어야 하므로 읽기/쓰기 권한을 부여합니다. 스택이 확장되면 원래 주소보다 낮은 주소로 확장되기 때문이다.

더미
다양한 용도로 프로그램에 할당된 저장 공간입니다. 그러므로 모든 종류의 데이터 저장 가능. 스택보다 상대적으로 큰 데이터를 저장할 수 있고 전역적으로 액세스할 수 있다는 점에서 스택과 다릅니다. 또한 실행 중에 동적으로 할당된다는 점에서도 다릅니다. 권한은 데이터를 읽고 쓰기만 하기 때문에 보통 읽기/쓰기만 가능하지만 상황에 따라 실행 권한을 가지는 경우도 있습니다.
다음 코드는 heap_data_ptr에 malloc()으로 동적으로 할당된 영역의 주소를 할당하고 그 값을 이 영역에 쓰는 것이다.

요약

