朋友們,我正在開發一個內部架構模擬器,用於模擬運行在不同架構參數(如核心,內存層次結構和互連)上的代碼的計時效果。使用qemu for i386 linux內核的地址空間標識符
我在一個模塊上工作,從仿真器(如「PinTool」和「qemu-linux-user」)獲取正在運行的程序的實際跟蹤信息,並將此跟蹤信息提供給模擬器。
直到現在我的方法是這樣的: 1)獲取二進制可執行文件的objdump並解析此信息。 2)現在模擬器只需要給我一個指令指針和其他信息,比如load-address/store-address。
這樣的方法只有在程序內容已知的情況下才有效。
但是現在我一直在試圖在標準的linux內核之上運行一個可執行文件的痕跡。現在的問題是基本內核映像不包含LKM(可加載內核模塊)的代碼。另外守護進程在啓動內核時不知道。因此,我的解決方案是: 1)使用qemu模擬一臺機器。 2)當第一次遇到指令時,我會解析它並保存這些信息。爲以後。 3)創建一個輔助函數,在執行指令時發送ip,加載/存儲地址。
我卡在step2中。我如何區分qemu的不同流程,它只是一個模擬器,並且不知道客戶操作系統的任何內容?
我可以修改客戶操作系統的調度程序,但我真的無法弄清楚前進的方向。
對不起,如果問題很長。我知道我可以抽象出一些部分,但是覺得它的某些部分給出了問題背景的解釋。
雅,我使用qemu-linux-user進行用戶模式仿真,使用qemu-system-i386進行完整的系統仿真。對於完整的系統仿真,問題正是你指出的。知道由qemu解析指令的進程的pid。我在qemu的反彙編指令階段獲得虛擬地址。 –
有人可以指出在Linux調度程序的地方,我可以輸出當前進程的PID在一些輸出端口。 –