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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )

發(fā)布時間:2025/6/17 Android 33 豆豆

文章目錄

  • 一、ptrace 函數(shù)族
    • 1、進程附著
    • 2、進程脫離
    • 3、進程數(shù)據(jù)讀寫權限
    • 4、進程對應的主線程寄存器讀寫
    • 5、單步調試
    • 6、繼續(xù)向后執(zhí)行
  • 二、ptrace 函數(shù)族狀態(tài)轉換





一、ptrace 函數(shù)族



ptrace 函數(shù)原型 : ptrace 函數(shù)實際上是由一系列的函數(shù)組成 , 具體調用哪個函數(shù) , 要根據(jù)第一個參數(shù)確定 ;

#include <sys/ptrace.h>long ptrace(enum __ptrace_request request, pid_t pid,void *addr, void *data);

ptrace 函數(shù)參考文檔 : https://man7.org/linux/man-pages/man2/ptrace.2.html

下面是 enum __ptrace_request request 參數(shù)的可能的取值 : 在上述文檔中有詳細的說明 ;


1、進程附著


PTRACE_ATTACH : 指明要附著的進程 ;

進程 A 要 調試進程 B , 在進程 A 中 先通過 ptrace 函數(shù) 附著進程 B , 傳入 PTRACE_ATTACH 作為第一參數(shù) ;
( 注意 : 進程 A 必須有 root 權限 )

調用 ptrace 函數(shù)時 , 會調用系統(tǒng)內核層 , 給進程 A 一個權限 , 將被調試進程 B 的控制權限交給 進程 A ;

進程 A 調試 進程 B 時 , 進程 B 被掛起 , 進程 B 的 CPU 和 內存信息 , 都會被保存到內存中 , 進程 B 處于休眠狀態(tài) , CPU 不會運行 進程 B 的任何指令 ;


2、進程脫離


PTRACE_DETACH : 要脫離的進程 ;

進程 A 如果調用 ptrace 函數(shù) , 傳入 PTRACE_DETACH , 就會釋放權限 , 發(fā)出信號 , 進程 B 恢復運行 ;


3、進程數(shù)據(jù)讀寫權限


讀取進程數(shù)據(jù)權限 : PTRACE_PEEKTEXT、PTRACE_PEEKDATA、PTRACE_PEEKUSER

寫入進程數(shù)據(jù)權限 : PTRACE_POKETEXT、PTRACE_POKEDATA、PTRACE_POKEUSER

注意 : 讀寫內存時 , 盡量在進程掛起后讀寫 , 否則內存數(shù)據(jù)不可靠 ;


4、進程對應的主線程寄存器讀寫


讀取寄存器 : PTRACE_GETREGS

寫出寄存器 : PTRACE_SETREGS

同一個進程 , 可能有多個線程 , 不同線程可能會被分配到不同的 CPU , 進程讀寫的寄存器可能有多套 ;

上面的 PTRACE_GETREGS , PTRACE_SETREGS , 讀寫的寄存器 是 執(zhí)行 主線程 的 CPU 的 寄存器 ;


5、單步調試


PTRACE_SYSCALL : 每當發(fā)生系統(tǒng)調用時, 被調試進程暫停 , 將控制權交還給調試進程 ;

PTRACE_SINGLESTEP : 每當執(zhí)行一條指令時 , 被調試進程暫停 , 將控制權交還給調試進程 ; 單步調試 ;


6、繼續(xù)向后執(zhí)行


PTRACE_CONT : ptrace 調試進程 , 完畢之后 , 退出調試 , 程序繼續(xù)向后執(zhí)行 , 使用該 PTRACE_CONT 作為 ptrace 函數(shù)的 第一參數(shù)即可 ;

CONTINUE 繼續(xù)執(zhí)行 ;





二、ptrace 函數(shù)族狀態(tài)轉換



進程 A 調試 進程 B , 進程 A 先 調用 ptrace 函數(shù) Attach 進程 B , 可以進行 數(shù)據(jù)讀寫 , 單步執(zhí)行 , 等待系統(tǒng)調用 , 讀寫寄存器 等操作 , 執(zhí)行完畢后 可以繼續(xù)執(zhí)行 ;

調試完畢后 , 進程 B 脫離 Detach 進程 A 的調試 ;

總結

以上是生活随笔為你收集整理的【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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