1
A
回答
5
沒有足夠的空間來編寫寫入零地址的指令序列。
僅編碼爲立即數的地址將佔用四個字節。僅剩下兩個字節用於:a)保存寄存器b)將其置零c)執行存儲d)恢復寄存器。
如果碰巧你在其他一些零註冊,您可以更改指令到
mov DWORD [1006530ch], <reg>
您可以使用NASM快速找出這類代碼的機器代碼:只寫在代碼文件,在開頭添加BITS 32
。
組裝它並使用十六進制編輯器檢查輸出文件。
例如mov DWORD [1006530ch], edi
是89 3D 0C 53 06 10
。
如果您沒有準備好零,唯一的解決辦法是用文本部分中的自由點替換指令(jmp
)(總是有一個空白點),您可以在其中粘貼機器代碼並在結束跳回原來的程序流程。
+0
使用'mov r/m32,imm32'來代替保存/恢復寄存器並將其調零可能會更短(但仍不夠短)。但是,是的,這個結論是正確的:如果你在一個區域沒有零點,你就不能在原地進行。 –
相關問題
- 1. SQL - 更改NULL值設置爲0
- 2. 手動更改設置後,Widget更改設置不會更新
- 3. mov eax,0和mov ax之間的機器碼差異,0
- 4. PHP變量不會設置爲0
- 5. 用戶設置不更改
- 6. 改變設置
- 7. Python Kivy:更改defaulttheme-0.png不會改變最終的.apk設計
- 8. 設置可變值更改的斷點
- 9. 更改設置後的變量值
- 10. Ansible在設置時更改變量值
- 11. 更改已設置的變量的值
- 12. contentOffset不會改變從0
- 13. AssemblyTitle從不更改設置,我希望根據配置更改
- 14. 將.mov擴展名更改爲.mp4
- 15. 改變首選項(設置),文本顯示設置不更新後
- 16. APN設置更改
- 17. 更改位置設置
- 18. 檢查位被設置爲1,更改爲0
- 19. 符號零:更改-0 0
- 20. 設置Borders.ColorIndex不會改變顏色
- 21. Eclipse:Pydev不斷改變我的設置
- 22. 設置$(「#x」)。innerHTML不會改變元素
- 23. scanf將變量設置爲0 NASM
- 24. 如何將變量設置回0?
- 25. 將y = 0設置爲變量python
- 26. 更改應用程序中設置更改的系統設置
- 27. jQuery:數字不更新,更改爲0
- 28. 設置_HAS_ITERATOR_DEBUGGING 0
- 29. 更改CSS設置更改爲
- 30. IDLE設置更改,註釋鍵更改
你能澄清一點嗎?你到底想做什麼? – Wold
您的意思是將零值作爲32位位元戳寫入絕對地址0x1006530C?如果是這樣,那麼您將需要一些關於周圍代碼的額外上下文,因爲沒有足夠的代碼空間來就地修補當前指令。順便提一句,是地址常量還是需要在磁盤可執行文件中保留重定位記錄才能打補丁? – doynax
最終目標是修補可執行文件。我在這個領域是新的,但我的猜測是我可以改變屬於這個指令的字節。也許我可以檢查寄存器,看看在那個執行點上是否有0值,並將esi更改爲那個?這會有點危險,但如果沒有簡單的解決方案可以工作? – Jonas