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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux 分析 ptrace

發布時間:2025/6/15 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 分析 ptrace 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

linux?分析?ptrace()

形式

#include <sys/ptrace.h>

int ptrace(int request, int pid, int addr, int data);

?

描述

Ptrace 提供了一種父進程可以控制子進程運行,并可以檢查和改變它的核心p_w_picpath。它主要用于實現斷點調試。一個被跟蹤的進程運行中,直到發生一個信號。則進程被中止,并且通知其父進程。在進程中止的狀態下,進程的內存空間可以被讀寫。父進程還可以使子進程繼續執行,并選擇是否是否忽略引起中止的信號。

Request參數決定了系統調用的功能:

PTRACE_TRACEME

本進程被其父進程所跟蹤。其父進程應該希望跟蹤子進程。

PTRACE_PEEKTEXT, PTRACE_PEEKDATA

從內存地址中讀取一個字節,內存地址由addr給出。

PTRACE_PEEKUSR

從USER區域中讀取一個字節,偏移量為addr。

PTRACE_POKETEXT, PTRACE_POKEDATA

往內存地址中寫入一個字節。內存地址由addr給出。

PTRACE_POKEUSR

往USER區域中寫入一個字節。偏移量為addr。

PTRACE_SYSCALL, PTRACE_CONT

重新運行。

PTRACE_KILL

殺掉子進程,使它退出。

PTRACE_SINGLESTEP

設置單步執行標志

PTRACE_ATTACH

跟蹤指定pid 進程。

PTRACE_DETACH

結束跟蹤

Intel386特有:

PTRACE_GETREGS

讀取寄存器

PTRACE_SETREGS

設置寄存器

PTRACE_GETFPREGS

讀取浮點寄存器

PTRACE_SETFPREGS

設置浮點寄存器

init進程不可以使用此函數

?

返回值

成功返回0。錯誤返回-1。errno被設置。

?

錯誤

EPERM

特殊進程不可以被跟蹤或進程已經被跟蹤。

ESRCH

指定的進程不存在

EIO

請求非法

ptrace系統函數。 ptrace提供了一種使父進程得以監視和控制其它進程的方式,它還能夠改變子進程中的寄存器和內核映像,因而可以實現斷點調試和系統調用的跟蹤。使用ptrace,你可以在用戶層攔截和修改系統調用(sys call).

功能詳細描述

1)???PTRACE_TRACEME

形式:ptrace(PTRACE_TRACEME,0 ,0 ,0)

描述:本進程被其父進程所跟蹤。其父進程應該希望跟蹤子進程。

?

2)??PTRACE_PEEKTEXT, PTRACE_PEEKDATA

形式:ptrace(PTRACE_PEEKTEXT, pid, addr, data)

?????? ? ptrace(PTRACE_PEEKDATA, pid, addr, data)

描述:從內存地址中讀取一個字節,pid表示被跟蹤的子進程,內存地址由addr給出,data為用戶變量地址用于返回讀到的數據。在Linux(i386)中用戶代碼段與用戶數據段重合所以讀取代碼段和數據段數據處理是一樣的。

?

3)??PTRACE_POKETEXT, PTRACE_POKEDATA

形式:ptrace(PTRACE_POKETEXT, pid, addr, data)

?????? ? ptrace(PTRACE_POKEDATA, pid, addr, data)

描述:往內存地址中寫入一個字節。pid表示被跟蹤的子進程,內存地址由addr給出,data為所要寫入的數據。

?

4)??TRACE_PEEKUSR

形式:ptrace(PTRACE_PEEKUSR, pid, addr, data)

描述:從USER區域中讀取一個字節,pid表示被跟蹤的子進程,USER區域地址由addr給出,data為用戶變量地址用于返回讀到的數據。USER結構為core文件的前面一部分,它描述了進程中止時的一些狀態,如:寄存器值,代碼、數據段大小,代碼、數據段開始地址等。在Linux(i386)中通過PTRACE_PEEKUSER和PTRACE_POKEUSR可以訪問USER結構的數據有寄存器和調試寄存器。

?

5)??PTRACE_POKEUSR

形式:ptrace(PTRACE_POKEUSR, pid, addr, data)

描述:往USER區域中寫入一個字節,pid表示被跟蹤的子進程,USER區域地址由addr給出,data為需寫入的數據。

?

6)???PTRACE_CONT

形式:ptrace(PTRACE_CONT, pid, 0, signal)

描述:繼續執行。pid表示被跟蹤的子進程,signal為0則忽略引起調試進程中止的信號,若不為0則繼續處理信號signal。

?

7)??PTRACE_SYSCALL

形式:ptrace(PTRACE_SYS, pid, 0, signal)

描述:繼續執行。pid表示被跟蹤的子進程,signal為0則忽略引起調試進程中止的信號,若不為0則繼續處理信號signal。與PTRACE_CONT不同的是進行系統調用跟蹤。在被跟蹤進程繼續運行直到調用系統調用開始或結束時,被跟蹤進程被中止,并通知父進程。

?

8)???PTRACE_KILL

形式:ptrace(PTRACE_KILL,pid)

描述:殺掉子進程,使它退出。pid表示被跟蹤的子進程。

?

9)???PTRACE_SINGLESTEP

形式:ptrace(PTRACE_KILL, pid, 0, signle)

描述:設置單步執行標志,單步執行一條指令。pid表示被跟蹤的子進程。signal為0則忽略引起調試進程中止的信號,若不為0則繼續處理信號signal。當被跟蹤進程單步執行完一個指令后,被跟蹤進程被中止,并通知父進程。

?

10)??PTRACE_ATTACH

形式:ptrace(PTRACE_ATTACH,pid)

描述:跟蹤指定pid 進程。pid表示被跟蹤進程。被跟蹤進程將成為當前進程的子進程,并進入中止狀態。

?

11)??PTRACE_DETACH

形式:ptrace(PTRACE_DETACH,pid)

描述:結束跟蹤。 pid表示被跟蹤的子進程。結束跟蹤后被跟蹤進程將繼續執行。

?

12)??PTRACE_GETREGS

形式:ptrace(PTRACE_GETREGS, pid, 0, data)

描述:讀取寄存器值,pid表示被跟蹤的子進程,data為用戶變量地址用于返回讀到的數據。此功能將讀取所有17個基本寄存器的值。

?

13)??PTRACE_SETREGS

形式:ptrace(PTRACE_SETREGS, pid, 0, data)

描述:設置寄存器值,pid表示被跟蹤的子進程,data為用戶數據地址。此功能將設置所有17個基本寄存器的值。

?

14)??PTRACE_GETFPREGS

形式:ptrace(PTRACE_GETFPREGS, pid, 0, data)

描述:讀取浮點寄存器值,pid表示被跟蹤的子進程,data為用戶變量地址用于返回讀到的數據。此功能將讀取所有浮點協處理器387的所有寄存器的值。

?

15)??PTRACE_SETFPREGS

形式:ptrace(PTRACE_SETREGS, pid, 0, data)

描述:設置浮點寄存器值,pid表示被跟蹤的子進程,data為用戶數據地址。此功能將設置所有浮點協處理器387的所有寄存器的值。

?

?
?

轉載于:https://blog.51cto.com/laokaddk/486223

總結

以上是生活随笔為你收集整理的linux 分析 ptrace的全部內容,希望文章能夠幫你解決所遇到的問題。

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