PE에서의 VA(Virtual Address), RVA(Relative Virtual Address), RAW(File Offset)PE(Windows)말고, Linux에서도 마찬가지이지만, 각각의 응용 프로그램들은 실행되고 나면 서로 공유되지 않은 메모리 주소를 사용할 수 있다. 0x00000000 ~ 0xFFFFFFFFF 의 공간을 각자의 프로그램들이 자신의 것처럼 사용할 수 있게 된다.다시 말해, 모든 프로세스는 자신만의 가상 주소 공간을 가지고 있고,32비트 프로세스는 최대 4GB(메모리 포인터 - 4바이트) / 64비트 프로세스는 최대 16EB(메모리 포인터 - 8바이트)의 메모리 공간을 가질 수 있다.이러한 기술을 "가상 메모리 기법" 이라고 하는데, 이는 나중에 따로 설명하고, 여기서는 VA..
NT_HEADER -> IMAGE_OPTIONAL_HEADER (x86)이 헤더의 경우 컴파일된 시스템의 아키텍쳐에 따라 구조체의 내용과 크기가 조금씩 달라지므로,가장 범용적인 x86 (32비트) 의 헤더에 대해서만 살펴본다. 이 구조체 역시 "winnt.h" 파일에 정의되어 있다.!! RVA / VA : 다음 포스트에 설명. - 여기서는 해당 데이터 섹션에 대한 설명만 기록한다. typedef struct _IMAGE_OPTIONAL_HEADER { // Standard fields. - Microsoft comment WORD Magic; BYTE MajorLinkerVersion; // file version BYTE MinorLinkerVersion; // file version DWORD Siz..
C++ bit OR 연산 여러개의 설정값(True of False - Flag)를 저장하고 확인할 때, 유용하게 사용할 수 있는 방법이다. 구조체를 선언해 여러 개의 bool 변수를 만들어 주거나, 또는 단순히 여러 개의 FLAG이름을 붙인 bool 형식 변수를 만들어도 되지만, bit 연산을 통해 변수 하나에 여러 개의 flag(true or false) 설정값을 저장할 수 있다. 위 사진은 VC++ 의 기본 헤더 파일인 "winnt.h" 에 정의되어 있는 것 중 PE 포맷의 NT_FILE_HEADER (COFF)에 쓰이는 Characteristics 상수 설정값이다. 각각의 설정 값이 비트 단위와 딱 맞아떨어져, 여러 값이 설정되도 서로 다른 비트를 침범하지 않아 여러 설정(flag)를 저장할 수 있..