> 환경 및 유틸리티 > nm

nm: 오브젝트 파일 심볼 목록 보기

nm 명령어는 컴파일된 오브젝트 파일, 정적 라이브러리, 공유 라이브러리 등에서 심볼(함수, 변수 등)의 목록을 표시합니다. 이를 통해 프로그램의 구조를 이해하고 디버깅에 활용할 수 있습니다.

개요

nm은 오브젝트 파일 내의 심볼 테이블을 분석하여 각 심볼의 이름, 타입, 주소 등을 출력합니다. 이는 링킹 문제 진단, 라이브러리 내용 확인, 코드 최적화 분석 등에 유용하게 사용됩니다.

주요 기능

  • 오브젝트 파일의 심볼 목록 출력
  • 심볼 타입(함수, 변수, 정의됨, 정의되지 않음 등) 식별
  • 심볼 주소 및 크기 정보 제공
  • C++ 이름 디맹글링 지원

주요 옵션

nm 명령어는 심볼 목록을 필터링하고 출력 형식을 제어하는 다양한 옵션을 제공합니다.

심볼 필터링

출력 형식

생성된 명령어:

명령어를 조합해 보세요.

설명:

`nm` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

nm 명령어를 사용하여 오브젝트 파일의 심볼 정보를 확인하는 다양한 방법을 살펴봅니다.

기본 심볼 목록 보기

gcc -c main.c -o main.o
nm main.o

컴파일된 실행 파일 또는 오브젝트 파일의 모든 심볼을 기본 형식으로 출력합니다.

정의되지 않은 심볼만 보기

nm -u main.o

링크되지 않은 외부 함수나 변수 등 정의되지 않은 심볼만 출력하여 링킹 문제를 진단할 때 유용합니다.

C++ 심볼 디맹글링

g++ -c my_class.cpp -o my_class.o
nm -C my_class.o

C++ 오브젝트 파일의 복잡한 심볼 이름을 사람이 읽기 쉬운 형태로 변환하여 출력합니다.

심볼 크기와 함께 출력

nm -S main.o

각 심볼의 주소와 함께 해당 심볼이 차지하는 크기(바이트)를 출력합니다.

팁 & 주의사항

nm 명령어를 효과적으로 활용하기 위한 팁과 주의할 점입니다.

심볼 타입 문자

nm 출력에서 각 심볼 옆에 표시되는 문자는 심볼의 타입을 나타냅니다. 대문자는 전역(global) 심볼, 소문자는 지역(local) 심볼을 의미합니다.

  • A: 절대 심볼 (Absolute)
  • B/b: 초기화되지 않은 데이터 섹션 (BSS)
  • D/d: 초기화된 데이터 섹션
  • T/t: 텍스트(코드) 섹션
  • U: 정의되지 않은 심볼 (Undefined)
  • W/w: 약한 심볼 (Weak)

디버깅 활용

nm은 링커 에러를 진단하거나, 특정 함수나 변수가 라이브러리에 제대로 포함되었는지 확인할 때 매우 유용합니다. 특히 -u 옵션은 정의되지 않은 참조를 찾아내어 링킹 문제를 해결하는 데 도움을 줍니다.


동일 카테고리 명령어