我試圖學習x86程序集調試,並試圖調試我的簡單C程序。然而,我很困惑,有多大的值(如字符串)存儲在內存中。例如,假設我將字符串VEQ9SZ9T8I62ZCIWE6RKZDE6AZSI2存儲在寄存器EBX中的地址0012E965處,然後查看該地址處的十六進制轉儲,我如何知道它結束的位置?假設我沒有在該位置存儲好的ASCII字符串,我怎麼知道十六進制轉儲在哪個地址結束?正如你所看到的,我在組裝時是個初學者,所以我感謝大家的耐心和幫助。裝配十六進制轉儲
裝配十六進制轉儲
回答
這主要是一個解釋問題。字符串(或內存中的任何數據)是如何解釋的(不奇怪)是由解釋它的一些代碼定義的。從查看數據的十六進制轉儲,你不能說哪種方法被用來創建字符串,但有可能是,使用了一種常用的方法。零終止的字符串很容易被拖尾零識別,有些字符串可能以字節或字符長度爲前綴。尺寸也可能不在數據存儲器中編碼,而是作爲程序內部的立即值輸入。
因此,我無法確定某個值(例如字符串或數字)在十六進制轉儲中的結束位置? – 2012-03-05 19:20:28
正確的是,沒有_definite_方法,而不需要查看解釋它的代碼。在很多情況下,你可以做出相當不錯的猜測,字符串是最簡單的。 – 2012-03-05 19:31:37
啊謝謝你的幫助。 – 2012-03-05 19:34:59
取決於存儲或生成字符串的人。如果它是由彙編程序或C程序/庫生成的,則很可能是C字符串。
爲了存儲串有在一些可能性:
使用終止0字符,又名C字符串。要確定字符串的長度,您必須調用一個函數,如
strlen
。在這種情況下,字符串在第一個0字符處結束。在開始時將字符串的長度存儲在單獨的變量中。長度變量可以是字節,16位,32位或64位寬度。
存儲字符串的長度和指向全局內存池中地址的指針。
此外,還有變種用於存儲寬字符,UTF-8等,以及所有內容之間的混合。作爲彙編程序員,它取決於你在內部使用什麼。使用操作系統可以使用的格式(如文件名中的格式)或者您希望使用的程序或庫通用的格式是有意義的。所以C字符串在彙編程序中可能是最常見的。
因此,我可以通過在十六進制轉儲中查找00來查找任何存儲值的末尾(無論是字符串還是其他任何值)? – 2012-03-05 19:05:32
- 1. 將十進制轉換爲十六進制和十六進制
- 2. 裝配GAS轉換器十六進制的二進制
- 3. 十六進制和十進制轉換
- 4. 轉換十六進制到十進制
- 5. 在裝配中計數十六進制
- 6. 將gcc裝配到十六進制
- 7. 將十六進制轉換爲二進制到十六進制?
- 8. 轉儲十六進制漂浮在C++
- 9. 十六進制轉儲EXE文件
- 10. 存儲十六進制值
- 11. 十六進制串&十六進制
- 12. 轉換十六進制字符串十六進制值
- 13. 如何十六進制轉換爲十六進制
- 14. 將字符串轉換爲十六進制到十六進制
- 15. 十六進制()參數不能轉換爲十六進制
- 16. python字符串與十六進制轉義十六進制值
- 17. RGB十六進制轉換
- 18. 轉換爲十六進制?
- 19. 十六進制到二進制轉換
- 20. 十六進制轉換爲二進制
- 21. 轉換十六進制到二進制
- 22. 二進制到十六進制轉換
- 23. 十六進制轉換爲二進制
- 24. 十六進制轉儲到二進制 - XXD -r相當於
- 25. 將十進制轉換爲十六進制/二進制
- 26. 轉換十六進制,十進制,八進制和ASCII?
- 27. 十進制/十六進制/二進制轉換
- 28. C#System.OverflowException二進制到十進制和十六進制轉換
- 29. 將八進制數轉換爲十進制和十六進制
- 30. 十六進制
你是什麼意思的「結束」? – harold 2012-03-05 18:28:46
我的意思是一個值的開始從地址X開始,但是我知道它在十六進制轉儲中的結束位置嗎? – 2012-03-05 19:06:26