- 論壇徽章:
- 0
|
我們知道,一個(gè)常用的內(nèi)核數(shù)據(jù)結(jié)構(gòu)叫做 current. 它指向當(dāng)前的進(jìn)程,包括很多有用的信息,比如PID, 進(jìn)程名等。如果是自己寫內(nèi)核代碼,那么可以直接引用current。 但是如果是調(diào)試的話,直接在GDB里p current是不行的。因?yàn)閏urrent是一個(gè)宏。
那么這時(shí)如何找出current呢?在Linux 2.6版本中,current是放在堆棧(STACK)的最低下。假如內(nèi)核棧是8K。起始地址為0XC100,2000. 那么current就在0XC100,0000 (堆棧是倒著長(zhǎng)的). 根據(jù)這個(gè)情況,可以用如下方法找出current。
1)找出ESP。p $esp. 假設(shè)輸出為0XC123,4566
2) 把esp與上0XFFFF,E000 (低13位置為0)。 得到0XC123,4000. 這個(gè)值就是CURRENT的值了?梢赞D(zhuǎn)換后進(jìn)行使用,比如
3) p ((* struct thread_info) 0xc1234000)->task->comm
以上方法在X86-32, ARM上都可以。 其他體系結(jié)構(gòu)不太清楚,似乎也可以;蛘吣俏恢赖目梢匝a(bǔ)充。
[ 本帖最后由 accessory 于 2009-12-10 12:01 編輯 ] |
評(píng)分
-
查看全部評(píng)分
|