【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )
文章目錄
- 一、GOT 表數(shù)據(jù)結構分析
- 二、函數(shù)根據(jù) GOT 表進行跳轉的流程
一、GOT 表數(shù)據(jù)結構分析
GOT 表分為 222 部分 ,
- 一部分在 調用者部分 ( 可執(zhí)行文件 ) 中 ,
- 一部分在 被調用者部分 ( 靜態(tài) / 動態(tài) 函數(shù)庫 ) 中 ;
在 函數(shù)庫 中的部分是真正的 GOT 表 , 在調用者的部分是 PLT 表 ;
PLT 表示一個 跳轉指令列表 , 執(zhí)行該跳轉指令 , 可以直接跳轉到對應的 GOT 表中 , GOT 表記錄 函數(shù)真實的位置 , 此時可以 跳轉到 函數(shù)真實位置 ;
GOT 表在動態(tài)庫中是以數(shù)組形式存在的 , 其中的數(shù)據(jù)結構很負責 , 不只是有 函數(shù)地址 , 還有其它額外數(shù)據(jù)信息 ;
二、函數(shù)根據(jù) GOT 表進行跳轉的流程
函數(shù)跳轉流程 :
PLT 表中 保存的是 jmp 指令 , 該指令跳轉的目的地址是 動態(tài)庫 中的 GOT 表 , GOT 表中記錄了真實的被調用函數(shù)的地址 , 之后直接跳轉到該 真實函數(shù)地址 中 ;
以訪問 scanf 函數(shù)為例 : 在 PLT 表中 , 保存的是 jmp GOT表地址 指令 , GOT 表地址 指向 GOT 表的一個數(shù)組元素 , 該數(shù)組元素存儲這 scanf 函數(shù)的實際地址 , 因此該 GOT 表地址 本質 是 保存 scanf 函數(shù)的地址 的 數(shù)據(jù) 的 地址 ; GOT 表 是 libc.so 中的 ;
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】函数拦截 ( C
- 下一篇: 【Android 逆向】函数拦截 ( G