반응형
Development/System
디버거(Debugger) 브레이크 포인트(Break Point)의 구현 원리
디버거(Debugger) 브레이크 포인트(Break Point)의 구현 원리
2026.02.270. 요약 디버거의 소프트웨어 브레이크 포인트는 메모리 패칭(Memory Patching)과 CPU의 예외 처리 메커니즘을 이용해 구현합니다.유저가 특정 라인에 브레이크를 걸면, 해당 주소의 원래 기계어 1바이트를 디버거 메모리에 백업하고, 그 자리를 0xCC (INT 3) 명령어로 덮어씁니다.타겟 프로세스의 스레드(CPU)가 실행되다 0xCC를 만나면 디버그 익셉션(Trap)이 발생하고, OS는 스레드를 블로킹한 뒤 디버거에게 이벤트를 전달합니다.디버거는 이때 CPU 레지스터(Context)와 메모리를 읽어 유저에게 보여줍니다.유저가 실행을 재개(F5)하면, 덮어썼던 0xCC를 백업해 둔 원래 기계어로 복원합니다. 그리고 CPU의 명령어 포인터(RIP)를 1바이트 감소시켜 원래 명령어를 정상적으로 실행..
Windows DPC(Deferred Procedure Call), ISR(Interrupt Service Routine)
Windows DPC(Deferred Procedure Call), ISR(Interrupt Service Routine)
2026.02.270. 요약 ISR과 DPC는 OS가 하드웨어 인터럽트를 효율적으로 처리하기 위한 2단계 메커니즘입니다.랜카드에 패킷이 도착하면 먼저 최우선 순위인 ISR이 실행되어 하드웨어 상태만 빠르게 응답하고, TCP/IP 스택 분석 같은 무거운 작업은 DPC 큐에 지연시켜 처리합니다. 여기서 서버 개발자가 주의해야 할 점은 우선순위(IRQL)입니다. DPC는 일반 유저 스레드(IOCP Worker)보다 높은 IRQL에서 실행되므로, 대규모 트래픽 발생 시 특정 코어에 DPC 처리가 집중되면 해당 코어의 유저 스레드는 CPU를 할당받지 못해 심각한 지연(Latency)이 발생합니다. 이를 해결하기 위해 실무에서는 랜카드의 RSS(Receive Side Scaling) 기능을 활성화하여 하드웨어 인터럽트와 DPC ..
Windows 64-bit Calling Convention (호출 규약)
Windows 64-bit Calling Convention (호출 규약)
2026.02.271. 왜 알아야 할까? 릴리즈(Release) 빌드에서 서버가 죽었을 때, 범인을 찾기 위해서 금요일 밤 10시, 동시 접속자 5천 명인 서버가 갑자기 크래시(Crash)를 내며 죽었습니다. 남은 건 OS가 뱉어낸 메모리 덤프 파일(.dmp) 하나뿐입니다.Visual Studio나 WinDbg로 덤프를 엽니다. 소스 코드가 멈춘 줄은 가리키고 있는데, 변수 값을 확인하려고 마우스를 올려보면 이렇게 뜹니다. (최적화되어 값을 알 수 없음) 릴리즈 빌드는 속도를 위해 컴파일러가 변수들을 다 날려버리고 레지스터에 쑤셔 넣습니다.지역 변수 창을 봐도 다 쓰레기 값입니다. "도대체 어떤 유저가, 어떤 스킬을 쓰다가 죽은 건지" 알 길이 없습니다.이때 Calling Convention(호출 규약)을 알면, CPU..
컨텍스트 스위칭(Context Switching)에 대한 고찰, 정리
컨텍스트 스위칭(Context Switching)에 대한 고찰, 정리
2025.11.06서버 개발을 하다보면 필수적으로 알아야하고 단골 문제로 등장하는 손님이 있다.바로 컨텍스트 스위칭(context switching)인데, 잊어버리지 않도록 해당 포스팅에서 완벽하게 정리하려고 한다. 1. 컨텍스트 스위칭? 시분할 시스템 컨텍스트 스위칭의 개념은 멀티태스킹(Multitasking)을 구현하기 위해 탄생했다.초기 컴퓨터는 한 번에 하나의 작업(프로세스)만 처리할 수 있었는데,CPU의 처리 속도는 I/O(디스크 읽기, 네트워크 수신 등) 속도보다 압도적으로 빨랐다. CPU가 I/O 작업을 요청하고 응답을 기다리는 동안, CPU는 말 그대로 '아무 일도 하지 않고' 놀게 되었다.이러한 비효율을 해결하기 위해 시분할 시스템(Time-Sharing System)이 고안되었다. CPU의 시간을 매우 ..
[윈도우즈 시스템 프로그래밍] 3. 프로그램 구현 관점에서의 32비트와 64비트 & 오류의 확인
[윈도우즈 시스템 프로그래밍] 3. 프로그램 구현 관점에서의 32비트와 64비트 & 오류의 확인
2019.06.30이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 목차 64비트 기반 프로그래밍 64비트와 32비트 공존의 문제점 Windows 스타일 자료형 64비트 기반 프로그래밍 64비트 기반 프로그래밍이란, 64비트 시스템을 고려한 프로그래밍으로 자료형에 대해서 고려해야 한다. LLP 64 vs LP64 64비트 시스템으로 가면 자료형이라던가 타입을 재구성할 필요 있다. 운영체제 모델 char short int long 포인터 Windows LLP64 1바이트 2바이트 4바이트 4바이트 8바이트 UNIX LP64 1바이트 2바이트 4바이트 8바이트 8바이트 기존 32비트 시스템과 큰 차이는 포인터밖에 없네..?라고 생각할 수 있는데, ..
[윈도우즈 시스템 프로그래밍] 3. WIN32 vs WIN64
[윈도우즈 시스템 프로그래밍] 3. WIN32 vs WIN64
2019.06.27이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 목차 64비트와 32비트의 구분 방법 프로그래머 입장에서의 64비트 컴퓨터 64비트와 32비트의 구분 방법 구분의 두 가지 기준 한번에 송수신 가능한 데이터 크기 데이터 처리 능력 A라는 시스템이 64비트 시스템이냐 32비트 시스템이냐 결정하는 것은 한 번에 송수신 가능한 데이터의 크기와 데이터 처리 능력이다. 한 번에 송수신 가능한 데이터 크기는 I/O 버스에 의존적이다. 즉 버스 시스템이 32비트냐 64비트냐가 중요한 것이고 데이터 처리 능력은 CPU를 뜻하는데, CPU가 한 번에 읽어 들일 수 있는 명령어가 32비트인 경우는 32비트 시스템, 64비트인 경우는 64비트 시..
[윈도우즈 시스템 프로그래밍] 2. MBCS와 WBCS의 동시 지원
[윈도우즈 시스템 프로그래밍] 2. MBCS와 WBCS의 동시 지원
2019.06.27이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 이전 포스트 2019/06/27 - [Development/System] - [윈도우즈 시스템 프로그래밍] 2. Windows에서의 유니코드(UNICODE) [윈도우즈 시스템 프로그래밍] 2. Windows에서의 유니코드(UNICODE) 이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 목차 문자셋의 종류와 특성 WBCS 기반의 프로그래밍 매개변수 전달인자 유니코.. cjwoov.tistory.com 서론 세상에 모든 시스템이 유니코드를 지원한다고하면 문제가 없다. 하지만 여전히! 유니코드의 장점, ..
[윈도우즈 시스템 프로그래밍] 2. Windows에서의 유니코드(UNICODE)
[윈도우즈 시스템 프로그래밍] 2. Windows에서의 유니코드(UNICODE)
2019.06.27이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 목차 문자셋의 종류와 특성 WBCS 기반의 프로그래밍 매개변수 전달인자 유니코드화 문자셋의 종류와 특성 문자셋이란? 문자의 집합이다. 문자를 어떻게 표현하느냐? 표현하는 방법에 있어 크게 3가지로 나뉜다. SBCS(Single Byte Character Set) 문자를 표현하는데 1바이트 사용한다 아스키코드는 SBCS다 MBCS(Multi Byte Character Set) 한글은 2바이트, 영문은 1바이트 사용하는 형태다 WBCS(Wide Byte Character Set) SBCS보다 2배 넓게 표현한다 문자를 표현하는데 2바이트를 사용한다 유니코드는 WBCS다 우리는 대한..
[윈도우즈 시스템 프로그래밍] 1. 프로그램의 실행 과정/하드웨어 구성의 재접근
[윈도우즈 시스템 프로그래밍] 1. 프로그램의 실행 과정/하드웨어 구성의 재접근
2019.06.12이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 이전 포스트 2019/05/29 - [Development/System] - [윈도우즈 시스템 프로그래밍] 1. 시스템 프로그래밍, 컴퓨터 하드웨어 구성, CPU [윈도우즈 시스템 프로그래밍] 1. 시스템 프로그래밍, 컴퓨터 하드웨어 구성, CPU 이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 다음 포스트 2019/06/12 - [Development/System] - [윈도우즈 시스템 프로그래.. cjwoov.tistory.com 목차 프로그램 실행 과정 Stored Program Concept..
[윈도우즈 시스템 프로그래밍] 1. 시스템 프로그래밍, 컴퓨터 하드웨어 구성, CPU
[윈도우즈 시스템 프로그래밍] 1. 시스템 프로그래밍, 컴퓨터 하드웨어 구성, CPU
2019.05.29이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 다음 포스트 2019/06/12 - [Development/System] - [윈도우즈 시스템 프로그래밍] 1. 프로그램의 실행 과정/하드웨어 구성의 재접근 [윈도우즈 시스템 프로그래밍] 1. 프로그램의 실행 과정/하드웨어 구성의 재접근 이 포스트는, 윤성우 저자님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 바탕으로 제 생각을 재구성하여 정리한 포스트입니다. 이전 포스트 2019/05/29 - [Development/System] - [윈도우즈 시스템 프로그래.. cjwoov.tistory.com 목차 1. 시스템 프로그래밍이란? 2. 컴퓨터 시스템의 주요 구성 요소 3...