Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 .so 파일의 모든 심볼을 확인하는 방법: readelf와 nm 활용법

리눅스 환경에서 공유 라이브러리(.so) 파일에 어떤 심볼(symbol)이 포함되어 있는지 확인해야 할 때가 있습니다. 이럴 때 활용할 수 있는 대표적인 명령줄 도구로 readelfnm이 있습니다.

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: 전역 심볼 목록만 간결하게 확인할 때 유용합니다.