C/C++ 디자인 패턴 (5) — 싱글톤(Singleton)

플러그인 레지스트리, 로거, 설정 저장소처럼 프로그램 전체에 딱 하나만 있어야 하고 어디서든 접근할 수 있어야 하는 객체가 있다. 전역 변수로 두면 누구나 새로 만들거나 덮어쓸 수 있다. 싱글톤(Singleton)은 클래스가 스스로…

Continue ReadingC/C++ 디자인 패턴 (5) — 싱글톤(Singleton)

C++ 예제로 배우는 소프트웨어 설계 기법 (13) — 플러그인(Plug-in)

5편의 자기 등록 팩토리는 새 도형 파일을 추가해도 기존 코드를 고치지 않았지만, 프로그램은 다시 빌드해야 했다. 플러그인(Plug-in)은 여기서 한 걸음 더 나아가 이미 배포된 호스트 프로그램에 공유 라이브러리(.so)를 실행 중에…

Continue ReadingC++ 예제로 배우는 소프트웨어 설계 기법 (13) — 플러그인(Plug-in)

PLT 와 GOT – 리눅스 동적 링킹과 지연 바인딩

공유 라이브러리는 프로세스마다 다른 주소에 올라간다. ASLR이 켜져 있으면 같은 libc.so.6도 실행할 때마다 위치가 바뀐다. 그런데 .text는 읽기 전용으로 매핑되어 여러 프로세스가 물리 페이지를 공유하므로, call printf의 피연산자에 실제 주소를…

Continue ReadingPLT 와 GOT – 리눅스 동적 링킹과 지연 바인딩

Python ctypes로 C 라이브러리 호출하기

파이썬으로 시스템 프로그래밍을 하다 보면 표준 라이브러리에 없는 저수준 기능이 필요한 순간이 온다. 특정 syscall을 직접 호출해야 하거나, 이미 검증된 C 라이브러리(.so)를 재사용하고 싶거나, 순수 파이썬으로는 느린 연산을 C로 짜둔…

Continue ReadingPython ctypes로 C 라이브러리 호출하기