我正在尝试使用 dlsym() 在 libcrypto.so
文件中查找 connect
符号,并希望用我的方法替换此 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){
**
***********
***************
**********
}
我的应用程序因错误而崩溃
不为 NULL
致命信号 11 (SIGSEGV),代码 2,tid 7909 中的故障地址 0xb6e4755d
我做错了什么吗?
最佳答案
嗯,你的代码不完整,充满了语法错误,还包含虚假的类型转换(使用 intptr_t
)
另外,libcrypto.so 中没有“连接”。从以下选项中选择一个:
BIO_CONNECT_free
BIO_CONNECT_new
BIO_new_connect
BIO_s_connect
关于c - 如何更改 dlsym() 返回指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39716814/