공유 라이브러리에서 함수 목록을 가져 오시겠습니까?


14

공유 객체 라이브러리에 정의 된 함수 목록을 가져 오거나 특정 함수가 하나에 정의되어 있는지 확인하려면 어떻게해야합니까?

답변:


15

* nix 시스템에는 다른 실행 파일 형식이 있습니다. a.out은 몇 년 전 일반적인 형식이었으며 오늘날 모든 주요 시스템 근처의 ELF입니다.

ELF는 각 파일 데이터 섹션을 설명하는 헤더로 구성됩니다.

찾고자하는 부분은 각 심볼 (함수, 변수)이 해당 주소에 매핑되는 심볼 테이블입니다.

공유 라이브러리는 전역 기호를 .dynsym이라는 섹션에 유지합니다.

찾고있는 것은이 섹션의 유형 함수 기호와 전역 바인딩입니다.

readelf --syms ./libfoo.so 심볼의 출력을 제공합니다.

Solaris와 FreeBSD에서도 elfdump사용 가능합니다.

objdump또한 객체 파일에 대한 많은 정보를 표시하며 -j스위치 를 사용하여 섹션을 지정할 수 있습니다 .


13

-D (동적) 스위치와 함께 nm를 사용하십시오.

$ nm -D /usr/lib/libpng.so
00000000 A PNG12_0
     w _Jv_RegisterClasses
     w __cxa_finalize
     U __fprintf_chk
     w __gmon_start__
     U __longjmp_chk
     U __memcpy_chk
     U __snprintf_chk
     U __stack_chk_fail
     U _setjmp
     U abort
     U crc32
     U deflate
     U deflateEnd
     U deflateInit2_
     U deflateReset
     U fflush
     U fread
     U free
     U fwrite
     U gmtime
     U inflate
     U inflateEnd
     U inflateInit_
     U inflateReset
     U malloc
     U memcmp
     U memcpy
     U memset
00003fd0 T png_access_version_number
00016ef0 T png_build_grayscale_palette
00004810 T png_check_sig
0001d2d0 T png_chunk_error
0001d070 T png_chunk_warning
00013390 T png_convert_from_struct_tm
00014a90 T png_convert_from_time_t
000048d0 T png_convert_to_rfc1123
000051b0 T png_create_info_struct
00013040 T png_create_read_struct
00012c20 T png_create_read_struct_2
00014a40 T png_create_write_struct
00014710 T png_create_write_struct_2
00004230 T png_data_freer
00005140 T png_destroy_info_struct
00010eb0 T png_destroy_read_struct
00013da0 T png_destroy_write_struct
0001d0f0 T png_error
0001ca10 T png_free
00004a50 T png_free_data
0001c9d0 T png_free_default
...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.