我在調試內核內存損壞問題。從我所擁有的資源中,我可以找到地址(物理)03a08000(每次都會變化),虛擬c3a08000正在被覆蓋。已分配給定物理地址的進程信息?
現在我想知道,已經分配了該內存的進程。我怎樣才能做到這一點?
總之我的問題是,我如何找到已分配給定物理地址的進程的名稱(進程ID或任何信息)?
請讓我知道如果我不是清楚我的問題。
編輯:忘了提,我有完全內存轉儲(完成2 GB RAM)和我
我在調試內核內存損壞問題。從我所擁有的資源中,我可以找到地址(物理)03a08000(每次都會變化),虛擬c3a08000正在被覆蓋。已分配給定物理地址的進程信息?
現在我想知道,已經分配了該內存的進程。我怎樣才能做到這一點?
總之我的問題是,我如何找到已分配給定物理地址的進程的名稱(進程ID或任何信息)?
請讓我知道如果我不是清楚我的問題。
編輯:忘了提,我有完全內存轉儲(完成2 GB RAM)和我
碰撞工具裏面有一個叫做showmap
的命令。這將告訴確切的PID和該進程使用的所有內存。 這是我一直在尋找的確切信息。
Kmem
顯示關於相關過程的細節的更好的統計數據。
crash > kmem <address>
通過PageMap tools我們可以映射的內存。頁映射工具,所有的過程包括兩個獨立的命令在線實用程序:
page-collect.c - 收集內存「快照」;在目標平臺上運行。
page-analysis.cpp - 分析內存「快照」並生成報告;在任何平臺上運行。
EDIT ------
調試崩潰轉儲它可以與gdb和其他tools來完成。分析爲快速總覽崩潰dump和other。關於崩潰的完整教程dump.
RE-EDIT ................................... 我是不太清楚你的問題,但是當我們分析crash dump;它開始作爲
linux:/var/crash/20111222 # crash System.map-2.6.32.49-0.3-default \
vmlinux-2.6.32.49-0.3-default.gz vmcore
然後,我們可以列出所有ps
過程,也顯示了PID
& Physical Address
兩者。
這些信息非常有用。謝謝你。但是目前我已經有了一個ramdump。我的環境不是一個正在運行的系統。我有一個我想調查的崩潰轉儲。 Neverthless你提供的信息是非常有用的。我將進行這些更改並嘗試重現崩潰。如果你能建議某種方式調試崩潰轉儲而不是實時系統,我將不勝感激。 –
我編輯了一些關於崩潰轉儲的鏈接;希望他們可以幫助你。 – jhonnash
嗨@jhonnash我已經使用了相同的碰撞工具,它具有一些來自我的原始組件的附加功能。但我無法看到任何有用的命令,它告訴我一個物理地址的進程名稱。 –
這樣被「破壞」,「不斷變化的每次」,不過是虛擬地址相同的物理地址? – sawdust
@sawdust我相信操作提供了一個虛擬地址的例子,並不意味着它們總是獲得相同的virt - > phys映射。 「腐敗」是由一些未知的應用引起的。 –
@Manty以及你可能知道,你舉的虛擬地址似乎是一個內核地址,這意味着,無論是「腐敗」你的數據是在內核中。如果您可以精確定位訪問此內存的代碼或模塊,則可以使用少數策略性printk()語句確定導致這些更改的過程。 –