설명
오브젝트 파일들의 심볼 목록을 보여줌
옵션
옵션 | 설명 |
---|---|
-r | 출력 순서를 역순으로 정렬 |
-v | 심볼의 이름이 아니라 주소로 심볼을 정렬 |
-a | 보통 출력하지 않는 디버거용 심볼을 포함하여 모든 심볼들을 출력 |
-D | 동적 심볼들을 출력 |
심볼 클래스
심볼 클래스 | 설명 |
---|---|
A | 심볼 값이 절대값으로 링크해도 변하지 않음 |
B | 초기화되지 않은 데이터 영역(BSS)에 존재함 |
C | 공유(common) 심볼. 초기화 되지 않은 데이터 |
D | 초기화된 데이터 섹션에 존재 |
G | 작은 오브젝트에 사용되며 초기화된 데이터 섹션에 존재 (부근의 심볼이 보다 효율적으로 접근할 수 잇는 경우가 있으므로) |
I | 다른 심볼의 간접참조. a.out의 GNU 확장 |
N | 디버그용 심볼 |
R | 읽기전용 데이터 섹션에 존재 |
S | 작은 오브젝트에 사용되며 초기화되지 않은 데이터 섹션에 존재 |
T | 텍스트 섹션에 존재 |
U | 정의되지 않은 심볼. 다른 오브젝트 파일 또는 공유 라이브러리에 실제 |
V | 심볼이 존재 |
W | weak 오브젝트 |
─ | a.out 오브젝트 파일 내의 stabs 심볼(디버그 정보 등) |
? | 알 수 없는 클래스 |
사용
- hello.c
#include <stdio.h> int hello(void) { printf("Hello, World!\n"); return 0; } int main(void) { hello(); return 0; }
$ gcc -o hello hello.c
$ nm hello
0000000000600e40 d _DYNAMIC 0000000000600fe8 d _GLOBAL_OFFSET_TABLE_ 0000000000400640 R _IO_stdin_used w _Jv_RegisterClasses 0000000000600e20 d __CTOR_END__ 0000000000600e18 d __CTOR_LIST__ 0000000000600e30 D __DTOR_END__ 0000000000600e28 d __DTOR_LIST__ 0000000000400740 r __FRAME_END__ 0000000000600e38 d __JCR_END__ 0000000000600e38 d __JCR_LIST__ 0000000000601020 A __bss_start 0000000000601010 D __data_start 00000000004005f0 t __do_global_ctors_aux 0000000000400490 t __do_global_dtors_aux 0000000000601018 D __dso_handle w __gmon_start__ 0000000000600e14 d __init_array_end 0000000000600e14 d __init_array_start 00000000004005e0 T __libc_csu_fini 0000000000400550 T __libc_csu_init U __libc_start_main@@GLIBC_2.2.5 0000000000601020 A _edata 0000000000601030 A _end 0000000000400628 T _fini 00000000004003f0 T _init 0000000000400638 t _real_fini 0000000000400440 T _start 000000000040046c t call_gmon_start 0000000000601020 b completed.5890 0000000000601010 W data_start 0000000000601028 b dtor_idx.5892 0000000000400500 t frame_dummy 0000000000400524 T hello 0000000000400539 T main U puts@@GLIBC_2.2.5