Linux dlsym符号查找疑惑分析

news2024/11/29 22:41:12

dlsym 函数是 Linux 下动态链接库(shared library)编程中的一个重要函数。它用于在运行时获取动态链接库中符号的地址,通常用于获取函数指针或变量的地址。

以下是 dlsym 函数的基本用法和示例。

1. 函数原型

void *dlsym(void *handle, const char *symbol);
  • handle:通过 dlopen 函数获取的库句柄。
  • symbol:要查找的符号的名称(通常是函数名或变量名)。
  • 返回:返回符号的地址,失败时返回 NULL

2.疑惑

创建一个可执行程序和一个so文件

1.c

#include <stdio.h>
#include <dlfcn.h>
extern void a();
int main()
{
        void *p = dlsym(NULL, "a");
        void *q = printf;
        void *r = dlsym(NULL, "printf");
        void *s = a;
        a();
}

2.c

#include <stdio.h>

void a()
{
        void *b = printf;
        printf("hahahaha\n");
}

编译为共享库:

gcc -g -fPIC -shared 2.c -o liba.so

编译可执行程序:

gcc -g  1.c -I. -L. -la -ldl

不注释掉1.c中void *s = a;
使用gdb查看
在这里插入图片描述
可以看出使用dlsym查找的是a在内存中的绝对地址
在这里插入图片描述注释掉1.c中void *s = a;
使用gdb查看
在这里插入图片描述
发现dlsym查找的符号是plt表中a的地址,反汇编p
在这里插入图片描述

3.原因猜测

注释掉1.c中void *s = a;这句代码,1.c中没有对a的引用,意味着got plt标准不在在关于a的表项,不注释时,存在关于a的plt和got表项,dlsym从模块对应的表项开始搜索,所有不注释时查到到的地址时plt地址,注释后查找的是真实地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. OOP封装 -- get、set方法

文章目录 1. 抛出问题&#xff1a;存在安全隐患2. 那咋办呢&#xff1f;3. 上述方案行不通&#xff0c;只能引入封装的概念① public向private过渡② 这种情况下如何修改信息&#xff0c;使用get和set方法如何限制用户输入企业中为什么不用public快捷键生成所有私有成员变量的g…

老系统处理策略

1. 改造策略 定义&#xff1a;对技术含量高、业务价值大的遗留系统进行功能增强和数据模型改造。 适用场景&#xff1a;系统较新&#xff0c;能满足业务需求&#xff0c;但需增加新功能或优化数据模型。 优点&#xff1a;增强功能&#xff0c;优化数据&#xff0c;提升系统性…

第一批用大模型的程序员,已经碾压同事了...

自 ChatGPT 面世以来&#xff0c;市场上一直用“iPhone 时刻”“划时代”“工业革命”等关键词来形容 AI 领域的飞速进展。如今&#xff0c;AI 大模型的战争已经开启大卷特卷模式。 OpenAI 炸裂推出 GPT-4o&#xff0c;科幻电影照进现实&#xff0c;不仅免费可用&#xff0c;能…

Buck电路-电感电容计算

目录&#xff1a; 1、前置知识 1&#xff09;电感的公式 2&#xff09;电容的公式 3&#xff09;Buck电路框图 2、占空比D的计算 1&#xff09;Switch(on)状态 2&#xff09;Switch(off)状态 3&#xff09;占空比计算 3、电感计算 4、电容计算 5、电荷平衡与伏秒…

企业数字化转型中优化IT投资与资源管理的战略路径

IT投资优化与资源管理在数字化转型中的关键作用 在数字化时代&#xff0c;企业的成功不仅取决于其业务创新和市场拓展&#xff0c;还极大依赖于信息技术&#xff08;IT&#xff09;投资和资源管理的效率。随着云计算、大数据、人工智能等技术的飞速发展&#xff0c;企业必须在…

Python 能用来开发桌面客户端吗?

Python 作为一门多功能、跨平台的编程语言&#xff0c;适用于不同领域的开发&#xff0c;包括桌面客户端程序。在桌面客户端开发中&#xff0c;Python 以其简洁、可读性高的语法和广泛的第三方库生态圈提供了强大的支持。尽管 Python 的强项可能更多地体现在 web 开发、数据分析…

《精通开关电源设计》笔记一

重点 效率 纹波 环路响应 尺寸&#xff0c;从静态到动态的研究方法&#xff0c;假设开关电源稳态运行&#xff0c;以电感为中心&#xff0c;根据半导体器件(mos管或二极管)分段分析电路的状态&#xff0c;工具有电路原理和能量守恒 影响效率的主要是开关损耗&#xff0c;所以…

速览!2024 CSP-J1/S1 河北也被实名举报泄题

