♧ 오브젝트 파일을 대상으로 파일에 포함된 심볼의 리스트를 볼 수 있다.
[ nm 사용법 ] |
▶ [ 일반적인 nm 명령 실행 ]
▷ 오브젝트 파일에 포함되어 있는 심볼을 알파벳순으로 1행씩 출력. ▷ 기본적인 출력 형식은 bsd 형식:: [ 심볼 값 ] [ 심볼 클래스 ] [ 심볼명이 출력 ] ▷ 심볼 값이 정해지지 않은 심볼(심볼 클래스 U)은 심볼 값이 출력되지 않고 빈 컬럼으로 표시. ▷ nm에 인수를 생략한 경우는 현재 디렉토리의 a.out을 대상으로 실행.
▶ [ 출력 순서를 역순으로 출력 ] -r옵션 (--reverse-sort 옵션)
▶ [ 심볼 크기를 작은 순으로 정렬 ] --size-sort 옵션
▷ -r옵션을 동시에 사용하면 크기가 큰 순으로 정렬 ▷ 미정의 심볼은 출력되지 않음. ▷ 기본적인 출력 형식에 --size-sort옵션을 지정하면 첫 컬럼에 심볼 크기가 출력되며, 심볼 값은 생략된다.
▶ [ 심볼 크기를 큰 순으로 심볼 값과 함께 출력 ] -S옵션 (심볼 값 출력)
▷ 이때 각 행의 출력 형식 :: [ 심볼 값 ] [ 심볼 크기 ] [ 심볼 클래스 ] [ 심볼명 ]
▶ [ 출력 형식 지정 ] ( -f format) # sysv 형식
# posix 형식
# 디폴트는 bsd 형식
▶ [ 오브젝트 파일을 복수 시정한 경우 ]
▷ 오브젝트 파일을 복수 지정한 경우에는 각 오브젝트 파일의 심볼을 정렬해서 출력.
▶ [ 심볼에 속한 오브젝트 파일명을 함께 출력 ] -A (또는 -o | --print-file-name)
▷ 각 행 처음에 해당 심볼이 속한 오브젝트 파일명을 출력.
▶ [ strip(1)을 사용해 실행 파일의 심볼을 지울 경우 ]
▷ 단, 정적 바이너리가 아닌 경우에는 공유 라이브러리를 동적으로 링크하기 위한 심볼 정보는 남아 있다. ▶ 이를 확인하려면 -D옵션(--dynamic 옵션)을 사용.
▶ [ 정적 라이브러리를 대상으로 출력 ] % nm /usr/lib/libc.a
▷ 라이브러리 파일에 포함되어 있는 오브젝트 파일별로 심볼이 출력.
|
[ 심볼 클래스 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
♧ nm의 출력 결과를 해석하려면 심볼 클래스의 의미를 이해해야 한다. ▷ 대소문자를 구별 :: 대문자 = [전역 심볼(외부 참조됨)] / 소문자 = [지역 심볼]
▶ [ 알파벳순으로 나열 ]
▶ [ 섹션별로 분류 ]
|
'컴퓨터 서적 정리 > Binary Hacks' 카테고리의 다른 글
[Hack #14] c++filt - C++ 심볼 demangle (0) | 2011.07.03 |
---|---|
[Hack #13] strings - 바이너리 파일에서 문자열 추출 (0) | 2011.07.03 |
[Hack #11] objcopy - 실행 파일에 데이터 삽입하기 (0) | 2011.07.03 |
[Hack #10] objdump - (2) 오브젝트 파일 역어셈블 (0) | 2011.07.03 |
[Hack #9] objdump - (1) 오브젝트 파일 덤프 (0) | 2011.07.03 |