목록Windows Programming (3)
AlphaMOT
더보기 [Reference] "IT EXPERT 리버스 엔지니어링(파일 구조)" / 이호동 / 한빛미디어 윈도우 운영체제에서 실행되는 여러 프로그램들은 흔히 하드디스키에 exe 파일로 존재하고, 실행 시 메모리에 로드된다. 또한 이러한 프로그램 또는 애플리케이션이라는 exe 파일 말고도 프로그램이 사용하는 동적 링크 라이브러리인 dll 파일도 프로그램 실행 시 같이 맞물려 메모리에 로드된다. 이렇게 로드된 하나의 exe와 여러 dll이 하나의 프로세스를 구성하게 된다. PE 파일 이란? 앞서 언급한 exe 파일은 나름의 포맷을 가지고, exe 파일을 로드하는 역할을 하는 프로그램 로더(loader, 운영체제의 서브 시스템)가 이 포맷을 식별하고 메모리에 로드하여 프로그램 진입점으로 들어가게 한다. 또한 ..
윈도우 함수(시스템 콜)을 호출하면 호출된 함수는 전달된 인자의 유효성을 확인하고 함수의 기능을 수행하려 한다. 만일 전달된 인자가 유효하지 않거나 다른 이유로 인해 해당 기능을 수행할 수 없으면 함수는 실패를 반환한다. 윈도우 함수의 대표적인 함수 반환 자료형과 실패했을 때의 값 자료형 실패 시 값 VOID 이 함수는 절대 실패하지 않음을 의미한다. 아주 적은 수의 윈도우 함수만이 VOID 반환형을 가짐. BOOL 함수가 실패하면 0을 반환하고, 성공 시에는 0이 아닌 값을 반환한다. 따라서 반환 값을 TRUE와 비교해서는 안된다(FALSE인지 아닌지를 비교하는 것이 좋다). HANDLE 함수가 실패하면 반환 값은 대게 NULL이고, 성공 시에는 유효한 오브젝트 핸들을 반환한다. 몇 몇 함수는 -1로 ..
더보기 [Reference] - Windows via C/C++ / 제프리 리처 / 한빛미디어 1. 프로세스 가상 주소 공간 32비트 프로세스 32비트 포인터를 이용하여 0x00000000 ~ 0xFFFFFFFF까지 표현하기에 4GB의 주소공간을 가진다. 이는 32비트 프로세스의 포인터가 4G개의 메모리 공간 중 하나를 가리킬 수 있다는 의미이다. 64비트 프로세스 64비트 포인터를 이용하여 0x00000000`00000000 ~ 0xFFFFFFFF`FFFFFFFF까지 표현하기에 16EB(엑사바이트)의 주소 공간을 가진다. 이는 64비트 프로세스의 포인터가 16E개의 메모리 공간 중 하나를 가리킬 수 있다는 의미이다. 특정 프로세스 내 쓰레드가 수행될 때 해당 쓰레드는 프로세스가 소유하고 있는 메모리에 ..