關於ptrace 請求類型

request:請求執行的行爲,可能選擇有

  • PTRACE_TRACEME //指示父進程跟蹤某個子進程的執行。任何傳給子進程的信號將導致其停止執行,同時父進程調用wait()時會得到通告。之後,子進程調用exec()時,核心會給它傳送SIGTRAP信號,在新程序開始執行前,給予父進程控制的機會。pid, addr, 和 data參數被忽略。

  • PTRACE_PEEKTEXT, PTRACE_PEEKDATA //從子進程內存空間addr指向的位置讀取一個字,並作爲調用的結果返回。Linux內部對文本段和數據段不加區分,所以目前這兩個請求相等。data參數被忽略。

  • PTRACE_PEEKUSR //從子進程的用戶區addr指向的位置讀取一個字,並作爲調用的結果返回。

  • PTRACE_POKETEXT, PTRACE_POKEDATA //將data指向的字拷貝到子進程內存空間由addr指向的位置。

  • PTRACE_POKEUSR //將data指向的字拷貝到子進程用戶區由addr指向的位置。

  • PTRACE_GETREGS, PTRACE_GETFPREGS //將子進程通用和浮點寄存器的值拷貝到父進程內由data指向的位置。addr參數被忽略。

  • PTRACE_GETSIGINFO //獲取導致子進程停止執行的信號信息,並將其存放在父進程內由data指向的位置。addr參數被忽略。

  • PTRACE_SETREGS, PTRACE_SETFPREGS //從父進程內將data指向的數據拷貝到子進程的通用和浮點寄存器。addr參數被忽略。

  • PTRACE_SETSIGINFO //將父進程內由data指向的數據作爲siginfo_t結構體拷貝到子進程。addr參數被忽略。

  • PTRACE_SETOPTIONS //將父進程內由data指向的值設定爲ptrace選項,data作爲位掩碼來解釋,由下面的標誌指定

  • PTRACE_O_TRACESYSGOOD //當轉發syscall陷阱(traps)時,在信號編碼中設置位7,即第一個字節的最高位。例如:SIGTRAP | 0x80。這有利於追蹤者識別一般的陷阱和那些由syscall引起的陷阱。

  • PTRACE_O_TRACEFORK //通過 (SIGTRAP | PTRACE_EVENT_FORK << 8) 使子進程下次調用fork()時停止其執行,並自動跟蹤開始執行時就已設置SIGSTOP信號的新進程。新進程的PID可以通過PTRACE_GETEVENTMSG獲取。

  • PTRACE_O_TRACEVFORK //通過 (SIGTRAP | PTRACE_EVENT_VFORK << 8) 使子進程下次調用vfork()時停止其執行,並自動跟蹤開始執行時就已設置SIGSTOP信號的新進程。新進程的PID可以通過PTRACE_GETEVENTMSG獲取。

  • PTRACE_O_TRACECLONE //通過 (SIGTRAP | PTRACE_EVENT_CLONE << 8) 使子進程下次調用clone()時停止其執行,並自動跟蹤開始執行時就已設置SIGSTOP信號的新進程。新進程的PID可以通過PTRACE_GETEVENTMSG獲取。

  • PTRACE_O_TRACEEXEC //通過 (IGTRAP | PTRACE_EVENT_EXEC << 8) 使子進程下次調用exec()時停止其執行。

  • PTRACE_O_TRACEVFORKDONE //通過 (SIGTRAP | PTRACE_EVENT_VFORK_DONE << 8) 使子進程下次調用exec()並完成時停止其執行。

  • PTRACE_O_TRACEEXIT //通過 (SIGTRAP | PTRACE_EVENT_EXIT << 8) 使子進程退出時停止其執行。子進程的退出狀態可通過PTRACE_GETEVENTMSG。

  • PTRACE_GETEVENTMSG //獲取剛發生的ptrace事件消息,並存放在父進程內由data指向的位置。addr參數被忽略。

  • PTRACE_CONT //重啓動已停止的進程。如果data指向的數據並非0,同時也不是SIGSTOP信號,將會作爲傳遞給子進程的信號來解釋。那樣,父進程可以控制是否將一個信號發送給子進程。 addr參數被忽略。

  • PTRACE_SYSCALL, PTRACE_SINGLESTEP //如同PTRACE_CONT一樣重啓子進程的執行,但指定子進程在下個入口或從系統調用退出時,或者執行單個指令後停止執行,這可用於實現單步調試。addr參數被忽略。

  • PTRACE_SYSEMU, PTRACE_SYSEMU_SINGLESTEP //用於用戶模式的程序仿真子進程的所有系統調用。

  • PTRACE_KILL //給子進程發送SIGKILL信號,從而終止其執行。data,addr參數被忽略。

  • PTRACE_ATTACH //銜接到pid指定的進程,從而使其成爲當前進程的追蹤目標。

  • PTRACE_DETACH //PTRACE_ATTACH的反向操作。

pid:目標進程標識。

addr:執行peek和poke操作的目標地址。

data:對於poke操作,存放數據的地方。對於peek操作,獲取數據的地方。

返回說明:

成功執行時,PTRACE_PEEK請求返回所請求的數據,其它返回0。失敗返回-1,errno被設爲以下的某個值。由於一個成功的PTRACE_PEEK請求可能返回-1,決定錯誤是否發生前,調用者應檢查errno。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章