2012-04-09 2 views

답변

1

dladdr을 사용하십시오. 문서 here.

0

그 자체, 아니요; dlopen()/dlsym()을 통해 액세스하는 대신 심볼이 컴파일 된 경우 반환 할 핸들이 없습니다. (핸들 추상화는 심볼을로드하는 곳을 dlsym()이 제어 할 수 있도록하기 위해서만 존재하며 링커 스크립트를 제외하고는 원래 링크에 대한 제어가 없습니다.) 일반적인 이벤트 과정에서 오브젝트는 간단히 open() ed이고 mmap() ed입니다. 다른 세부 정보는 ld.so 안에 숨겨져 있으며 RTLD_DEFAULTRTLD_NEXT 매개 변수를 통해 dlsym()까지 간접적으로 만 액세스 할 수 있습니다. dlopen()을 사용하는 경우 핸들을 추적해야합니다.

0

나는의 알고있는 유일한 방법은 /proc/self/maps (및/혹은 smaps) 다음 매핑 .so의 경계에서 계산하는 심볼 주소를 사용하여 모듈을 맵핑하는 내 (시작 크기)의 내용을 구문 분석하는 것입니다 기능은 거짓말이다.

참고 : /proc/self은 현재 프로세스의 (ID가 <pid> 인) 메타 정보 (예 : /proc/<pid>)에 대한 심볼릭 링크입니다 (Linux의 경우).

사용할 수있는 바로이 정보에 프로그래밍 인터페이스가있을 수 있습니다.

편집 : 아, 그래서 dladdr()이 해당 인터페이스가됩니다.

+0

대단히 감사합니다. 이 정보는 매우 유용합니다. 하지만 너무 낮은 수준입니다. 그래서 다른 방법으로 해결하고 싶습니다. – pjincz

+0

'dladdr'은 * 많이 * 더 나은 방법을 제공합니다. –

+0

@Employed 러시아어 : 논쟁의 여지가 없습니다. 나는 프로그래밍 인터페이스가있을 수도 있다는 것을 지적하면서, 당시에는 알지 못했다. 그리고 의심 할 여지없이'dladdr()'이 어떻게 든이 정보를 사용할 것입니다. 예를 들어 내 대답을 편집 할 수있었습니다. 어느쪽으로 든, 무언가를 배우고 저것은 (나를 위해) 중요한 부분이다. – 0xC0000022L

관련 문제