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)
上一篇 2025年8月9日 下午2:22
下一篇 2025年8月9日 下午3:01


相关推荐

  • git stash详解

    git stash详解应用场景 1 当正在 dev 分支上开发某个项目 这时项目中出现一个 bug 需要紧急修复 但是正在开发的内容只是完成一半 还不想提交 这时可以用 gitstash 命令将修改的内容保存至堆栈区 然后顺利切换到 hotfix 分支进行 bug 修复 修复完成后 再次切回到 dev 分支 从堆栈中恢复刚刚保存的内容 2 由于疏忽 本应该在 dev 分支开发的内容 却在 master 上进行了开发 需要重新切回到 dev 分

    2026年3月20日
    2
  • FIST! FIST! FIST! Its all in the wrist: Remote Exec[通俗易懂]

    FIST! FIST! FIST! Its all in the wrist: Remote Exec[通俗易懂]==PhrackInc.==Volume0x0b,Issue0x3e,Phile#0x08of0x10|=—–=[FIST!FIST!FIST!Itsallint

    2022年8月5日
    6
  • 文件名太长删除不了

    文件名太长删除不了

    2021年10月16日
    46
  • 硬盘能看到但是在计算机不现实,电脑可以识别硬盘但是不显示盘符

    硬盘能看到但是在计算机不现实,电脑可以识别硬盘但是不显示盘符

    2026年3月14日
    2
  • vue返回上一层不刷新页面_vue嵌套html

    vue返回上一层不刷新页面_vue嵌套html解决嵌套路由刷新时,路由没有变化,正常情况下页面是不会重新渲染的1、在router-view中加上条件渲染v-if默认为true。让它显示出来2、写写一个reload方法,在页面刷新只有,点击某个查询条件的时候调用这个重载的方法这是条件渲染变化了为false在修改数据之后使用$nextTick,条件渲染变化了为true则可以在回调中获取更新后的DOM如果需要带有查询参数…

    2022年10月7日
    5
  • 常用加密算法–对称加密算法

    常用加密算法–对称加密算法1 DES DataEncrypti DES 是 1977 年美国联邦信息处理标准 FIPS 中所采用的一种对称密码 FIPS46 3 DES 一直以来被美国以及其他国家的政府和银行等广泛使用 然而 随着计算机的进步 现在 DES 已经能够被暴力激活成功教程 强度大不如前了 1997 年的 DESChallenge 中用了 96 天破译密钥 1998 年的 DESChallenge I

    2026年3月17日
    2

发表回复

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

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