plt got

news2024/9/21 10:55:51

小白垃圾笔记而已,不建议阅读。

本来是仅仅写的文字,因为我并没有调试出来,在群里问了师傅后才知道是因为我开起了

full Pelro保护。

 

按理说应该关闭的,或者开启部分也可以。

gcc -z lazy -o test test.c          // 部分开启, 即Partial RELRO
gcc -z norelro -o test test.c       // 关闭, 即No RELRO。

gcc -z lazy  test.c    -o file3 -m32
 

明天再写。。。。。。。。。。。。。先不要看。。。。

plt和got本来就存在于elf文件,也就是说他们在磁盘里躺着的时候就已经有了,只是,那个时候他们还是一个占位符。并不是真正的地址。

plt和got是如何结合实现外部函数(glibc)的调用的呢?假如说程序要调用puts()函数。

当函数第一次调用系统函数的时候,(此时程序并不知道所要调用的系统函数(puts)对应libc中对应的地址)

会先去找plt表,plt表里有什么呢??

plt表有一个跳转指令,有一个地址,这个地址是got表中存放的该函数在libc中对应的地址。刚开始got表中对应的并不是libc中的真实地址,而是plt表的地址,是刚刚跳转过来地址的下一跳地址。

因为这个时候got表存储的是plt表中的下一条指令地址。

上述过程意思就是plt->got->plt

 

好好的为啥要跳过来呢?因为我们需要plt表调用函数,掉用什么函数呢?调用查找puts函数在glibc中对应地址的函数。

如何实现?

在函数对应的plt表中第一行是跳转指令,跳转到got表对应地址(刚开始got中对应的地址是跳转指令的下一条指令也就是下边的push),第二条是push,将该函数对应的一个固定的数入栈,第三条指令是跳转:跳转到plt表前边的一个函数,这个函数会去libc中找该函数对应的地址,然后填充到对应got表的地址,并且跳转过去执行。

这个函数调结束后会调用got表对应地址会填充为刚刚调用函数在libc中的真正地址。并且会执行刚刚调用的函数。

那么第二次再次调用的时候会怎样呢?

和第一次刚开始是一样的。去plt表找地址,plt第一条指令跳转到got,与第一次不同的是该函数got表这个时候对应的地址是真实的地址而不是plt表的第二条指令的地址,那么就会直接调用puts库函数(libc中的)。

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

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

相关文章

跨平台跨端的登录流程及其安全设计

跨平台跨端的登录流程及其安全设计 目录 跨平台跨端的登录流程及其安全设计 一、登录流程 1.1、登录流程时序图 1.2、三方App 登录 1.3、请求的路由守卫 二、注册流程 2.1、注册流程时序图 2.2、多因素认证 2.3、自动跳转登录页面 三、涉及的技术与安全 3.1、用户…

基于深度学习的图片上色(Opencv,Pytorch,CNN)

文章目录 1. 前言2.图像格式(RGB,HSV,Lab)2.1 RGB2.2 hsv2.3 Lab 3. 生成对抗网络(GAN)3.1 生成网络(Unet)3.2 判别网络(resnet18) 4. 数据集5. 模型训练与预…

OSCP-Medjed(重置用户密码、mysql写webshell、可写文件替换提权)

目录 扫描 FTP WEB 提权 扫描 FTP 尝试登录到FTP服务器,该服务器位于端口30021 使用Filezilla,并能够浏览文件。那里有一些配置文件,但找不到任何值得注意的东西,不能写入目录。

成长之路---C语言笔记(构造类型之字符数组及字符串函数)

决不要停止自学,也不要忘记,不管你已经学到了多少东西,已经知道了多少东西,知识和学问是没有止境的一鲁巴金 字符数组 字符数组就是用于存放字符型数据的数组。在C语言中,字符串是作为字符数组来处理的,没有…

redis设计与实现读书笔记(2)

今天看的是关于单机数据库,RDB持久化以及AOF持久化的内容。 关于单机数据库 1.默认数据库数量 redis的服务器默认是会创建16个数据库,每个客户端访问的时候都要指定自己的目标数据库。 select可以切换目标数据库。 注意事项 到目前为止&#xff0c…

部署YUM仓库

文章目录 1. YUM仓库服务1.1 YUM概述1.1 准备安装源 2.制作YUM源2.1制作ftp源2.2 国内在线yum源2.3 本地源与在线源同时使用 3.yum软件包的下载方式4.yum的常用操作命令 1. YUM仓库服务 1.1 YUM概述 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器…

【Android入门到项目实战-- 6.1】—— 如何申请用户权限

目录 一、申请权限 1、布局文件 2、MainActivity类 3、AndroidManifest文件 你在使用安卓APP时可能经历过以下场景:使用APP的拍照功能时需要你授权使用相机。那么APP是如何完成申请权限功能的? 访问:https://developer.android.google.cn/…

