nm(유닉스)

nm (Unix)
nm
원저작자데니스 리치
켄 톰슨
(AT&T연구소)
개발자다양한 오픈 소스 및 상용 개발자
초기 릴리즈1971년 11월 3일, 50년 전(1971-11-03)
기입처C
운영 체제Unix, Unix와 같은 플랜9
플랫폼크로스 플랫폼
유형명령어
면허증.계획 9: MIT 라이선스

nm (name mangling)은 심볼테이블과 그 속성을 바이너리 실행 가능 파일(라이브러리, 컴파일된 오브젝트 모듈, 공유 오브젝트 파일, 스탠드아론 실행 파일 )에서 덤프하기 위해 사용되는 UNIX 명령어입니다.

의 출력nm는 다양한 기호 유형을 구분합니다.예를 들어 객체 모듈에서 제공하는 기능과 객체 모듈에 필요한 기능을 구분합니다. nm는 디버깅에 도움이 되어 이름 경합 및 C++ 이름 망글링에서 발생하는 문제를 해결하고 툴체인의 다른 부분을 검증하기 위해 사용됩니다.

이 명령어는 다수의 최신 버전의 UnixPlan 9를 포함유사운영체제와 함께 출하됩니다.GNU Project는 다음과 같은 구현을 제공합니다.nmGNU Binutils 패키지의 일부입니다.

nm 출력 샘플

/* * 파일명: test.c * C 코드의 경우 컴파일 대상: * gcc - c test.c * * C++ 코드의 경우 컴파일 대상: * g++ -c test.cpp */  인트 global_var; 인트 global_var_init = 26;  정적인 인트 static_var; 정적인 인트 static_var_init = 25;  정적인 인트 정적 기능() {  돌아가다 0; }  인트 글로벌_기능(인트 p) {  정적인 인트 local_static_var;  정적인 인트 local_static_var_init=5;   local_static_var = p;   돌아가다 local_static_var_init + local_static_var; }  인트 global_function2() {  인트 x;  인트 y;  돌아가다 x+y; }  #ifdef __cplusplus 외부 'C' #엔디프 무효 non_ledleded_기능() {  // 아무것도 안 해 }  인트 주된(무효) {  global_var = 1;  static_var = 2;   돌아가다 0; } 

이전 코드가 gcc C 컴파일러를 사용하여 컴파일된 경우,nm명령어는 다음과 같습니다.

# nm test.o 0000000a T global_function 00000025 T global_function 2 00000004 C global_var_init 00000004 b local_static_var.1255 00000008 d local_static_var_init.1256 000000003b T 메인 00000036 T_mled static 00000000000000000000000000000000000000000000003b

C++ 컴파일러를 사용하면 출력이 달라집니다.

# nm test . o 0000000a T _ Z15 global _ functioni 000025 T _ Z16 global _ function 2 v 00000004 b _ ZL10 static _ var 00000004 d _ ZL15 static _ v 00000008 _ ZZ_15 global _ local functionvar_init 0000003b T 메인 00000036 T non_mangled_function

출력의 차이는 또한 C++ 코드의 외부 "C"를 사용하여 이름 망글링 문제를 해결하는 예를 보여준다.

「 」를 참조해 주세요.

외부 링크