【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )
【摘要】
文章目录
一、GOT 表数据结构分析二、函数根据 GOT 表进行跳转的流程
一、GOT 表数据结构分析
GOT 表分为
...
一、GOT 表数据结构分析
GOT 表分为 2 2 2 部分 ,
- 一部分在 调用者部分 ( 可执行文件 ) 中 ,
- 一部分在 被调用者部分 ( 静态 / 动态 函数库 ) 中 ;
在 函数库 中的部分是真正的 GOT 表 , 在调用者的部分是 PLT 表 ;
PLT 表示一个 跳转指令列表 , 执行该跳转指令 , 可以直接跳转到对应的 GOT 表中 , GOT 表记录 函数真实的位置 , 此时可以 跳转到 函数真实位置 ;
GOT 表在动态库中是以数组形式存在的 , 其中的数据结构很负责 , 不只是有 函数地址 , 还有其它额外数据信息 ;
二、函数根据 GOT 表进行跳转的流程
函数跳转流程 :
PLT 表中 保存的是 jmp 指令 , 该指令跳转的目的地址是 动态库 中的 GOT 表 , GOT 表中记录了真实的被调用函数的地址 , 之后直接跳转到该 真实函数地址 中 ;
以访问 scanf 函数为例 : 在 PLT 表中 , 保存的是 jmp GOT表地址
指令 , GOT 表地址 指向 GOT 表的一个数组元素 , 该数组元素存储这 scanf 函数的实际地址 , 因此该 GOT 表地址 本质 是 保存 scanf 函数的地址 的 数据 的 地址 ; GOT 表 是 libc.so 中的 ;
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/121225631
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)