2011-06-06 91 views
1

我在讀一些關於調試的舊文章,其中一篇提到了調試寄存器。閱讀更多關於這些寄存器和他們能做些什麼讓我非常渴望與他們一起玩。然而,當我試圖尋找更多關於如何實際使用它們的信息時,我發現它們只能從Windows中的環0訪問。調試寄存器替代?

我認爲那是結束,因爲我不打算編寫內核驅動程序只是爲了玩一些寄存器。但後來我想到了我曾經玩過的內存編輯工具。它被稱爲Cheat引擎,程序的各種選項之一是指定中斷正在執行/訪問/讀取的指令/數據。這與調試寄存器完全相同。所以我想知道:在Windows中是否有替代/替換調試寄存器?因爲我確信程序(作弊引擎)不使用內核驅動程序來設置這些值。

回答

2

這是不正確的,你可以從ring3間接設置硬件調試寄存器(ollydbg這樣做),爲此你需要在windows(example)下使用SetThreadContext

如果你仍然想要一個硬件寄存器的替代品,你可以使用INT3代碼斷點和單步陷阱來檢查varibale是否已經改變(非常低效)。

一個很好的參考,GDB及其來源:http://developer.apple.com/library/mac/#documentation/DeveloperTools/gdb/gdbint/gdbint_3.html

+0

我希望更多的本地解決方案,你也許知道,如果我可以使用類似的東西來GetThreadContext來在我自己的過程?編輯:沒關係,MSDN說我可以在我自己的過程中使用它。 – Unknown 2011-06-06 16:17:51

+0

你的回答是正確的,你可以使用'SetThreadContext',但工作不會發生在ring3中。該功能將歸結爲系統調用,該系統調用切換到ring0服務例程以完成實際工作。 – 2011-06-07 14:04:01

+0

@Evan:我知道這就是爲什麼我間接地說**。但它確實不需要服務例程,您只需要ring0特權指令權限,以便您可以執行'MOV DRx,R32' – Necrolis 2011-06-07 15:03:45