回答
你必須明白,如果你修改PC,下一條執行的指令將是新的PC地址。這只是無條件的跳轉,所有處理器都有這樣的指令。
通常沒有LD PC,addr
指令,但這正是JMP addr
所做的,所以不能直接修改其值。但是,您不能修改其值而不修改代碼的執行路徑 - 從指定的地址繼續執行。
在大多數情況下,也可以通過將堆棧指針設置爲包含新地址的位置並調用RET返回指令來間接完成此操作。
不同的處理器和體系結構在許多方面可能會有不同的表現,而我上面提到的指令助記符是「通用的」,並不是指任何特定的指令集。
+1。您可能會補充說,'call'指令修改它,就像條件跳轉一樣。你可以做'jmp eax'(跳轉到EAX指向的地址)和'jmp [eax]'來跳轉到存儲在EAX指向的內存中的地址。而x86上的int指令就像是一個'call'。很多方法來修改程序計數器。 – 2011-12-26 17:07:23
@Jim:這是真的,但無條件跳轉修改了PC並且不做任何其他*。最終每條指令都可以修改PC,即使它只是增加它。我試圖成爲非架構/指令集特定的,而不是詳細討論尋址模式;我的* addr *參數旨在表示任何有效的地址表示或尋址模式,包括寄存器間接尋址。阿米特必須指定他想要更具體的答案的架構。 – Clifford 2011-12-26 22:37:54
無條件跳轉指令直接修改PC的值。
- 1. 訪問者是否可以修改它所訪問的對象
- 2. 是否可以修改儀表板設計器部署過程?
- 3. Mozilla應用程序是否可以訪問進程管理器?
- 4. 是否可以修改子進程?
- 5. 是否可以修改PrintDialog?
- 6. 是否可以創建或訪問
- 7. 修改誰可以訪問OTA應用程序
- 8. 是否可以編輯或修改內置的MySQL函數?
- 9. Android應用程序是否可以隨時修改屏幕?
- 10. 是否可以修改主應用程序的iOS版本?
- 11. 是否可以發出鬧鐘或倒數計時器應用程序?
- 12. 是否可以訪問spark.ml管道中的估計器屬性?
- 13. 是否可以從JavaScript訪問SMIL計時器?
- 14. .load()函數是否可以訪問移動應用程序中的服務器?
- 15. 是否有可能修改Tomcat Web應用程序管理器的主題或修改其標題?
- 16. 是否可以修改uitabbarcontroller高度?
- 17. 是否可以直接修改HTML流?
- 18. 是否可以修改$ _SESSION變量?
- 19. 是否可以修改let綁定?
- 20. 是否可以修改列表元素?
- 21. 是否可以防止DLL被修改?
- 22. 是否可以修改遷移
- 23. 是否可以修改len()的行爲?
- 24. 是否可以在render()中修改this.state?
- 25. 是否可以修改HTML圖表?
- 26. 是否可以使用.autocomplete()的修改?
- 27. 是否可以使用CORS或JSONP來訪問OpenID提供程序配置?
- 28. 是否可以修改SSMS中的「更改過程」模板?
- 29. 是否有可能通過js訪問和修改Flash內容
- 30. 是否可以從32位應用程序訪問64位dll?
嗯,跳躍怎麼樣? – 2011-12-26 11:17:51
SO會跳轉,你可以訪問PC嗎? – 2011-12-26 11:22:16
你在說什麼處理器? 86? MIPS?臂? ... – 2011-12-26 12:29:26