2011. 7. 3. 20:56

nm

   

♧ 오브젝트 파일을 대상으로 파일에 포함된 심볼의 리스트를 볼 수 있다.

   

[ 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의 출력 결과를 해석하려면 심볼 클래스의 의미를 이해해야 한다.
심볼에는 몇개의 클래스가 있으며 nm에서는 이를 한 문자로 표현한다.
 

▷ 대소문자를 구별 ::

대문자 = [전역 심볼(외부 참조됨)] / 소문자 = [지역 심볼]

   

▶ [ 알파벳순으로 나열 ]

심볼 클래스

설명

A

심볼 값이 절대값으로 링크해도 변하지 않음.

B

초기화되지 않은 데이터 영역(BSS)에 존재함.

C

공유(common) 심볼. 초기화 되지 않은 데이터

D

초기화된 데이터 섹션에 존재

G

작은 오브젝트에 사용되며 초기화된 데이터 섹션에 존재

(부근의 심볼이 보다 효율적으로 접근할 수 잇는 경우가 있으므로)

I

다른 심볼의 간접참조. a.out의 GNU 확장

N

디버그용 심볼

R

읽기전용 데이터 섹션에 존재

S

작은 오브젝트에 사용되며 초기화되지 않은 데이터 섹션에 존재

T

텍스트 섹션에 존재

U

정의되지 않은 심볼. 다른 오브젝트 파일 또는 공유 라이브러리에 실제

V

심볼이 존재

W

weak 오브젝트

a.out 오브젝트 파일 내의 stabs 심볼(디버그 정보 등)

?

알 수 없는 클래스

▶ [ 섹션별로 분류 ]

섹션

심볼 클래스

참조가능범위

텍스트 섹션

T

전역

  

t

지역

데이터 섹션

D

전역

  

G

전역(작은 오브젝트용)

  

d

지역

  

g

지역(작은 오브젝트용)

읽기전용 데이터

R

전역

  

r

지역

BSS(초기화되지 않은 데이터)

B

전역

  

S

전역(작은 오브젝트용)

  

b

지역

  

s

지역(작은 오브젝트용)

weak 오브젝트

V

전역

  

v

지역

weak 심볼

W

전역

  

w

지역

공유(common)

C

전역

디버그용

N

전역

  

n

지역

  

stabs

절대값

A

전역

  

a

지역

미정의

U

전역

간접참조

I

전역

  

i

지역

알 수 없는 클래스

?

  

 

Posted by devanix