当前位置: 首页 > news >正文

【个人简单记录】PLT,GOT函数加载机制

PLT GOT 加载记录

以ARM64架构为例

1…text代码中调用

执行 .text:000000000002001C D5 A9 FF 97 BL .popen

在这里插入图片描述

2.跳转到.plt表,根据计算后,得到函数在got里面的地址

arm64计算的方法: got地址 = x16后面的数字(第一行) + add命令后面的数字

// --------------- [首次] ---------------
.text 代码调用 -> .plt (发现.got没有值---地址) -> 调用_dl_runtime_resolve(x16) 自动调用目标函数 -> 返回.text 代码调用处的下一条指令
// 首次: x17 存放 _dl_runtime_resolve 地址
ADD x16,x16,#偏移 // 存放函数在got表里的地址  
// 并将x16作为参数传给
_dl_runtime_resolve 解析器函数//  写个最简单的理解
void _dl_runtime_resolve(long got地址){// 自动识别要调用的函数名字 (如popen)// 获取so内 popen实际地址 (如libc.so)// 将 popen实际地址 存入 got地址 (popen在你自己写的代码里对应的全局函数地址)// 调用 popen (并将x0....参数传入,进行调用)// 跳转回 .text 代码调用处的下一条指令
}// --------------- [之后] ---------------
.text 代码调用 -> .plt (发现.got有值---地址) -> 根据.got存的地址 ->调用目标函数 -> 返回.text 代码调用处的下一条指令

在这里插入图片描述

IDA跳转到got看看

在这里插入图片描述

首次这里都是0

之后这里会变成目标函数地址

在这里插入图片描述

不知道这样能不能清晰一点,反正我感觉已经很清晰了(蓝色线–首次调用,红色线–第二次调用)

在这里插入图片描述

http://www.dtcms.com/a/329710.html

相关文章:

  • java中的各种引用
  • Jenkins(集群与流水线配置)
  • 会议征稿!IOP出版|第二届人工智能、光电子学与光学技术国际研讨会(AIOT2025)
  • PowerShell扩展命令深度解析:模块与PSSnapin的全面对比与最佳实践
  • 408每日一题笔记 41-50
  • YOLO玩转目标检测(v5和v11两个版本)
  • 初识神经网络05——构建神经网络3
  • Scala重点(基础、面向对象、高阶函数、集合、模式匹配)
  • Linux网络性能调优终极指南:深度解析与实践
  • Easysearch 数据迁移之数据比对
  • Java 状态机详解 - 三种状态机实现方式优雅消灭 if-else 嵌套
  • [ 数据结构 ] 泛型 (上)
  • Docker部署RAGFlow:生产环境开启Kibana与ES安全集成指南
  • 力扣42:接雨水
  • 提升社交媒体管理效率的利器:社交媒体内容看板工具解析
  • kernel pwn 入门(四) ret2dir详细
  • 【新手入门】Android Studio 项目结构拆解,快速理解文件作用!
  • 医疗注册资料
  • 《软件工程导论》实验报告二 需求分析建模(一)
  • HTTP 2.0 和 3.0 有什么区别?
  • 《卷积神经网络(CNN):解锁视觉与多模态任务的深度学习核心》
  • 企业在使用巨椰云手机进行多开挂机功能的优点有哪些?
  • Mysql数据库迁移到GaussDB注意事项
  • GaussDB 权限管理的系统性技术解析与实践指南
  • 广州健永信息科技有限公司发展历程
  • 认识 C 语言的文件 I/O
  • ip -details link show can0 输出项解释
  • ImportError: Encountered error: Failed to import NATTEN‘s CPP backend.
  • Unity刮刮乐效果实现教程
  • MySQL 分库分表详解(含实践示例)