2014-02-27 2 views
0

cycript에서 c function pointer에 대한 참조를 얻을 수는 있지만 해당 구문을 사용하여 해당 함수 또는 mangled 함수 이름을 사용하여 C++ 함수에 대한 포인터를 검색 할 수 없었습니다. 기호 테이블입니다.Cycript의 C++ 함수에 대한 포인터

여기에서 갈 수있는 방법이 있습니까?

업데이트 : 사우의 입력에서

업데이트 :

나는 C 스타일의 상징에서 함수 포인터를 시도하지 않은,하지만 당신은 밑줄이 제거 될 필요가 절대적으로 옳다

. _DES_encrypt3에 액세스해야합니다 :

cy# dlsym(RTLD_DEFAULT, "DES_encrypt3") 
0x14dc19 

이렇게하면 올바른 포인터 주소를 얻을 수 있습니다. 내가 XMPP에 대한 망가 기호 :: CapsManager :: ~ CapsManager(), __ZN4xmpp11CapsManagerD2Ev_1bf718하다 보면

, 나는 이러한 변화의

cy# dlsym(RTLD_DEFAULT, "__ZN4xmpp11CapsManagerD2Ev_1bf718") 
null 
cy# dlsym(RTLD_DEFAULT, "_ZN4xmpp11CapsManagerD2Ev_1bf718") 
null 
cy# dlsym(RTLD_DEFAULT, "ZN4xmpp11CapsManagerD2Ev_1bf718") 
null 

없음 포인터를 얻을 수 없습니다보십시오.

답변

1

필자가 생각하기에 원시 기호화 된 이름을 (기호 테이블에서 가져 와서) dlsym에 전달하려고합니다. 그러나 dlsym에는 C 레벨 기호 이름이 필요합니다. 당신의 접근법이 단순한 C 심볼조차도 작동하지 않는다는 것을 의미합니다 : 처음에는 여분의 _를 가질 것입니다. (심볼 테이블을 확인하면 C 함수가 엉망이되어 _으로 시작하는 것을 볼 수 있습니다). 맨 앞줄을 벗긴다면 dlsym을 사용하여 엉망 인 C++ 심볼을 찾을 수 있어야합니다.

+0

원래 질문에 몇 가지 세부 사항을 추가했습니다. 여분의 밑줄을 제거하는 것이 필요하지만, 여전히 포인터를 얻지는 못하고 있습니다. – JoshRivers

+0

해결하셨습니까? 나는 같은 문제가있다. – mientus

관련 문제