리눅스 시스템 디버깅

AddressSanitizer(ASan) 동작원리

ASan(AddressSanitizer)을 켜고 프로그램을 돌리면 heap-buffer-overflow나 use-after-free가 발생한 순간 바로 크래시가 나면서 어느 함수의 몇 번째 줄에서, 어떤 malloc 호출로 할당된 메모리에 접근했는지까지 정확히 짚어주는 리포트가 뜬다. 일반적인 세그폴트는 침범한 메모리가…

Continue ReadingAddressSanitizer(ASan) 동작원리

Valgrind로 메모리 누수 탐지하기

C/C++로 짠 프로그램에서 메모리 누수는 당장 크래시를 내지 않아서 더 골치 아프다. 며칠씩 켜두는 서버 프로세스가 서서히 메모리를 더 먹다가 결국 OOM으로 죽어야 그제서야 문제를 알아차리는 경우가 흔하다. 이 블로그에서는…

Continue ReadingValgrind로 메모리 누수 탐지하기

GDB 고급 사용법 — 메모리 조사부터 원격 디버깅까지

아래 GDB 사용법 글에서 breakpoint·step·backtrace·print 같은 기본기는 이미 다뤘다. 하지만 실무에서, 특히 임베디드/크로스컴파일 환경에서 GDB를 쓰다 보면 로컬 바이너리에 breakpoint 거는 것만으로는 부족한 상황이 자주 생긴다. 타깃 보드에는 GUI도 없고…

Continue ReadingGDB 고급 사용법 — 메모리 조사부터 원격 디버깅까지

Linux 블록 I/O 추적 도구 blktrace 사용법

디스크 I/O 지연이 의심되는데 iostat이나 top 같은 도구로는 정확히 어느 단계(큐잉, 병합, 드라이버 전달, 디바이스 처리)에서 시간이 걸리는지 알기 어려울 때가 있다. blktrace는 커널 블록 계층(Block Layer)의 트레이스포인트를 이용해 이…

Continue ReadingLinux 블록 I/O 추적 도구 blktrace 사용법

gperftools를 이용한 메모리 Leak 체크

메모리 Leak 문제는 프로그램이 동적으로 할당한 메모리를 해제하지 않고 계속해서 사용하는 상태를 나타난다. 이로 인해 메모리 사용량이 계속 증가하며, 장기적으로는 시스템의 성능에 부정적인 영향을 미치게 된다. gperftools은 메모리 Leak을 체크하고…

Continue Readinggperftools를 이용한 메모리 Leak 체크

Stack Protector 사용법

스택 기반 버퍼 오버플로우는 지역 변수에 정해진 크기보다 많은 데이터를 써서 스택에 저장된 return address까지 덮어쓰고, 함수가 리턴할 때 공격자가 원하는 코드로 실행 흐름을 옮기는 전형적인 취약점 패턴이다. 커널은 컴파일러가…

Continue ReadingStack Protector 사용법