如何更改dlsym()返回指针值

时间:2016-09-27 05:43:56

标签: c dlopen dlsym

我正在尝试使用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

我做错了什么。

1 个答案:

答案 0 :(得分:1)

嗯,你的代码是不完整的,它充满了语法错误,还包含伪造的类型转换(使用intptr_t

另外,libcrypto.so中没有'connect'。从这些中选择一个:

BIO_CONNECT_free
BIO_CONNECT_new
BIO_new_connect
BIO_s_connect