intptrace(intrequest,intpid,intaddr,intdata);描述Ptrace提供了一種父進(jìn)程可以控制子進(jìn)程運(yùn)行">
linux源碼分析-ptrace

linux源碼分析-ptrace

ID:1121609

大?。?78.50 KB

頁(yè)數(shù):48頁(yè)

時(shí)間:2017-11-07

linux源碼分析-ptrace_第1頁(yè)
linux源碼分析-ptrace_第2頁(yè)
linux源碼分析-ptrace_第3頁(yè)
linux源碼分析-ptrace_第4頁(yè)
linux源碼分析-ptrace_第5頁(yè)
資源描述:

《linux源碼分析-ptrace》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、一函數(shù)說明1.函數(shù)使用說明名字ptrace–進(jìn)程跟蹤形式#includeintptrace(intrequest,intpid,intaddr,intdata);描述Ptrace提供了一種父進(jìn)程可以控制子進(jìn)程運(yùn)行,并可以檢查和改變它的核心image。它主要用于實(shí)現(xiàn)斷點(diǎn)調(diào)試。一個(gè)被跟蹤的進(jìn)程運(yùn)行中,直到發(fā)生一個(gè)信號(hào)。則進(jìn)程被中止,并且通知其父進(jìn)程。在進(jìn)程中止的狀態(tài)下,進(jìn)程的內(nèi)存空間可以被讀寫。父進(jìn)程還可以使子進(jìn)程繼續(xù)執(zhí)行,并選擇是否是否忽略引起中止的信號(hào)。Request參數(shù)決定了系統(tǒng)調(diào)用的功能:P

2、TRACE_TRACEME本進(jìn)程被其父進(jìn)程所跟蹤。其父進(jìn)程應(yīng)該希望跟蹤子進(jìn)程。PTRACE_PEEKTEXT,PTRACE_PEEKDATA從內(nèi)存地址中讀取一個(gè)字節(jié),內(nèi)存地址由addr給出。PTRACE_PEEKUSR從USER區(qū)域中讀取一個(gè)字節(jié),偏移量為addr。PTRACE_POKETEXT,PTRACE_POKEDATA往內(nèi)存地址中寫入一個(gè)字節(jié)。內(nèi)存地址由addr給出。PTRACE_POKEUSR往USER區(qū)域中寫入一個(gè)字節(jié)。偏移量為addr。PTRACE_SYSCALL,PTRACE_CONT重新運(yùn)行。PTRACE

3、_KILL殺掉子進(jìn)程,使它退出。PTRACE_SINGLESTEP設(shè)置單步執(zhí)行標(biāo)志PTRACE_ATTACH跟蹤指定pid進(jìn)程。PTRACE_DETACH結(jié)束跟蹤Intel386特有:PTRACE_GETREGS讀取寄存器PTRACE_SETREGS設(shè)置寄存器PTRACE_GETFPREGS讀取浮點(diǎn)寄存器PTRACE_SETFPREGS設(shè)置浮點(diǎn)寄存器init進(jìn)程不可以使用此函數(shù)返回值成功返回0。錯(cuò)誤返回-1。errno被設(shè)置。錯(cuò)誤EPERM特殊進(jìn)程不可以被跟蹤或進(jìn)程已經(jīng)被跟蹤。ESRCH指定的進(jìn)程不存在EIO請(qǐng)求非法1.功

4、能詳細(xì)描述1)PTRACE_TRACEME形式:ptrace(PTRACE_TRACEME,0,0,0)描述:本進(jìn)程被其父進(jìn)程所跟蹤。其父進(jìn)程應(yīng)該希望跟蹤子進(jìn)程。2)PTRACE_PEEKTEXT,PTRACE_PEEKDATA形式:ptrace(PTRACE_PEEKTEXT,pid,addr,data)ptrace(PTRACE_PEEKDATA,pid,addr,data)描述:從內(nèi)存地址中讀取一個(gè)字節(jié),pid表示被跟蹤的子進(jìn)程,內(nèi)存地址由addr給出,data為用戶變量地址用于返回讀到的數(shù)據(jù)。在Linux(i386

5、)中用戶代碼段與用戶數(shù)據(jù)段重合所以讀取代碼段和數(shù)據(jù)段數(shù)據(jù)處理是一樣的。3)PTRACE_POKETEXT,PTRACE_POKEDATA形式:ptrace(PTRACE_POKETEXT,pid,addr,data)ptrace(PTRACE_POKEDATA,pid,addr,data)描述:往內(nèi)存地址中寫入一個(gè)字節(jié)。pid表示被跟蹤的子進(jìn)程,內(nèi)存地址由addr給出,data為所要寫入的數(shù)據(jù)。1)PTRACE_PEEKUSR形式:ptrace(PTRACE_PEEKUSR,pid,addr,data)描述:從USER區(qū)域

6、中讀取一個(gè)字節(jié),pid表示被跟蹤的子進(jìn)程,USER區(qū)域地址由addr給出,data為用戶變量地址用于返回讀到的數(shù)據(jù)。USER結(jié)構(gòu)為core文件的前面一部分,它描述了進(jìn)程中止時(shí)的一些狀態(tài),如:寄存器值,代碼、數(shù)據(jù)段大小,代碼、數(shù)據(jù)段開始地址等。在Linux(i386)中通過PTRACE_PEEKUSER和PTRACE_POKEUSR可以訪問USER結(jié)構(gòu)的數(shù)據(jù)有寄存器和調(diào)試寄存器。2)PTRACE_POKEUSR形式:ptrace(PTRACE_POKEUSR,pid,addr,data)描述:往USER區(qū)域中寫入一個(gè)字節(jié),p

7、id表示被跟蹤的子進(jìn)程,USER區(qū)域地址由addr給出,data為需寫入的數(shù)據(jù)。3)PTRACE_CONT形式:ptrace(PTRACE_CONT,pid,0,signal)描述:繼續(xù)執(zhí)行。pid表示被跟蹤的子進(jìn)程,signal為0則忽略引起調(diào)試進(jìn)程中止的信號(hào),若不為0則繼續(xù)處理信號(hào)signal。4)PTRACE_SYSCALL形式:ptrace(PTRACE_SYS,pid,0,signal)描述:繼續(xù)執(zhí)行。pid表示被跟蹤的子進(jìn)程,signal為0則忽略引起調(diào)試進(jìn)程中止的信號(hào),若不為0則繼續(xù)處理信號(hào)signal。與P

8、TRACE_CONT不同的是進(jìn)行系統(tǒng)調(diào)用跟蹤。在被跟蹤進(jìn)程繼續(xù)運(yùn)行直到調(diào)用系統(tǒng)調(diào)用開始或結(jié)束時(shí),被跟蹤進(jìn)程被中止,并通知父進(jìn)程。5)PTRACE_KILL形式:ptrace(PTRACE_KILL,pid)描述:殺掉子進(jìn)程,使它退出。pid表示被跟蹤的子進(jìn)程。1)PTRACE_SINGLESTEP形式:

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。