我正在使用QEMU仿真程序來跟蹤用戶程序的執行。我們添加了一個幫助功能,可以打印所有執行指令的IP。我們已經測試了這個工具的兩種變體的素數編程 - 一種用C語言編寫,另一種用Java編寫。我們爲每個程序嘗試了4個不同的輸入參數,期望在每種情況下執行不同數量的指令。素數編程的C版本遵循預期的線性趨勢,即線數隨着更大的輸入而增加。但是,Java程序每次都會提供完全相同數量的指令。與Java的Qemu用戶仿真
我覺得Java執行跟蹤只捕獲JVM代碼,而不是正在運行的實際代碼。
JVM修改的代碼在QEMU上運行的位置? QEMU是否有特殊的方法來捕獲自修改代碼的執行?
你能說出你如何裝備QEMU嗎? (在過去,我嘗試了類似的東西,但是在我第一次嘗試只收集QEMU的每個翻譯塊的第一個IP時,並不是每個IP)。另外,如果您在本地硬件上定時執行程序,Java程序顯示預期的線性放緩? – davidg
Qemu使用動態翻譯機制。它將guest塊轉換爲本地塊並將其保留在代碼緩存中。您不應該在翻譯部分添加追蹤機制。相反,生成每個指令都要調用的幫助函數。在執行每條指令期間調用一個輔助函數 –