개요
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 옵션은 정의되지 않은 참조를 찾아내어 링킹 문제를 해결하는 데 도움을 줍니다.