簡體   English   中英

你如何攔截正在寫入一段內存的指令的地址?

[英]how do you intercept the address of an instruction that is writing to a segment of memory?

想象一下,我們有一個像這樣的常用指令

mov [eax], ebx

eax 包含一些我們想要寫入的地址。

我們的想法是編寫 ac 程序,告訴您哪個地址包含指令,如果我們已經知道它將要寫入的地址。

真正的問題:使用免費的 sony pspsdk 編寫 ac 程序來完成同樣的事情。

psp 使用 MIPS III / IV 並且指令看起來像

sw a0 $00(t0)
##which literally spells out store register a0 at offset t0 + 0 bytes. where t0 would
## contain something like 0x08800000

免責聲明:知道如何在 Windows 上執行此操作仍然很有用,因此,如果有人只知道如何在 Windows 甚至 osx 上執行此操作,仍將不勝感激,因為它可以提供有關類似編程實踐的相關信息來完成此特定任務.

攔截寫入特定地址的指令不是程序中的正常活動。

這是一些調試器提供的功能。 調試器至少可以通過三種方式做到這一點:

  • 調試器可以檢查程序代碼並找到特定指令寫入特定地址的位置。 這實際上是一項非常復雜的活動,需要解釋說明。 通常,調試器不能完全做到。 因為這樣做通常等同於以計算機處理器相同的方式完全解釋和執行程序,而在軟件中執行速度非常慢。 相反,調試器可能會計划部分程序執行並在它無法輕松繼續的位置放置斷點,例如在依賴於調試器不准備計算的值的分支指令處。 斷點是中斷程序執行的特殊指令,在這種情況下,會導致操作系統將控制權轉移給調試器。 此時,調試器移除斷點,請求指令單步執行(處理器執行單條指令,然后立即中斷程序執行),檢查結果,然后繼續。
  • 調試器可以將包含所需地址的內存頁面標記為不可訪問。 然后,每當程序訪問該內存時,硬件都會中斷程序執行,操作系統會將控制權轉移給調試器。 調試器檢查導致中斷的指令。 如果指令正在訪問目標地址,則調試器會對此進行操作。 如果不是,則調試器將內存保護更改為允許訪問,請求單步執行指令,將內存保護更改為不允許訪問,並恢復程序以等待下一次中斷。 (而不是單步執行指令,調試器可能只是模擬它,因為這可能會避免兩次更改內存保護,這可能會很昂貴。)
  • 某些計算機處理器型號具有支持此類調試功能的功能。 調試器可以請求監視一部分內存,以便硬件在訪問特定地址時中斷程序執行,而不是在訪問整個內存頁面的任何部分時。

我無法與您使用的 Sony 平台通話。 您必須檢查其文檔或詢問其他人有關此類功能的可用性。 由於這是調試器最常使用的功能,因此調查有關調試的文檔可能是確定系統是否支持此類功能的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM