• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            elva

            Ptrace及其命令

            在用戶模式中,雖然只有一個(gè)函數(shù)可用,即ptrace(int _request, pid_t _pid, caddr_t _addr, int _data),但是這個(gè)函數(shù)能做所有的事情!如果你愿意,也可以花費(fèi)幾個(gè)小時(shí)來編寫自己的小調(diào)試器,以解決特定的問題。

            ptrace函數(shù)的_request參數(shù)是最重要的一個(gè)參數(shù),因?yàn)樗_定你將做什么。BSDLinux的頭文件使用不同的定義,這使得將ptrace應(yīng)用從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái)變得很復(fù)雜。默認(rèn)地,我們使用BSD頭文件中的定義。

            r  PT_TRACE_MEPTRACE_TRACEME)將當(dāng)前進(jìn)程切換到停止?fàn)顟B(tài)。它通??偸桥cfork/exec一起使用,雖然也能遇到自我追蹤的應(yīng)用程序。對(duì)于每一個(gè)進(jìn)程,PT_TRACE_ME只能被調(diào)用一次。追蹤一個(gè)正被追蹤的進(jìn)程是會(huì)失敗的(另一個(gè)較不重要的結(jié)果是進(jìn)程不能追蹤它自己。如果要這樣做,應(yīng)該首先從自身派生一個(gè)進(jìn)程)。大量的反調(diào)試技術(shù)都是以這一事實(shí)為基礎(chǔ)的。為了克服這類技術(shù),必須使用繞過ptrace的調(diào)試器。一個(gè)信號(hào)被發(fā)送到正被調(diào)試的進(jìn)程,并將該進(jìn)程切換到停止?fàn)顟B(tài),該進(jìn)程可以使用從父進(jìn)程上下文中調(diào)用的PT_CONTINUEPT_STEP命令從停止?fàn)顟B(tài)退出。wait函數(shù)會(huì)延遲父進(jìn)程的執(zhí)行,直到被調(diào)試的進(jìn)程切換為停止?fàn)顟B(tài)或者終止為止(終止時(shí),返回值為1407)。其他的所有參數(shù)都被忽略。

            r  PT_ATTACHPTRACE_ATTACH將進(jìn)程標(biāo)志為pid的運(yùn)行進(jìn)程切換為停止?fàn)顟B(tài),在這種情形下,調(diào)試器進(jìn)程成為“父進(jìn)程”。其他的所有參數(shù)都被忽略。進(jìn)程必須具有與調(diào)試進(jìn)程相同的用戶標(biāo)志(UID),并且不能是setuid/setduid進(jìn)程(否則就要用root來調(diào)試)。

            r  PT_DETACHPTRACE_DETACH停止進(jìn)程標(biāo)志為pid進(jìn)程(由PT_ATTACHPT_TRACE_ME指定)的調(diào)試,并繼續(xù)其常態(tài)運(yùn)行。其他的所有參數(shù)都被忽略。

            r  PT_CONTINUEPTRACE_CONT繼續(xù)進(jìn)程標(biāo)志為pid的被調(diào)試進(jìn)程的執(zhí)行,而不中斷與調(diào)試器進(jìn)程的通信。如果addr == 1(在Linux中為0),從上次停止的地址繼續(xù)執(zhí)行;否則,從指定的地址繼續(xù)執(zhí)行。參數(shù)_data指定發(fā)送到被調(diào)試進(jìn)程的信號(hào)數(shù)量(零說明沒有信號(hào))。

            r  PT_STEPPTRACE_SINGLESTEP進(jìn)行進(jìn)程標(biāo)志為pid的進(jìn)程的單步執(zhí)行,即執(zhí)行下一條機(jī)器指令并切換為停止?fàn)顟B(tài)(在i386中,這是根據(jù)設(shè)置追蹤標(biāo)志來實(shí)現(xiàn)的,雖然有些“黑客”函數(shù)庫使用硬件斷點(diǎn))。BSD要求將參數(shù)addr置為1,而Linux要求將該參數(shù)置為0。其他的所有參數(shù)都被忽略。

            r  PT_READ_IPT_READ_DPTRACE_PEEKTEXTPTRACE_PEEKDATA)分別從代碼區(qū)和正調(diào)試進(jìn)程的地址空間區(qū)讀取機(jī)器字。在許多當(dāng)代的平臺(tái)中,這兩個(gè)指令是等價(jià)的。ptrace函數(shù)接收目標(biāo)地址addr,并返回讀到的結(jié)果。

            r  PT_WRITE_IPR_READ_DPTRACE_POKETEXTPTRACE_POKEDATA將由_data傳入的機(jī)器字寫入addr所指定的地址。

            r  PT_GETREGS,PT_GETFPREGSPT_GETDBREGSPTRACE_GETREGSPTRACE_ FPREGSPT_GETFPXREGS將一般用途寄存器、段寄存器和調(diào)試寄存器的值讀入到地址由_addr指針?biāo)付ǖ恼{(diào)試器進(jìn)程的內(nèi)存區(qū)中。只有i386平臺(tái)接收這些與系統(tǒng)相關(guān)的命令。寄存器結(jié)構(gòu)的描述放在頭文件machine/reg.h文件中。

            r  PT_SETREGS,PT_SETFPREGSPT_SETDBREGSPTRACE_SETREGS,PTRACE_ SETFPREGSPT_SETFPXREGS通過拷貝由_addr指針?biāo)付ǖ膬?nèi)存區(qū)域的內(nèi)容來設(shè)置被調(diào)試進(jìn)程的寄存器的值。

            r  PT_KILLPTRACE_KILLsigkill發(fā)送到被調(diào)試進(jìn)程,以終止其執(zhí)行。

            posted on 2009-07-25 17:52 葉子 閱讀(2183) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Unix

            99久久亚洲综合精品网站| 久久91精品综合国产首页| 狠狠色婷婷久久一区二区| 亚洲AV日韩AV天堂久久| 国产V综合V亚洲欧美久久| 色综合久久中文色婷婷| 久久无码精品一区二区三区| 久久久噜噜噜久久中文字幕色伊伊 | 久久精品国产亚洲AV无码娇色 | yellow中文字幕久久网| 亚洲国产精品无码久久九九| 亚洲精品国精品久久99热一| 国产精品免费久久| 亚洲中文字幕无码久久2020| 久久艹国产| 欧美精品一区二区精品久久| 久久久久久久97| 久久久精品视频免费观看| 精品熟女少妇a∨免费久久| 欧美激情精品久久久久久久九九九| 久久成人国产精品二三区| 久久婷婷色综合一区二区| 久久成人18免费网站| 久久91精品国产91久久小草| 久久久久高潮综合影院| 午夜福利91久久福利| 国产精品成人99久久久久 | 久久性生大片免费观看性| 久久亚洲国产精品一区二区| 国产A级毛片久久久精品毛片| 日韩va亚洲va欧美va久久| 国产真实乱对白精彩久久| 嫩草影院久久99| 99久久99久久精品国产片| 久久久久久久综合日本亚洲| 久久99久久99精品免视看动漫| 伊人久久大香线蕉综合Av | 久久久久久国产a免费观看不卡| 亚洲精品高清国产一久久| 香港aa三级久久三级| 精品国产婷婷久久久|