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

标签 c dlopen dlsym

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

相关文章:

c++ - C++ 中的工厂模式 : generating explicit createInstance()-Method automatically

c - dlsym -- 获取覆盖的符号

c++ - 将 namespace 添加到具有 C header 的 C++ 实现

c++ - 错误地检测矩形之间的碰撞

c++ - 我应该在使用 dlopen() 之前先执行 malloc() 吗?

cmake - cmake中的MODULE库类型是什么?

c - Linux:是否可以使用静态链接的二进制文件进行一些面向插件的编程?

c - 没有 dlsym 的 Linux 中的函数插入

c - `write(2)` 对本地文件系统的原子性

c - findAndReplace函数的实现