2017-01-25 6 views
0

실행 파일 a.out이 공유 라이브러리 1.so, 2.so3.so을로드합니다. 각 라이브러리에는 func() 함수가 구현되어 있습니다. func()가 호출 될 때, 나는 func()의 구현이 실행되는, 식별합니다.실행 파일이 현재 실행중인 공유 라이브러리를 식별하는 방법

실행 파일의 PID에 ltrace을 시도했습니다. func() 호출 만 나열하지만 공유 라이브러리는 나열하지 않습니다.

제안 사항?

+0

두 개의 유사한 질문 (중복 정확하지만, IMHO) : HTTP ://stackoverflow.com/questions/6538501/linking-two-shared-libraries-with-some-of-the-same-symbols http://stackoverflow.com/questions/29079742/same-symbols- in-different-libraries-and-linking-order – DyZ

+1

함수의 주소를 아는 경우, 프로세스 메모리 맵 ('/ proc//maps')에서 찾을 수 있습니다. –

+0

나는 "아니 중복"동의하지만, 당신이 라이브러리는 링커에 전달 된 순서를 알고있는 경우, 질문은 매우 강력하게 '될 첫 번째에서 func' 것을 의미한다. –

답변

0

사용하는 SystemTap : 리눅스 반환 한으로

sudo -E stap ./func.stap 

:

probe process("/path/to/1.so").function("func") 
{ 
    printf("%d: 1.so\n", pid()); 
}  

probe process("/path/to/2.so").function("func") 
{ 
    printf("%d: 2.so\n", pid()); 
}  

probe process("/path/to/3.so").function("func") 
{ 
    printf("%d: 3.so\n", pid()); 
}  

함께 사용

sudo perf probe -x /path/to/1.so func 
sudo perf probe -x /path/to/2.so func 
sudo perf probe -x /path/to/3.so func 
sudo perf top -e probe_1:func,probe_2:func,probe3:func