我正在尝试使用dlsym()在connect
文件中找到libcrypto.so
符号,并希望用我的方法替换此connect
。
void * lib_orig_tols = dlopen(libcrypto.so, RTLD_GLOBAL);
void * p_orig_connectOriginal;
p_orig_connectOriginal = (void*)dlsym(lib_orig_tols, "connect");
if (p_orig_connectOriginal != NULL)
{
LOGI(" is not NULL");
void *p_orig_connect = (void*)*((unsigned *)p_orig_connectOriginal);
*((unsigned *)p_orig_connectOriginal) = (unsigned)( my_crypto_connect);
}
int my_crypto_connect(int , const struct sockaddr , socklen_t){
**
***********
***************
**********
}
我的应用程序因错误而崩溃了
is not NULL
Fatal signal 11 (SIGSEGV), code 2, fault addr 0xb6e4755d in tid 7909
我做错了什么。
答案 0 :(得分:1)
嗯,你的代码是不完整的,它充满了语法错误,还包含伪造的类型转换(使用intptr_t
)
另外,libcrypto.so中没有'connect'。从这些中选择一个:
BIO_CONNECT_free
BIO_CONNECT_new
BIO_new_connect
BIO_s_connect