【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
文章目錄
- 一、等待進程狀態(tài)改變
- 二、detach 脫離進程調試 PTRACE_DETACH
- 三、調試中繼續(xù)運行程序 PTRACE_CONT
一、等待進程狀態(tài)改變
上一篇博客 【Android 逆向】代碼調試器開發(fā) ( 代碼調試器功能簡介 | 設置斷點 | 讀寫內存 | 讀寫寄存器 | 恢復運行 | Attach 進程 ) 中 , 介紹了 attach 被調試進程 ;
之后需要 等待 被調試 進程的狀態(tài)改變 , 如果進入處于被調試的狀態(tài)下 , 其進程的狀態(tài)會發(fā)生變化 ;
被調試進程一旦進程處于被調試狀態(tài) , 就會處于 WUNTRACED 狀態(tài) , WUNTRACED 是宏定義 值為 2 ;
attach 進程完整源碼 : 開發(fā)的程序就是用于調試另外一個程序的代碼 ;
int CPtrace::attachProc(pid_t nPid) {// 調用 ptrace 函數 attach 被調試進程 if (ptrace(PTRACE_ATTACH, nPid, NULL, 0) < 0) {LOGE("error[%d][%s]", errno, strerror(errno));return PTERR_ATTACH_FAILED;}// 被調試進程的 PID 進程號 m_nPid = nPid;// 用于保存進程狀態(tài) int status = 0;// 等待進程狀態(tài) // 如果進入處于被調試的狀態(tài)下 , 其進程的狀態(tài)會發(fā)生變化 // 一旦進程處于被調試狀態(tài) , 就會處于 WUNTRACED 狀態(tài) , WUNTRACED 是宏定義 值為 2 waitpid(nPid, &status, WUNTRACED);return PTERR_SUCCESS; }需要狀態(tài)返回變化時 , 才需要調用 waitpid() 方法 , 等待進程狀態(tài)改變 ;
二、detach 脫離進程調試 PTRACE_DETACH
如果需要 detach 脫離調試進程 , 停止調試 , 調用 ptrace 方法 , 傳入 PTRACE_DETACH 參數 ;
ptrace(PTRACE_DETACH, m_nPid, NULL, 0)參數含義參考 【Android 逆向】ptrace 函數 ( ptrace 函數族 | 進程附著 | 進程脫離 | 進程數據讀寫權限 | 進程對應的主線程寄存器讀寫 | 單步調試 |ptrace 函數族狀態(tài)轉換 ) 博客 ;
detach 調試進程 完整代碼 :
int CPtrace::detachProc() {// 如果當前沒有被調試的進程 , 直接返回if (m_nPid == 0)return PTERR_SUCCESS;// detach 調試進程 , 如果脫離成功 , 直接返回 if (ptrace(PTRACE_DETACH, m_nPid, NULL, 0) < 0) {return PTERR_DETACH_FAILED;}// 收尾操作 m_nPid = 0;return PTERR_SUCCESS; }需要狀態(tài)返回變化時 , 才需要調用 waitpid() 方法 , 等待進程狀態(tài)改變 ;
本操作不需要等待 被調試進程 狀態(tài)返回變化 ;
三、調試中繼續(xù)運行程序 PTRACE_CONT
調試過程中 , 如果需要被調試進程繼續(xù)運行 , 運行到下一個斷點或者運行一行代碼 ,
調用 ptrace 方法 , 傳入 PTRACE_CONT 參數 , 可以讓被調試進程繼續(xù)執(zhí)行 ;
ptrace(PTRACE_CONT, m_nPid, NULL, 0)調試中繼續(xù)運行程序完整代碼 :
int CPtrace::contProc() {if (ptrace(PTRACE_CONT, m_nPid, NULL, 0) < 0) {LOGE("%d %s %d", errno, strerror(errno), m_nPid);return PTERR_CONTINUE_FAILED;}return PTERR_SUCCESS; }需要狀態(tài)返回變化時 , 才需要調用 waitpid() 方法 , 等待進程狀態(tài)改變 ;
本操作不需要等待 被調試進程 狀態(tài)返回變化 ;
總結
以上是生活随笔為你收集整理的【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】代码调试器开发
- 下一篇: 【Android 逆向】代码调试器开发