2016-02-19 37 views
-1

我需要讀取存儲在內存中的編碼字符串,該字符串存儲在LLDB的python腳本中。根據他們的文件,我可以使用ReadMemory(address, length, error),但我需要提前知道它的長度從python的內存中獲取一個UTF-16字符串長度

UnicodeEncodeError: 'ascii' codec can't encode character u'\u018e' in position 12: ordinal not in range(128) 

任何人都可以提出實現這一目標的一種方式: 如果不是當它絆倒在它不能解碼(即使使用了「忽略」選項)字符,且處理停止蟒的解碼功能不成? (使用「python」或「lldb python」實現)。我沒有原始字符串的長度。

謝謝。

+1

你能顯示你的代碼嗎?很好,你顯示錯誤,但請顯示完整的回溯和提高錯誤的示例代碼。 –

+0

有很多方法可以在內存中表示字符串。他們的文件是否告訴你他們是如何做到的? – tdelaney

+0

這裏是一個內存轉儲的例子或我需要解析的內容: '(lldb)memory read 0x10142c838 0x10142c838:61 00 62 00 63 00 64 00 65 00 00 00 00 00 00 00 abcde ...... 0x10142c848:00 00 00 00 00 00 00 00 8e 01 00 00 00 00 00 00 ................' 似乎是和UTF-16-le編碼的字符串。但我不確定它是否總是空終止。我希望這給了更多的見解。 – Anubis

回答

2

字符串是否以0結尾?如果是這樣,你可以一次讀取2個字節,直到遇到0x0000,然後你會知道你有一個完整的字符串。如果你這樣做,你會想給自己一個約束(例如,「如果你正在運行到損壞的內存中,我會在閱讀後放棄 - 說 - 1MB的數據)」。

+0

我也這麼認爲,但顯然沒有定義null [終止](http://stackoverflow.com/questions/5923948/utf-16-string-terminator)。有沒有評估這個功能的功能? – Anubis

+0

所以,如果我明白了,你的任務是讀一個字符串,其長度你不知道,沒有已知的終止?這是一個非常嚴重的問題。如果您的有效字符串後面跟着看起來像字符的垃圾,該怎麼辦?過度激進的印刷可以嗎?字符串中的所有字符是否可以打印? –

相關問題