2012-01-19 67 views
1

朋友們,我正在開發一個內部架構模擬器,用於模擬運行在不同架構參數(如核心,內存層次結構和互連)上的代碼的計時效果。使用qemu for i386 linux內核的地址空間標識符

我在一個模塊上工作,從仿真器(如「PinTool」和「qemu-linux-user」)獲取正在運行的程序的實際跟蹤信息,並將此跟蹤信息提供給模擬器。

直到現在我的方法是這樣的: 1)獲取二進制可執行文件的objdump並解析此信息。 2)現在模擬器只需要給我一個指令指針和其他信息,比如load-address/store-address。

這樣的方法只有在程序內容已知的情況下才有效。

但是現在我一直在試圖在標準的linux內核之上運行一個可執行文件的痕跡。現在的問題是基本內核映像不包含LKM(可加載內核模塊)的代碼。另外守護進程在啓動內核時不知道。因此,我的解決方案是: 1)使用qemu模擬一臺機器。 2)當第一次遇到指令時,我會解析它並保存這些信息。爲以後。 3)創建一個輔助函數,在執行指令時發送ip,加載/存儲地址。

我卡在step2中。我如何區分qemu的不同流程,它只是一個模擬器,並且不知道客戶操作系統的任何內容?

我可以修改客戶操作系統的調度程序,但我真的無法弄清楚前進的方向。

對不起,如果問題很長。我知道我可以抽象出一些部分,但是覺得它的某些部分給出了問題背景的解釋。

回答

2

在第一種情況下,使用qemu-linux-user來執行單個程序的用戶模式仿真,該任務非常簡單,因爲內存是線性的,並且模擬器中沒有涉及虛擬內存。整個系統仿真的第二種情況要複雜得多,因爲你基本上必須將地址解析出內核結構。

如果您可以直接從QEmu獲得虛擬地址,您的工作會更容易;那麼您只需要識別流程和其他所有功能,就像在單進程情況下一樣。您可以通過僞造系統調用get_pid()來獲得PID。

否則,這一切似乎與從物理內存轉儲調試系統很相似。此任務有some tools。儘管它們可能太慢而不能運行每一條指令,但是你可以在那裏尋找提示。

+0

雅,我使用qemu-linux-user進行用戶模式仿真,使用qemu-system-i386進行完整的系統仿真。對於完整的系統仿真,問題正是你指出的。知道由qemu解析指令的進程的pid。我在qemu的反彙編指令階段獲得虛擬地址。 –

+0

有人可以指出在Linux調度程序的地方,我可以輸出當前進程的PID在一些輸出端口。 –

相關問題