Win32 그리고 User Mode-Kernel Mode 이해하기
Windows 내부 구조를 공부하면서 가장 크게 와닿았던 점은 우리가 평소에 호출하는 WinAPI 함수들이 단순한 기능 호출이 아니라 User Mode에서 Kernel Mode까지 이어지는 흐름 속에 있다는 사실이었다. 이 구조를 이해하면 WinAPI가 왜 이렇게 설계되었는지, DLL과 Syscall이 어떤 역할을 하는지, 그리고 User Mode ...
Windows 내부 구조를 공부하면서 가장 크게 와닿았던 점은 우리가 평소에 호출하는 WinAPI 함수들이 단순한 기능 호출이 아니라 User Mode에서 Kernel Mode까지 이어지는 흐름 속에 있다는 사실이었다. 이 구조를 이해하면 WinAPI가 왜 이렇게 설계되었는지, DLL과 Syscall이 어떤 역할을 하는지, 그리고 User Mode ...
소스 코드가 실행 파일로 만들어지는 과정까지 이해하고 나면, 자연스럽게 다음 질문이 생긴다. “그럼 이 실행 파일은 메모리에서 어떤 구조로 배치되어 실행될까?” Windows 기준으로 보면 프로그램은 실행될 때 운영체제가 정해 둔 형태에 따라 여러 영역으로 나뉘어 올라가게 된다. 그 구조를 자연스럽게 따라가며 정리하고, 각 영역이 실제 코드에서 어떤...
C/C++ 코드를 작성하면 곧바로 실행 파일이 생성되는 것처럼 보이지만, 실제로는 여러 단계의 변환 과정을 지나면서 점점 기계가 이해할 수 있는 형태로 바뀐다. 아래는 그 흐름을 자연스럽게 따라가며 정리한 내용이다. 컴파일 전체 흐름 1. 전처리 단계 가장 먼저 전처리기가 소스 코드를 읽어 들인다. 이 단계에서는 #include, #defin...
Games Step 3는 튜토리얼에서 배웠던 내용을 실제 게임 상황에 가져와 충돌 판정과 생존 여부를 직접 건드려 보는 단계다. 이 스테이지의 목표는 단순하다. 우리는 게임이 내부적으로 사용하는 생존 상태 플래그와 충돌 처리 코드를 건드려 조건을 우회해서 클리어해 본다. 1. 게임 진행 방식 살펴보기 게임을 실행하면 캐릭터와 여러 발판이 보인...
Games Step 2는 단순히 플레이어의 체력을 고정시키는 수준을 넘어서, 플레이어와 적의 구조체를 구분하고, 오직 적에게만 데미지가 들어가도록 코드를 조작하는 과정을 다루고 있다. 튜토리얼 파트에서 배웠던 “값 스캔 → 포인터 추적 → 코드 인젝션” 흐름을 실제 게임에 그대로 적용해보는 단계라고 보면 된다. 1. 게임 실행과 환경 파악 게임...
Games Step 1은 기존 튜토리얼보다 훨씬 실제 게임에 가까운 환경에서 값을 탐색하고 원하는 방식으로 조작하는 경험을 제공한다. 특히 이 단계는 값이 단순하지 않게 숨겨져 있기 때문에, 기존에 배운 정확한 값 검색, 값 변화 기반 검색, Unknown Initial Value 개념을 실전적으로 어떻게 활용해야 하는지를 자연스럽게 익히게 된다. ...
Step 9에서는 지금까지의 모든 내용을 종합하여 나와 팀·적의 체력을 구분한 뒤, 오직 적의 체력만 감소하도록 코드 인젝션을 적용하는 과정을 다룬다. 이전 단계들보다 확실히 실전적인 구조이며, 게임 구조를 이해하는 능력과 코드 조작 능력을 동시에 요구한다. 튜토리얼의 목표는 다음과 같다: 모든 플레이어의 체력을 찾는다. 체력 감소 코드를...
Step 8에서는 지금까지 배웠던 포인터 개념을 한 번 더 확장하여 여러 단계로 연결된 다중 포인터 구조를 직접 추적하는 과정을 다루게 된다. 이 단계의 목표는 최종 값을 가리키는 베이스 포인터(Base Pointer)를 찾아 CE 테이블에 올바르게 구성하는 것이다. 포인터 체인이 여러 단계로 이어져 있기 때문에 각 단계의 포인터를 하나씩 직접 추적...
Step 7에서는 코드 인젝션(Code Injection)을 이용해 기존 프로그램의 동작을 직접 수정하는 과정을 다루게 된다. 이전 단계들은 특정 값을 찾고 수정하는 방식이었지만, 이번 단계는 게임 로직 자체를 원하는 방향으로 바꾼다는 점에서 이전과 확실히 차별화된다. 튜토리얼에서 요구하는 것은 체력이 감소하는 대신 증가하도록 코드를 수정하는 것이...
Step 6에서는 단순히 값만 수정하는 것이 아니라, 값을 가리키는 포인터 구조를 추적해서 올바른 방식으로 수정하는 과정을 다루게 된다. 튜토리얼에서는 값의 주소가 고정되어 있지 않기 때문에, 값 자체만 수정하면 금방 다시 바뀌어버린다. 따라서 이번 단계에서는 포인터를 직접 찾아 CE 테이블에 등록하는 것이 목표다. 1. 초기 값 검색 튜토리얼...