linux ptrace 读内存,Linux高级调试与优化——ptrace
ptrace (process trace)
#include
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace系統(tǒng)調(diào)用運(yùn)行tracer進(jìn)程監(jiān)視和控制tracee進(jìn)程的執(zhí)行過程,檢查和修改tracee進(jìn)程的內(nèi)存和寄存器值。ptrace主要用來實(shí)現(xiàn)端點(diǎn)調(diào)試和跟蹤系統(tǒng)調(diào)用。
tracee進(jìn)程首先需要attach在tracer進(jìn)程上,attach和接下來的命令是以線程為單位的,每一個(gè)tracee的線程都需要單獨(dú)attach到一個(gè)不同的tracer進(jìn)程上,如果沒有attach到tracer上,則無法進(jìn)行調(diào)試。
ptrace系統(tǒng)調(diào)用根據(jù)request分為不同的應(yīng)用場(chǎng)景:
1) PTRACE_TRACEME
子線程中通過PTRACE_TRACEME請(qǐng)求父線程跟蹤自己,只有PTRACE_TRACEME請(qǐng)求ID是tracee調(diào)用的,其他請(qǐng)求ID都是tracer調(diào)用的。
ptrace(PTRACE_TRACEME, NULL, NULL, NULL);
2) PTRACE_PEEKTEXT,PTRACE_PEEKDATA
從tracee的內(nèi)存addr處讀取一個(gè)雙字節(jié)數(shù)據(jù)。
Linux不區(qū)分代碼地址空間和數(shù)據(jù)地址空間,所以這兩個(gè)請(qǐng)求ID是一樣的。
3) PTRACE_PEEKUSER
從tracee的用戶區(qū)addr處讀取一個(gè)雙字節(jié)數(shù)據(jù),通常包含寄存器值和進(jìn)程相關(guān)的信息。(sys/user.h)
4) PTRACE_PORKTEXT,PTRACE_POKEDATA
將data雙字節(jié)數(shù)據(jù)寫入tracee內(nèi)存的addr處
5) PTRACE_POKEUSER
拷貝一個(gè)雙字節(jié)數(shù)據(jù)data到tracee的用戶區(qū)addr處
6) PTRACE_GETREGS,PTRACE_GETFPREGS
拷貝tracee的通用寄存器值或者浮點(diǎn)寄存器值到tracer的data處。不是所有的CPU架構(gòu)都支持該請(qǐng)求
7) PTRACE_GETREGSET
讀取tracee的寄存器
8) PTRACE_SETREGS,PTRACE_SETFPREGS
修改tracee的通用寄存器或者浮點(diǎn)寄存器
9) PTRACE_SETREGSET
修改tracee的寄存器
10) PTRACE_GETSIGINFO
獲取導(dǎo)致tracee停止執(zhí)行的信號(hào)量。通過data返回siginfo_t結(jié)構(gòu)體
11) PTRACE_SETSIGINFO
設(shè)置信號(hào)量,這樣正常發(fā)給tracee的信號(hào)量會(huì)首先被tracer捕獲
12) PTRACE_PEEKSIGINFO
只讀tracee的siginfo_t結(jié)構(gòu)體
13) PTRACE_GETSIGMASK
獲取tracee屏蔽的信號(hào)量
14) PTRACE_SETSIGMASK
設(shè)置tracee信號(hào)量屏蔽屬性
15) PTRACE_SETOPTIONS
16) PTRACE_GETEVENTMSG
獲取ptrace消息事件
17) PTRACE_CONT
重新運(yùn)行停止運(yùn)行的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終止它運(yùn)行
22) PTRACE_INTERRUPT
停止tracee運(yùn)行
23) PTRACE_ATTACH
附著在pid進(jìn)程上,讓他成為調(diào)用者的tracee
24) PTRACE_SZIZE
與PTRACE_ATTACH不同的是,該請(qǐng)求不會(huì)停止tracee的執(zhí)行
25) PTRACE_DETACH
取消附著,恢復(fù)tracee執(zhí)行
總結(jié)
以上是生活随笔為你收集整理的linux ptrace 读内存,Linux高级调试与优化——ptrace的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css怎样使弹跳的小球旋转,如何使用纯C
- 下一篇: linux weblogic 内存溢出,