【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )

文章目录

一、GOT 表数据结构分析

二、函数根据 GOT 表进行跳转的流程





一、GOT 表数据结构分析


GOT 表分为 2 22 部分 ,


一部分在 调用者部分 ( 可执行文件 ) 中 ,

一部分在 被调用者部分 ( 静态 / 动态 函数库 ) 中 ;

在 函数库 中的部分是真正的 GOT 表 , 在调用者的部分是 PLT 表 ;


PLT 表示一个 跳转指令列表 , 执行该跳转指令 , 可以直接跳转到对应的 GOT 表中 , GOT 表记录 函数真实的位置 , 此时可以 跳转到 函数真实位置 ;


GOT 表在动态库中是以数组形式存在的 , 其中的数据结构很负责 , 不只是有 函数地址 , 还有其它额外数据信息 ;



【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )





二、函数根据 GOT 表进行跳转的流程


函数跳转流程 :


PLT 表中 保存的是 jmp 指令 , 该指令跳转的目的地址是 动态库 中的 GOT 表 , GOT 表中记录了真实的被调用函数的地址 , 之后直接跳转到该 真实函数地址 中 ;


以访问 scanf 函数为例 : 在 PLT 表中 , 保存的是 jmp GOT表地址 指令 , GOT 表地址 指向 GOT 表的一个数组元素 , 该数组元素存储这 scanf 函数的实际地址 , 因此该 GOT 表地址 本质 是 保存 scanf 函数的地址 的 数据 的 地址 ; GOT 表 是 libc.so 中的 ;

【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )


上一篇:Myeclipse 安装SVN步骤


下一篇:记住密码超简单实现(C#)