nm(유닉스)
nm (Unix)원저작자 | 데니스 리치 켄 톰슨 (AT&T 벨 연구소) |
---|---|
개발자 | 다양한 오픈 소스 및 상용 개발자 |
초기 릴리즈 | 1971년 11월 3일, | 전(
기입처 | C |
운영 체제 | Unix, Unix와 같은 플랜9 |
플랫폼 | 크로스 플랫폼 |
유형 | 명령어 |
면허증. | 계획 9: MIT 라이선스 |
nm
(name mangling)은 심볼테이블과 그 속성을 바이너리 실행 가능 파일(라이브러리, 컴파일된 오브젝트 모듈, 공유 오브젝트 파일, 스탠드아론 실행 파일 등)에서 덤프하기 위해 사용되는 UNIX 명령어입니다.
의 출력nm
는 다양한 기호 유형을 구분합니다.예를 들어 객체 모듈에서 제공하는 기능과 객체 모듈에 필요한 기능을 구분합니다. nm
는 디버깅에 도움이 되어 이름 경합 및 C++ 이름 망글링에서 발생하는 문제를 해결하고 툴체인의 다른 부분을 검증하기 위해 사용됩니다.
이 명령어는 다수의 최신 버전의 Unix 및 Plan 9를 포함한 유사한 운영체제와 함께 출하됩니다.GNU Project는 다음과 같은 구현을 제공합니다.nm
GNU 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"를 사용하여 이름 망글링 문제를 해결하는 예를 보여준다.
「 」를 참조해 주세요.
외부 링크
Wikibook Guide to Unix 에는 다음 항목에 대한 페이지가 있습니다.
- : 오브젝트 파일의 이름 목록을 작성합니다.– Shell and Utilities Reference 、 The Single UNIX Specification 、 The Open Group の Version 4 。
- Plan 9 프로그래머 매뉴얼, 1권 –