nm으로 ELF 포맷의 심볼 테이블 보기
: 바이너리의 심볼을 볼 때 사용하는 명령어이다.
: nm {binary_file_name}
명령어로 사용한다. 그 결과는 아래와 같이 출력된다.
// Address symbol_type symbol_name
08044323 T func1
...
: 두 번째 필드의 종류는 다음과 같다.
심볼 타입 명 | 설명 |
---|---|
A | 주소가 절대적이어서 변경되지 않는 심볼 |
B | 심볼이 BSS 섹션에 존재(un-initialized global varible 등) |
C | 공통 심볼(un-initialized data) |
D | 심볼이 data 섹션에 위치(initialized global variable 등) |
G | 작은 공간의 전역 객체, data 섹션에 위치(initialized data 등) |
I | 심볼이 다른 심볼의 indirect |
N | 디버그 심볼 |
R | Read-only 섹션에 존재 |
S | 작은 객체를 위한 BSS 섹션의 심볼 |
T | text 섹션에 있는 심볼(code) |
U | 정의되지 않은 심볼 |
V | 확정적이지 않은 심볼, 링크 시 확정적인 심볼을 만나면 변경 |
W | 확정적이지 않은 심볼, 링크 시 확정적인 심볼을 만나지 못하면 0으로 설정 |
- | stabs 심볼 |
? | 알수없는 심볼 |
: nm
에서 사용할 수 있는 유용한 옵션은 다음과 같다.
옵션 | 설명 |
---|---|
-a |
디버깅 심볼까지 포함해 모든 심볼 출력 |
-D |
동적 심볼만 출력(공유 라이브러리의 심볼 등) |
-g |
외부 심볼만 출력 |
-v |
주소로 출력 정렬 |
-s |
정적 라이브러리의 심볼 출력 시, 어떤 오브젝트 파일에 존재하는 지 출력 |
-u |
정의되지 않은 심볼만 출력 |
'빌드&테스트도구 > 기타' 카테고리의 다른 글
readelf - ELF파일 정보 보기 (0) | 2020.09.23 |
---|---|
gprof - 프로파일 정보 확인 (0) | 2020.09.21 |
Mangling - 심볼명 확인 (0) | 2020.09.20 |