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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bootstrap table表格分页样式问题[通俗易懂]

    bootstrap table表格分页样式问题[通俗易懂]bootstraptable表格分页样式问题今天项目里用到bootstrap做列表,数据展示没问题但是分页样式一直出不来,找了半天发现是因为没有引入css文件的问题&amp;amp;lt;head&amp;amp;gt;&amp;amp;lt;metacharset=&amp;quot;UTF-8&amp;quot;&amp;amp;gt;&amp;amp;lt;title&amp;amp;gt;Titl

    2022年7月17日
    18
  • 处理Simulink的代数环的方法为逐个添加一阶惯性环节

    处理Simulink的代数环的方法为逐个添加一阶惯性环节处理Simulink的代数环的方法为逐个添加一阶惯性环节。代数环实际上是微分方程的输入在第一步没有值,而如果串联一个积分器的话就可以有初值,从而避免。通过增加一个一个时步的惯性环节,实现在基本不改变输出的情况下避免代数环。测试是可行的。…

    2022年10月5日
    0
  • c# 连接ACCESS 数据库 OleDbCommand OleDbDataReader

    c# 连接ACCESS 数据库 OleDbCommand OleDbDataReader privatevoidbutton1_Click(objectsender,EventArgse)    {     OleDbConnectionconn=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=fruit.mdb");      OleDbComma…

    2022年5月19日
    32
  • Android N上一些新特性的介绍「建议收藏」

    Android N上一些新特性的介绍「建议收藏」byLi.zhu随着6月份google的AndroidNpreview4版本的发布,笔者也借着东风在N6P上体验了一把新系统,试玩之后认为有几点新的感受特记录之。1.分屏多任务进入后台多任务管理页面,然后按住其中一个卡片,然后向上拖动至顶部即可开启分屏多任务,支持上下分栏和左右分栏,允许拖动中间的分割线调整两个APP所占的比例。目前,AndroidN开发者

    2022年9月5日
    2
  • JVM垃圾回收器_jdk6默认垃圾回收器

    JVM垃圾回收器_jdk6默认垃圾回收器JVM垃圾回收器垃圾回收器分类说明垃圾回收器工作原理垃圾回收器分类说明如果说垃圾回收算法是内存回收的方法论,那么垃圾回收器就是内存回收的具体实现,下图展示了7中作用于不同分代的收集器。其中用于新生代的回收器包括Serial,PraNew,ParallelScavenge,回收老年代的收集器包括SerialOld,Parallelold,CMS,还有作用于回收整个java堆的G1收集器,不同收集器之间的连线表示他们可以搭配使用。Serial收集器(复制算法):新生代单线程收集器,标记和清理

    2022年9月11日
    0
  • Docker使用方法_docker工作原理

    Docker使用方法_docker工作原理Docker作为轻量级虚拟化隔离解决方案,具有简单高效、移植方便、性能开销低等优势,在渗透测试领域可以利用Docker进行靶场环境搭建、工具开发测试、扫描工具配置、主机群部署等,可以让渗透测试工作更加简洁高效。

    2025年6月6日
    0

发表回复

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

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