【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )
生活随笔
收集整理的這篇文章主要介紹了
【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、代碼調試器功能簡介
- 二、Attach 進程
一、代碼調試器功能簡介
代碼調試器功能 :
- 設置斷點 : 無論什么類型的調試器 , 都必須可以設置斷點 , 運行到斷點處 , 掛起被調試進程 , 讀取當前狀態的 CPU 寄存器和內存數據 ;
- arm 架構中 , 有一個單步調試標志位 , 將該標志位設置為 1 , 即可進行單步調試 ;
- x86 架構中 , 主要是靠 int3 觸發 , int3 對應 0xCC 機器碼 , 將該機器碼寫入指令指定位置后 , 就會執行中斷 , 調試器捕獲該中斷處理 , 就可以進入調試 ;
- 如果沒有設置斷點 , 想要調試程序 , 只能在系統調用時 , 觸發中斷 ; 如 : printf , 打印日志 , 文件改變 , 顯示內容改變 等 ;
- 讀寫內存 : 可以讀寫 被調試進程 的內存數據 ;
- 讀寫寄存器 : 可以讀寫 被調試進程 的 CPU 寄存器數據 ; 如果有多個線程 , 默認讀寫主線程寄存器 ;
- 恢復運行 : 調試完畢后 , 還需要可以恢復運行 ; 調用 ptrace 函數 , 傳入 PTRACE_CONT 參數 , 就可以繼續進行 ;
上述所有操作 , 都是通過調用 ptrace 方法完成的 , 只是傳入不同的參數 , 執行不同的操作 ;
參考 【Android 逆向】ptrace 函數 ( ptrace 函數族 | 進程附著 | 進程脫離 | 進程數據讀寫權限 | 進程對應的主線程寄存器讀寫 | 單步調試 |ptrace 函數族狀態轉換 ) 博客 ;
二、Attach 進程
進程 A 調試 進程 B , 首先要 attach 進程 B , attach 操作需要指定 進程 B 的 進程號 PID ;
進程 ID 在當前系統運行時是唯一的 ; 進程 B 每次啟動時 , 進程號是隨機分配的 , 值并不固定 ;
PID 進程號的取值范圍 0 ~ 32767 ; 上限是 65535 一半 ;
一般情況下 1000 以下的進程號 , 是系統進程使用的 ;
以 非 root 權限執行的進程 , 都是 1000 以上的進程號 ;
Attach 進程代碼 : PTRACE_ATTACH 參數表示該函數操作是 Attach 被調試進程 , nPid 參數為 進程 PID ;
ptrace(PTRACE_ATTACH, nPid, NULL, 0)ptrace 函數參考文檔 : https://man7.org/linux/man-pages/man2/ptrace.2.html
總結
以上是生活随笔為你收集整理的【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】ptrace 函
- 下一篇: 【Android 逆向】代码调试器开发