Linux 공유 라이브러리가 내보내는 함수 목록을 보려면 어떻게합니까?


답변:


313

당신이 필요로하는 것은 nm-D옵션 :

$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
         U atanf
         U calloc
.
.
.

내 보낸 sumbol은로 표시됩니다 T. 다른 공유 객체에서로드해야하는 필수 기호에는가 있습니다 U. 기호 테이블에는 함수 만 포함 된 것이 아니라 내 보낸 변수도 포함됩니다.

자세한 내용은 nm 매뉴얼 페이지 를 참조하십시오.


18
또는 내 보낸 심볼 만 보려면 "--defined-only"플래그를 추가하십시오. 예를 들면 : "나노 -D --defined 전용 /lib/libtest.so"
Shervin 년 Emami

3
Mac OS X nm에서는 -D플래그 없이 사용 하십시오 .
JPaget



1

이미 언급 한 도구 중에서도 readelf( manual )을 사용할 수 있습니다 . 비슷 objdump하지만 더 자세히 설명합니다. 차이점 설명에 대해서는 이것을 참조하십시오 .

$ readelf -sW /lib/liblzma.so.5 |head -n10

Symbol table '.dynsym' contains 128 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_unlock@GLIBC_2.0 (4)
     2: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_destroy@GLIBC_2.0 (4)
     3: 00000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTable
     4: 00000000     0 FUNC    GLOBAL DEFAULT  UND memmove@GLIBC_2.0 (5)
     5: 00000000     0 FUNC    GLOBAL DEFAULT  UND free@GLIBC_2.0 (5)
     6: 00000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@GLIBC_2.0 (5)

readelf를 사용하여 내 보낸 심볼을 어떻게 찾습니까? 그것은 엄청난 양의 출력을 제공합니다.
Juraj Martinka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.