据NOI官网消息&#xff0c;继2024 CSP-J/S第一轮认证陕西鸿泉培训机构泄题之后&#xff0c;重考&#xff01;CSP-J/S 2024第一轮认证泄题后续进展及疑问&#xff0c;河北某学校也被学生实名举报泄题&#xff0c;河北某同学在认证前一天以非正当手段获得了认证题目且属实&#x…

码随想录算法训练营第62天|卡码网:97. 小明逛公园、127. 骑士的攻击

1. 卡码网 97. 小明逛公园 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1155 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0097.小明逛公园.html 思路&#xff1a; 使用Floyd 算法&#xff0c;目的是解决多源最短路问题&#xff0c;即 …

【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件

序言&#xff1a; 本文详细讲解了关于鸿蒙系统学习中的模块化语法与自定义组件&#xff0c;在模块化语法中我们学习到了多种导入导出方式&#xff0c;实现了在一个项目中&#xff0c;通过引用不同的组件&#xff0c;让我们整体代码的可读性更强&#xff0c;相当于我们把一个手…

【系统方案】系统设计方案书,可视化设计方案(word)

第 一 章 系统总体设计 1.1 总体架构 1.1.1 系统拓扑 1.1.2 系统组成 1.2 设计概述 1.3 平台系统功能 1.3.1 总部数据看板 1.3.2 项目部数据看板 1.3.3 视频联网系统 1.3.4 实名制考勤系统 1.3.5 安全生产系统 1.3.6 塔吊安全监控子系统 1.3.7 施工升降机安全监控管系统 1.3.8 …

聊天记录怎么监控?企业微信聊天记录监控的2个方法分享!员工权益vs企业管理

在企业管理与员工权益的平衡中&#xff0c;聊天记录的监控成为了一个备受争议的话题。 一方面&#xff0c;企业希望通过监控聊天记录来确保信息安全、规范员工行为&#xff0c;并防止潜在的风险&#xff1b; 另一方面&#xff0c;员工则强调个人隐私和沟通自由的重要性。 本文…

大模型技术进阶路线,有了基础应该怎么进阶?

“ 高性能大模型的打造&#xff0c;是一项复杂的系统性工程 ” 在上一篇文章中讲了学习大模型的基础路线&#xff0c;而如果是对有一定基础的人来说&#xff0c;应该怎么进阶呢&#xff1f;也就是说大模型更加高级的技术栈有哪些&#xff1f; 一个好的基础能够让你在学习的道…

《向量数据库指南》——Mlivus Cloud打造生产级AI应用利器

哈哈,各位向量数据库和AI应用领域的朋友们,大家好!我是大禹智库的向量数据库高级研究员王帅旭,也是《向量数据库指南》的作者。今天,我要和大家聊聊如何使用Mlivus Cloud来搭建生产级AI应用。这可是个热门话题哦,相信大家都非常感兴趣! 《向量数据库指南》 使用Mlivus …

降低大模型幻觉的5种方案

降低大模型幻觉的5种方案 大语言模型&#xff08;如GPT-4&#xff09;在生成文本时&#xff0c;有时会产生所谓的“幻觉”——即生成的内容虽然语法和逻辑上看似正确&#xff0c;但实际上是不准确或虚构的。为了减少这种现象&#xff0c;以下是五种有效的方案&#xff1a;Prom…

必备指南:人人适用的AI大模型学习路径!

23年 AI 大模型技术狂飙一年后&#xff0c;24年 AI 大模型的应用已经在爆发&#xff0c;因此掌握好 AI 大模型的应用开发技术就变成如此重要&#xff0c;那么如何才能更好地掌握呢&#xff1f;一份 AI 大模型详细的学习路线就变得非常重要&#xff01; 由于 AI 大模型应用技术…

R语言绘制散点图

散点图是一种在直角坐标系中用数据点直观呈现两个变量之间关系、可检测异常值并探索数据分布的可视化图表。它是一种常用的数据可视化工具&#xff0c;我们通过不同的参数调整和包的使用&#xff0c;可以创建出满足各种需求的散点图。 常用绘制散点图的函数有plot()函数和ggpl…

图解IP分类及子网掩码计算实例

一、什么是IP地址 在网络世界中&#xff0c;人们为了通信方便给每一台计算机都事先分配一个类似电话号码一样的标识地址&#xff0c;即IP地址。根据TCP/IP协议&#xff0c;IP地址由32位二进制数组成&#xff0c;而且在INTERNET范围内是唯一的。假如某台计算机IP地址为11000000…

基于SpringBoot vue 医院病房信息管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

SpringBoot+ElasticSearch7.12.1+Kibana7.12.1简单使用

案例简介 本案例是把日志数据保存到Elasticsearch的索引中&#xff0c;并通过Kibana图形化界面的开发工具给查询出来添加的日志数据&#xff0c;完成从0到1的简单使用 ElasticSearch职责用法简介 ElasticSearch用在哪 ElasticSearch在我这个案例中&#xff0c;不是用来缓解增…