<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux內(nèi)核調(diào)試器內(nèi)幕(2)

          Linux內(nèi)核調(diào)試器內(nèi)幕(2)

          作者: 時(shí)間:2007-05-08 來(lái)源:網(wǎng)絡(luò) 收藏
          我們可以看到 rmqueue() 被 __alloc_pages 調(diào)用,后者接下來(lái)又被 _alloc_pages 調(diào)用,以此類推。
          每一幀的第一個(gè)雙字(double word)指向下一幀,這后面緊跟著調(diào)用函數(shù)的地址。因此,跟蹤堆棧就變成一件輕松的工作了。

          go 命令可以有選擇地以一個(gè)地址作為參數(shù)。如果您想在某個(gè)特定地址處繼續(xù)執(zhí)行,則可以提供該地址作為參數(shù)。另一個(gè)辦法是使用 rm 命令修改指令指針寄存器,然后只要輸入 go。如果您想跳過(guò)似乎會(huì)引起問(wèn)題的某個(gè)特定指令或一組指令,這就會(huì)很有用。但是,請(qǐng)注意,該指令使用不慎會(huì)造成嚴(yán)重的問(wèn)題,系統(tǒng)可能會(huì)嚴(yán)重崩潰。

          您可以利用一個(gè)名為 defcmd 的有用命令來(lái)定義自己的命令集。例如,每當(dāng)遇到斷點(diǎn)時(shí),您可能希望能同時(shí)檢查某個(gè)特殊變量、檢查某些寄存器的內(nèi)容并轉(zhuǎn)儲(chǔ)堆棧。通常,您必須要輸入一系列命令,以便能同時(shí)執(zhí)行所有這些工作。defcmd 允許您定義自己的命令,該命令可以包含一個(gè)或多個(gè)預(yù)定義的 KDB 命令。然后只需要用一個(gè)命令就可以完成所有這三項(xiàng)工作。其語(yǔ)法如下:
          [code:1:6ddc15f4ad][0]kdb> defcmd name usage help

          [0]kdb> [defcmd] type the commands here

          [0]kdb> [defcmd] endefcmd [/code:1:6ddc15f4ad]
          例如,可以定義一個(gè)(簡(jiǎn)單的)新命令 hari,它顯示從地址 0xc000000 開始的一行內(nèi)存、顯示寄存器的內(nèi)容并轉(zhuǎn)儲(chǔ)堆棧:
          [code:1:6ddc15f4ad][0]kdb> defcmd hari no arguments needed

          [0]kdb> [defcmd] md 0xc000000 1

          [0]kdb> [defcmd] rd

          [0]kdb> [defcmd] md %ebp 1

          [0]kdb> [defcmd] endefcmd [/code:1:6ddc15f4ad]
          該命令的輸出會(huì)是:
          [code:1:6ddc15f4ad][0]kdb> hari

          [hari]kdb> md 0xc000000 1

          0xc000000 00000001 f000e816 f000e2c3 f000e816

          [hari]kdb> rd

          eax = 0x00000000 ebx = 0xc0105330 ecx = 0xc0466000 edx = 0xc0466000
          ....
          ...

          [hari]kdb> md %ebp 1

          0xc0467fbc c0467fd0 c01053d2 00000002 000a0200

          [0]kdb> [/code:1:6ddc15f4ad]

          可以使用 bph 和 bpha 命令(假如體系結(jié)構(gòu)支持使用硬件寄存器)來(lái)應(yīng)用讀寫斷點(diǎn)。這意味著每當(dāng)從某個(gè)特定地址讀取數(shù)據(jù)或?qū)?shù)據(jù)寫入該地址時(shí),我們都可以對(duì)此進(jìn)行控制。當(dāng)調(diào)試數(shù)據(jù)/內(nèi)存毀壞問(wèn)題時(shí)這可能會(huì)極其方便,在這種情況中您可以用它來(lái)識(shí)別毀壞的代碼/進(jìn)程。
          示例
          [code:1:6ddc15f4ad]每當(dāng)將四個(gè)字節(jié)寫入地址 0xc0204060 時(shí)就進(jìn)入內(nèi)核調(diào)試器:
          [0]kdb> bph 0xc0204060 dataw 4
          在讀取從 0xc000000 開始的至少兩個(gè)字節(jié)的數(shù)據(jù)時(shí)進(jìn)入內(nèi)核調(diào)試器:
          [0]kdb> bph 0xc000000 datar 2[/code:1:6ddc15f4ad]
          [size=18:6ddc15f4ad]結(jié)束語(yǔ)[/size:6ddc15f4ad]
          對(duì)于執(zhí)行內(nèi)核調(diào)試,KDB 是一個(gè)方便的且功能強(qiáng)大的工具。它提供了各種選項(xiàng),并且使我們能夠分析內(nèi)存內(nèi)容和數(shù)據(jù)結(jié)構(gòu)。最妙的是,它不需要用另一臺(tái)機(jī)器來(lái)執(zhí)行調(diào)試。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();