ERTEC200P-2 PROFINET设备完全开发手册(9-2)

9.2 运行AC1/AC4参考代码 修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 44 编译后下载到评估板运行AC4示例程序 在TIA中导入GSDML-V2.35-Siemens-ERTEC200pApp44-20210623.xml。新建项目,添加PLC和Devkit设备。 按照如下图所示配置模块&am…

2023零基础学软考网络工程师能过吗?

网络工程师是在计算机及其相关领域中拥有一定专业技能和知识的人员,可以为企业或个人设计、建设和维护计算机网络系统。网络工程师的职业前景非常广阔,尤其是随着信息化和互联网的迅速发展,网络工程师的需求也越来越大。软考是国家计算机技术…

Java多线程- synchronized关键字总结

目录 多线程锁的概要 Synchronized关键字 synchronized加锁过程 synchronized锁优化 锁消除 锁粗化 多线程锁的概要 首先对于锁的条件和要点进行一个总结: 锁使用来保护代码片段的, 以保证多线程的安全性, 一次只允许一个线程执行被保护的代码.锁可以管理视图进入被保护代…

malloc的一些知识

这是一个叫malloc的家伙,一直勤勤恳恳帮你为所欲为的玩转系统内存。可是长路漫漫,唯malloc作伴,我却不懂它。走近malloc,多了解一下总没错。 可能对我们来讲,malloc就是void* malloc (size_t len),调用就是…

AcWing算法提高课-2.1.2城堡问题

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 题目传送门点这里 题目描述 1 2 3 4 5 6 7 #############################1 # | # | # | | ######---#####---#---#####---#2 # # | # # # # ##---#…

微信小程序的【运行机制】解读

文章目录 导语1.微信小程序的运行流程1.1 微信小程序的启动模式1.2 前台与后台的概念1.3 挂起1.4 微信小程序的销毁 微信小程序冷启动的页面从新启动策略 3.微信小程序热启动页面4. 退出状态注意点补充总结 导语 前面我们有章节给大家讲到了&#xff0c;微信小程序的生命周期钩…

Socket网络编程练习(C#)

Socket编程&#xff1a;两个窗口通信 本文章代码来自b站视频&#xff1a;【.Net零基础入门 (老赵主讲)-哔哩哔哩】 https://b23.tv/YI5VWaj 原视频发布者为传智播客&#xff0c;本人根据自己的学习进度对代码做了少许优化 一、网络编程前置知识 1.1 什么是网络编程 网络编程…

【Leetcode每日一刷】动态规划:509. 斐波那契数、322. 零钱兑换、300. 最长递增子序列

博主简介&#xff1a;努力学习的22级计科生博主主页&#xff1a; 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 前言&#xff1a;动规五部曲 以下是《代码随想录》作者总结的动规五部曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式&#xff0…

什么是异步,同步,并行,串行,单工,半双工,全双工通信

目录 1 如何理解“BUS总线” 2 通信方式的分类 2.1 串行通信Serial communication 2.1.1 异步传输Asynchronous serial communication 2.1.2 同步传输Synchronous serial communication 2.1.3 单工通信Simplex communication 2.1.4 半双工通信Half-duplex communication…

Unity API详解——Matrix4x4类

在脚本中通常用Vector3、QUaternion、Transform等类的属性和方法来对物体进行变换&#xff0c;Matrix4x4类通常在一些比较特殊的地方&#xff0c;如对摄像机的非标准投影变换等。本博客主要介绍Matrix4x4类的一些实例和静态方法。 文章目录 一、Matrix4x4类实例方法1、Multply…

机器学习实战教程(九):模型泛化

泛化能力 模型泛化是指机器学习模型对新的、未见过的数据的适应能力。在机器学习中&#xff0c;我们通常会将已有的数据集划分为训练集和测试集&#xff0c;使用训练集训练模型&#xff0c;然后使用测试集来评估模型的性能。模型在训练集上表现得好&#xff0c;并不一定能在测…

Redis源码分析(基于Redis7,对比Redis6)

PS: redis7.0.9版本的 1.Redis 源代码分类 1.1Redis 基本的数据结构 基础 Redis对象object.c字符串t_string.c列表t_list.c字典t_hash.c集合及有序集合t_set.c和z_set.c数据流 t_stream 底层实现结构 listpack.c 和 rax.c 简单动态字符串 sds.c整数集合 intset.c压缩列表 z…

【dp】最长递增子序列

文章目录 方法一&#xff1a;动态规划方法二&#xff1a;贪心 二分查找构造最长递增子序列 方法一&#xff1a;动态规划 dp[i]&#xff1a;末尾元素为arr[i]的最长子序列的长度 从0遍历到i - 1&#xff0c;若遍历到的元素小于当前值arr[i]&#xff0c;表示当前值arr[i]可以和…