2012-01-25 5 views
1

현재 파일/모듈에 사용 된 extern 변수에 대한 링크가있는 곳에서/shared_object 파일을 찾는 방법이 있습니까? 예를 들어extern 변수의 연결 경로를 찾는 방법

: 리눅스에 큰 애플리케이션 sofware에, 나는 내 모듈에 externed 한 특정 변수의 선언을 찾고 싶어요 ... 사전에

감사합니다.

답변

2

귀하의 질문을 완전히 이해할 수는 없지만, 아마도 dladdr이 귀하의 요구에 적합해야합니다. dladdr은 Gnu/Glibc 확장입니다. 매뉴얼에서 : 함수 dladdr()은 함수 포인터를 가져 와서 이름과 파일의 위치를 ​​확인하려고 시도합니다. (그리고 그것은 아마도 전역 변수에 대한 포인터와 함께 사용될 수 있습니다).

그러나 나는 귀하의 질문 문구에 의아해합니다. "변수 선언"은 실행 가능한 ELF 바이너리 또는 공유 객체 안에는 아무런 의미가 없습니다. 왜냐하면 선언은 본질적으로 객체 코드가 아닌 소스 코드 개념이기 때문입니다. 사실상, (전역 변수의) 대부분의 선언은 일부 헤더 파일 안에 있습니다. 당신이 응용 프로그램의 소스 코드가있는 경우

C++ name mangling

알고 있어야합니다, 당신은 (grep 또는 etags 같은) 텍스트 도구를 사용하거나 심지어 선언을 찾기 위해 플러그인이나 MELT 확장 스루 GCC 컴파일러를 확장 할 수 있습니다.

물론 dlsym을 사용하여 이름이있는 일부 기호의 주소를 찾을 수도 있습니다.

관련 문제