1
我正在編寫一個內核模塊,它將接受用戶進程ID(PID
)作爲輸入並轉儲該用戶進程的所有地址空間,如堆棧,堆段。使用來自內核模塊的用戶進程的堆大小
我把mm->start_brk
作爲堆的開始,mm->brk
作爲堆的結束,然後我看到,即使用戶進程並沒有使用33頁,堆的大小顯示爲33頁 (mm->brk
- mm->start_brk
)。 (這我使用/proc/pid/maps
驗證)。堆棧的行爲也類似。
所以有什麼辦法可以找到真正使用堆從mm->start_brk
盯着,這樣我就只能轉儲使用堆。
謝謝ugoren,但問題是,我傾倒使用我的內核模塊的用戶進程的堆內存。我用於測試的用戶進程只做了幾個字節的malloc。但從內核模塊我可以看到內核在第一次給大約32頁(33 * 4K)的堆內存(cat/proc/pid/maps alsow會解釋這一點)。因爲我的測試用戶進程只使用了幾個字節,其他都是零。所以我只是想找到正確使用的堆區域。不是mm-> brk - mm-> start_brk – Dhyan
內核不知道進程管理堆的方式。如果它向內核請求32頁,那麼就內核而言,它有32頁。您可能會檢查哪些映射到物理內存 - 從未觸摸過的頁面將不會被映射。 – ugoren
我的測試progarm就像下面做10字節的malloc一樣,當我做這個程序的cat/proc//maps時,我看到它的堆大小爲33頁。那麼這意味着當exec brk將使用默認的33頁調用? -------------------------------------------- include int main( ) { char * ptr; 而(1) { ptr = malloc(10); free(ptr); } } cat/proc/pid/maps 082f4000-08315000 rw-p 00000000 00:00 0 [堆] –
Dhyan