日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )

發布時間:2025/6/17 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、等待進程狀態改變
  • 二、detach 脫離進程調試 PTRACE_DETACH
  • 三、調試中繼續運行程序 PTRACE_CONT





一、等待進程狀態改變



上一篇博客 【Android 逆向】代碼調試器開發 ( 代碼調試器功能簡介 | 設置斷點 | 讀寫內存 | 讀寫寄存器 | 恢復運行 | Attach 進程 ) 中 , 介紹了 attach 被調試進程 ;

之后需要 等待 被調試 進程的狀態改變 , 如果進入處于被調試的狀態下 , 其進程的狀態會發生變化 ;

被調試進程一旦進程處于被調試狀態 , 就會處于 WUNTRACED 狀態 , WUNTRACED 是宏定義 值為 2 ;


attach 進程完整源碼 : 開發的程序就是用于調試另外一個程序的代碼 ;

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;// 用于保存進程狀態 int status = 0;// 等待進程狀態 // 如果進入處于被調試的狀態下 , 其進程的狀態會發生變化 // 一旦進程處于被調試狀態 , 就會處于 WUNTRACED 狀態 , WUNTRACED 是宏定義 值為 2 waitpid(nPid, &status, WUNTRACED);return PTERR_SUCCESS; }

需要狀態返回變化時 , 才需要調用 waitpid() 方法 , 等待進程狀態改變 ;





二、detach 脫離進程調試 PTRACE_DETACH



如果需要 detach 脫離調試進程 , 停止調試 , 調用 ptrace 方法 , 傳入 PTRACE_DETACH 參數 ;

ptrace(PTRACE_DETACH, m_nPid, NULL, 0)

參數含義參考 【Android 逆向】ptrace 函數 ( ptrace 函數族 | 進程附著 | 進程脫離 | 進程數據讀寫權限 | 進程對應的主線程寄存器讀寫 | 單步調試 |ptrace 函數族狀態轉換 ) 博客 ;


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; }

需要狀態返回變化時 , 才需要調用 waitpid() 方法 , 等待進程狀態改變 ;

本操作不需要等待 被調試進程 狀態返回變化 ;





三、調試中繼續運行程序 PTRACE_CONT



調試過程中 , 如果需要被調試進程繼續運行 , 運行到下一個斷點或者運行一行代碼 ,

調用 ptrace 方法 , 傳入 PTRACE_CONT 參數 , 可以讓被調試進程繼續執行 ;

ptrace(PTRACE_CONT, m_nPid, NULL, 0)

調試中繼續運行程序完整代碼 :

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; }

需要狀態返回變化時 , 才需要調用 waitpid() 方法 , 等待進程狀態改變 ;

本操作不需要等待 被調試進程 狀態返回變化 ;

總結

以上是生活随笔為你收集整理的【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。