thesequestions을 읽은 후 심볼 해상도 순서를 제어하는 방법에 대해 좀 더 자세히 알아 보려고합니다.동적으로로드 된 다른 객체에서 심볼을 다르게 해석하기
내 문제는 기본 실행 파일 exec
입니다. exec
은 a.so
과 c.so
에 동적으로 연결됩니다. a.so
은 (는) b.so
에 동적으로 링크됩니다. b.so
은 일반적으로 c.so
에 의해 제공되는 foo
함수를 호출하지만이 경우에도 exec
에 의해 제공됩니다. b.so
은 c.so
의 구현이 foo
인 경우에만 작동합니다.
상황의 다이어그램 :
exec (foo caller and provider)
| \
a.so |
| |
b.so | (foo caller)
|/
c.so (foo provider)
난 단지 a.so
의 컴파일/소스를 제어 할 수 있습니다, 나는 LD_PRELOAD
와 exec
에 a.so
를 연결합니다.
나는의 구현 'c.so
를 해결하기 위해 b.so
에서의 구현 및 호출'exec
에 해결하는 exec
에서 foo
에 전화를하고 싶습니다. 다른 객체에서 다른 심볼 검색이 가능한이 유형이 가능한가?
"dlsym"으로 어떻게 할 수 있습니까? 나는''.so''가''dlsym ''으로''c'so'''foo''를 참조 할 수있는 방법을 보지만''dlsym''을 사용하여' 'b.so'는 그것을 사용합니까? –
죄송합니다. 질문을 잘못 읽었습니다. 답변을 업데이트했습니다. 이제 도움이 되었기를 바랍니다. 편집을위한 – yugr
감사합니다! 그러나 모든 종속성은 다이어그램에서 아래로 내려갈뿐입니다 (''a.so''는''b.''__builtin_return_address'' 트릭이 작동하지 않음을 의미합니다. 또한 실제로는''exec''와''c.so''에''foo''를 구현 한 것입니다. GOT 해킹에 대한 리소스가 있습니까? (제가 가고 싶은 길이 아니지만 배울 점이 있습니다)? –