dlsym用法_DLSS模式

dlsym用法_DLSS模式dlsymdlsym,dlvsym-从一个动态链接库或者可执行文件中获取到符号地址。用法#include<dlfcn.h>void*dlsym(void*handle,constchar*symbol);#define_GNU_SOURCE#include<dlfcn.h>void*dlvsym(void*handle,char*symbol,char*version);Linkwith-ldl.详解函数dlsym()的第

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

dlsym

dlsym,dlvsym – 从一个动态链接库或者可执行文件中获取到符号地址。

用法

#include <dlfcn.h>
void *dlsym(void *handle, const char *symbol);

#define _GNU_SOURCE
#include <dlfcn.h>
void *dlvsym(void *handle, char *symbol, char *version);

Link with -ldl.

Jetbrains全家桶1年46,售后保障稳定

详解

函数dlsym()的第一个参数是一个指向已经加载的动态目标的句柄,这个句柄可以是dlopen()函数返回的。
其中symbol参数是一个以null结尾的符号名。
返回值是这个符号加载到内存中的地址。如果这个符号 在指定的目标 或者 在由dlopen(3)装载指定的目标时自动装载的其他共享目标中都没有找到,dlsym()返回NULL指针。(dlsym在这些动态目标中执行广度优先搜索)。
由于符号的值本身可能实际就是NULL,因此,返回的NULL不能直接用来判断是否出错!所以,必须通过dlerror(3)函数以清理掉之前的错误状态,然后调用dlsym(),最后调用dlerror(3),然后将其返回值保存到一个变量,最后检查是否这个保存的变量值不为NULL。

handle参数可能使用如下的两种特殊的伪句柄:

  • RTLD_DEFAULT
    • 使用默认的共享目标搜索顺序来找到要找的符号第一次出现的地方。这个搜索范围包含可执行文件中的全局符号以及这个可执行文件的依赖项(也就是使用RTLD_GLOBAL标志动态加载的共享目标
  • RTLD_NEXT
    • 在当前搜索顺序中找,在当前的目标之后,要找的符号下一次出现的地方。 这就允许向在另一个共享目标中的函数提供一层封装。这样一来,在一个预先加载的共享目标中定义的函数中,就可以找到并调用在另一个共享目标中的真函数(其实就是一种劫持呢!!!!)。或者有多层的预加载的时候的下一层!

返回值

成功时,这些函数返回跟symbol关联的地址。失败时,返回NULL;错误原因可以通过dlerror(3)来判断。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203980.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java CAS详解[通俗易懂]

    java CAS详解[通俗易懂]CAS解释:CAS(compareandswap),比较并交换。可以解决多线程并行情况下使用锁造成性能损耗的一种机制.CAS操作包含三个操作数—内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。一个线程从主内存中得到num值,并对num进行操作,写入值的时候,线程会把第一次取到的num值和主内存中num值进行比较,如果相等,就会将改变后的num写入主内存,如果不相等,则一直循环对比,知道成功为止。CAS

    2022年7月9日
    24
  • 关于redis客户端连接不上

    关于redis客户端连接不上链接服务器的Redis(由于远程连接不上,使用服务器连接,也连接不上产生)Unabletoconnecttoremotehost:Connectionrefused连接不上,有可能是服务没有对外开放。1.修改redis配置:redis.conf.路径:C:\develop\Redis-x64-5.0.14\redis.windows.conf2.修改密码修改redis.conf配置文件(永久) #requirepassfoobaredrequire

    2022年6月10日
    39
  • React多页面跳转[通俗易懂]

    React多页面跳转[通俗易懂]render(){const{app:{locationQuery}}=this.props;////////////tolist.jsconst{子页面数据}=this.state;const{id}=locationQuery;///获取当前页面地址栏的idconstinfo=queryA…

    2022年5月30日
    30
  • php 中使用cURL发送get/post请求,上传图片,批处理

    php 中使用cURL发送get/post请求,上传图片,批处理

    2021年10月29日
    35
  • python偏函数理解_python进阶路线

    python偏函数理解_python进阶路线什么是偏函数partialpython中提供一种对于函数固定属性的函数偏函数的作用把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数偏函数的语法使用偏函数必须先导入from

    2022年7月29日
    4
  • uwsgi配置文件详解_curl_multi_init

    uwsgi配置文件详解_curl_multi_initmaster=true#启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。chdir=/web/www/mysite#在app加载前切换到当前目录,指定运行目录module=mysite.wsgi#加载一个WSGI模块,这里加载mysite/wsgi.py这个模块py…

    2022年9月3日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号