리눅스 환경에서 공유 라이브러리(.so) 파일에 어떤 심볼(symbol)이 포함되어 있는지 확인해야 할 때가 있습니다. 이럴 때 활용할 수 있는 대표적인 명령줄 도구로 readelf와 nm이 있습니다.
1. readelf로 ELF 형식의 .so 파일 읽기
.so 파일은 ELF(Executable and Linkable Format) 형식으로 작성된 바이너리입니다. 이 파일의 내부 구조를 읽고 분석하려면 readelf 명령어를 사용하면 됩니다.
readelf -Ws libName.so
-W 옵션은 출력 결과를 줄바꿈 없이 전체 폭으로 표시하는 와이드(wide) 포맷이며, -s 옵션은 심볼 테이블 섹션을 보여줍니다. 두 옵션을 함께 사용하면 바이너리에서 심볼 정보를 손쉽게 추출할 수 있습니다.
2. nm으로 전체 심볼 목록 조회하기
모든 심볼을 나열하는 표준 도구로는 nm이 가장 널리 사용됩니다.
nm -g libName.so
-g 옵션은 외부에서 참조 가능한 전역(global) 심볼만 출력합니다. 라이브러리가 노출하는 함수와 변수 이름을 빠르게 확인하고 싶다면 이 조합이 가장 간편합니다.
정리
두 도구 모두 바이너리 분석에 필수적이며, 용도에 따라 선택하여 사용하면 됩니다.
- readelf -Ws: ELF 구조와 심볼 테이블을 상세하게 확인할 때 적합합니다.
- nm -g: 전역 심볼 목록만 간결하게 확인할 때 유용합니다.