ysm***
2025-11-30

임베디드 시스템, 디버깅, 시스템 보안, 최적화 등 각종 기술과 89가지 노하우를 한 권에!
"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

Binary Hacks Rebooted 0과 1사이
"고수준 코드 아래 숨은 실행, 구조, 보안, 메모리의 비밀" 이런 문구를 보면 두근댄다.
거기다 저자가 일본인이다.
이런 조합의 책은 거의 실패한 적이 없다.
또한 Reboot 라는 단어가 적혀있는 것은 이전 판의 인기가 많았다는 뜻이니 읽어보기로 했다.
먼저 읽은 사람으로써 정말 쉽지 않다.
중급이상의 개발자 정도는 되야 읽을 수 있을 것 같다.

write 시스템콜
나는 사실 이 책이 ELF 에 대해서 적여있어서 골랐다.
ELF 라는 확장자를 회사에서 본적은 있는데, 어떤 건지는 정확히 몰랐기 때문이다.
ELF(Executable and Linkable Format)는 리눅스 실행파일의 확장자이다.
아마, 라이브러리인 so 확장 이외에는 많이 듣기 힘들었을 것이다.
ELF 에는 ELF 헤더, 프로그램 헤더, 세그먼트 로 나눌 수 있다.
- ELF 헤더: 파일이 64비트용이고, 리눅스용이고, 실행파일이다. 같은 정보를 담고 있다.
- 프로그램 헤더: 운영체제에게 메모리의 어디에 로딩해야하는지 알려준다.
- 세그먼트: 실제 실행에 중요한 정보의 관리 단위

프로그램 헤더
프로그램 헤더정보는 readelf 를 통해서 확인할 수 있다.

readelf 프로그램 헤더
프로그램이 커질 수로 한번에 실행하기 어려워지므로, 동적 링커를 활용한다.
이 과정에서 개입하여 조작할 수 있다.

LD_PRELOAD
시스템 표준 함수보다 내가 만든 함수를 먼저 로딩하여 기능을 바꾼다.
이때 라이브러리를 찾는 순서도 중요한데, 보통 DT_RPATH -> LD_LIBRARY_PATH -> DT_RUNPATH 순으로 탐색한다고 한다.

DT_RUNPATH
이런 동적 링킹의 원리를 통해 함수를 Hooking 할 수도 있다.

읽다보면 해시 테이블을 왜쓰는지에 대한 이유도 나온다.
TSL 는 보안에만 나오는지 알았더만, Thread Local Storage 의 약자로 스레드마다 독립적인 변수 공간을 갖게 해주는 기술이다.
TLS에 접근하는 방식(액세스 모델)은 크게 4가지가 있다.
컴파일러가 상황에 따라 최적의 모델을 선택해준다.
그리고 CoreDump 라는 말을 많이 들어봤을거다.
gdb 가 아니더라도 파일 구조를 알면 직접 분석할 수도 있다.