2010-07-08 2 views
1

타사 공유 라이브러리를 사용하고 있으며 함수가 공유 라이브러리에 의해 프로그래밍 방식으로 내보내 졌는지 확인해야합니다.프로그램에서 공유 라이브러리 노출 함수를 확인하는 방법

수행 방법. 함수가 존재하지 않으면 다른 함수를 로컬로 실행해야하기 때문에이 함수가 필요합니다.

+2

시도'나노 -C -D libtest.so이 objdump를 -T처럼 노출 된 모든 기호를 확인하는 명령을 objdump를 사용할 수있을 수 있습니다 | 쉘 스크립트를 사용하고 있다면 grep -F 'T'', C/C++에서는'dlopen','dlsym'과'dlclose' 함수를 사용하십시오. 그렇지 않으면 적어도 사용중인 프로그래밍 언어를 지정하십시오. – Philipp

답변

2

아마도 dlsym을 사용할 수 있습니다.

dlopen을 사용하여 라이브러리를로드하는 경우 반환하는 핸들을 사용합니다. 이 특별한 의사가있다

: dlsym을 사람에서

:이 라이브러리에 링크하는 경우 당신은 (그것을 지적하기위한 CAF에 10 배) 특별한 의사 핸들을 사용할 수 있습니다

핸들, RTLD_DEFAULT 및 RTLD_NEXT. 전자는 기본 라이브러리 검색 순서를 사용하여 원하는 기호의 첫 번째 항목을 찾습니다. 후자는 현재 라이브러리 다음의 검색 순서에서 함수의 다음 발생을 찾습니다. 이를 통해 다른 공유 라이브러리의 함수를 래퍼로 제공 할 수 있습니다.

+1

리눅스에서는'dlopen()'을 사용하여 열 필요가 없습니다. 타겟 라이브러리가 메인 프로그램에 링크되어 있다면 pseudo-handle'RTLD_DEFAULT'를'dlsym()'에 전달할 수 있습니다. – caf

+0

좋은 메모입니다. 감사합니다. 내 대답을 편집 할게 –

+0

내 문제를 해결, 고마워. – Poorna

0

기능 서명을 얻으려는 라이브러리의 헤더 파일을 확인하십시오. dlopen을 사용하면 라이브러리를 동적으로로드하고 심볼이 라이브러리에 노출되어있는 경우 해당 심볼을 가져올 수 있으며 그 이후에는 dlsym 및 dlclose를 호출합니다.

관련 문제