def utf16tostr(addr, size=-1):
"""Read UTF-16 string from memory and encode as python string."""
cb = size if size > 0 else 32
bstr = ctypes.string_at(addr, cb)
if size >= 0:
return bstr.decode('utf-16le')
# lookup zero char
chunks = []
while True:
found = cb
for i in range(0, cb, 2):
c = bstr[i]
if c == 0x00:
found = i
break
pass
assert found % 2 == 0, "truncated string with len " + str(found)
chunks.append(bstr[0:found].decode('utf-16le'))
if found != cb:
break
addr = addr + cb
bstr = ctypes.string_at(addr, cb)
continue
return "".join(chunks)
评论列表
文章目录