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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux ptrace 读内存,Linux高级调试与优化——ptrace

發(fā)布時間:2025/3/11 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux ptrace 读内存,Linux高级调试与优化——ptrace 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ptrace (process trace)

#include

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

ptrace系統(tǒng)調(diào)用運行tracer進程監(jiān)視和控制tracee進程的執(zhí)行過程,檢查和修改tracee進程的內(nèi)存和寄存器值。ptrace主要用來實現(xiàn)端點調(diào)試和跟蹤系統(tǒng)調(diào)用。

tracee進程首先需要attach在tracer進程上,attach和接下來的命令是以線程為單位的,每一個tracee的線程都需要單獨attach到一個不同的tracer進程上,如果沒有attach到tracer上,則無法進行調(diào)試。

ptrace系統(tǒng)調(diào)用根據(jù)request分為不同的應(yīng)用場景:

1) PTRACE_TRACEME

子線程中通過PTRACE_TRACEME請求父線程跟蹤自己,只有PTRACE_TRACEME請求ID是tracee調(diào)用的,其他請求ID都是tracer調(diào)用的。

ptrace(PTRACE_TRACEME, NULL, NULL, NULL);

2) PTRACE_PEEKTEXT,PTRACE_PEEKDATA

從tracee的內(nèi)存addr處讀取一個雙字節(jié)數(shù)據(jù)。

Linux不區(qū)分代碼地址空間和數(shù)據(jù)地址空間,所以這兩個請求ID是一樣的。

3) PTRACE_PEEKUSER

從tracee的用戶區(qū)addr處讀取一個雙字節(jié)數(shù)據(jù),通常包含寄存器值和進程相關(guān)的信息。(sys/user.h)

4) PTRACE_PORKTEXT,PTRACE_POKEDATA

將data雙字節(jié)數(shù)據(jù)寫入tracee內(nèi)存的addr處

5) PTRACE_POKEUSER

拷貝一個雙字節(jié)數(shù)據(jù)data到tracee的用戶區(qū)addr處

6) PTRACE_GETREGS,PTRACE_GETFPREGS

拷貝tracee的通用寄存器值或者浮點寄存器值到tracer的data處。不是所有的CPU架構(gòu)都支持該請求

7) PTRACE_GETREGSET

讀取tracee的寄存器

8) PTRACE_SETREGS,PTRACE_SETFPREGS

修改tracee的通用寄存器或者浮點寄存器

9) PTRACE_SETREGSET

修改tracee的寄存器

10) PTRACE_GETSIGINFO

獲取導(dǎo)致tracee停止執(zhí)行的信號量。通過data返回siginfo_t結(jié)構(gòu)體

11) PTRACE_SETSIGINFO

設(shè)置信號量,這樣正常發(fā)給tracee的信號量會首先被tracer捕獲

12) PTRACE_PEEKSIGINFO

只讀tracee的siginfo_t結(jié)構(gòu)體

13) PTRACE_GETSIGMASK

獲取tracee屏蔽的信號量

14) PTRACE_SETSIGMASK

設(shè)置tracee信號量屏蔽屬性

15) PTRACE_SETOPTIONS

16) PTRACE_GETEVENTMSG

獲取ptrace消息事件

17) PTRACE_CONT

重新運行停止運行的tracee線程

18) PTRACE_SYSCALL,PTRACE_SIGLESTEP

單步調(diào)試tracee

19) PTRACE_SYSEMU,PTRACE_SYSEMU_SIGLESTEP

20) PTRACE_LISTEN

重啟停止的tracee,但是不執(zhí)行它

21) PTRACE_KILL

給tracee發(fā)送SIGKILL終止它運行

22) PTRACE_INTERRUPT

停止tracee運行

23) PTRACE_ATTACH

附著在pid進程上,讓他成為調(diào)用者的tracee

24) PTRACE_SZIZE

與PTRACE_ATTACH不同的是,該請求不會停止tracee的執(zhí)行

25) PTRACE_DETACH

取消附著,恢復(fù)tracee執(zhí)行

總結(jié)

以上是生活随笔為你收集整理的linux ptrace 读内存,Linux高级调试与优化——ptrace的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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