System Programming/Kernel
sanitizer interceptor의 구현 원리
c/c++ 개발자들은 버퍼 오버플로우, 댕글링 포인터 등의 메모리 오류, data race, dead lock 등의 멀티 스레드 오류를 자주 접하게 된다. 이런 버그들은 바로 크래시가 나지 않고 나중에 엉뚱한 곳에서 터지기 때문에 찾기가 매우 어려워 이런 문제를 빠르게 찾아내는 것은 항상 골칫거리였다. google이 opensource로 공개한 sanitizer 동적 분석 도구는 c/c++ 개발자들이 효율적으로 문제를 찾아내어 개발 효율성을 높이는 데 도움을 준다. Sanitizer란sanitizer는 google이 오픈소스로 공개한 동적 코드 분석 도구로 Clang 3.1과 GCC 4.8 부터 Clang과 GCC에 통합되었다. 프로그래머가 런타임에 프로그램의 메모리 오류와 멀티스레드 오류를 빠르고 정확..
xv6 #1 booting in xv6
커널 시작 과정 linker와 entry 설정kernel.ld 파일은 링커 스크립트로 커널 코드를 메모리에 어떻게 배치할지 알려준다. kernel.ld 에서는 대상 아키텍쳐 와 Entry point (코드 실행 시작 지점)을 지정한다.CPU가 실행하는 첫 번째 코드 블럭은 _entry 로 entry.S에 정의되어있다.이 _entry 섹션의 시작 주소는 0x80000000 다.주소 0x00000000 ~ 0x80000000 영역은 QEMU/RISC-V 구조 상 디바이스 IO 용 영역으로 사용되고 실제 커널 코드는 0x80000000 부터 시작된다. 커널 코드 블럭 종류다음과 같은 4가지 세그먼트가 커널에 포함된다.text: kernel coderodata: 읽기 전용 상수 데이터data: 읽기/쓰기 가능한..