Hem*_*Hem 6 javascript arraybuffer
我有一个 ArrayBuffer,它是通过使用 Frida 读取内存返回的。我正在将 ArrayBuffer 转换为字符串,然后使用 TextDecoder 和 TextEncoder 将其转换回 ArrayBuffer,但是在此过程中结果正在改变。解码和重新编码后的 ArrayBuffer 长度总是更大。是否有广泛的字符解码?
如何在不丢失完整性的情况下将 ArrayBuffer 解码为字符串,然后返回到 ArrayBuffer?
示例代码:
var arrayBuff = Memory.readByteArray(pointer,2000); //Get a 2,000 byte ArrayBuffer
console.log(arrayBuff.byteLength); //Always returns 2,000
var textDecoder = new TextDecoder("utf-8");
var textEncoder = new TextEncoder("utf-8");
//Decode and encode same data without making any changes
var decoded = textDecoder.decode(arrayBuff);
var encoded = textEncoder.encode(decoded);
console.log(encoded.byteLength); //Fluctuates between but always greater than 2,000
Run Code Online (Sandbox Code Playgroud)
TextDecoder并且TextEncoder旨在处理文本。要将任意字节序列转换为字符串并返回,最好将每个字节视为单个字符。
var arrayBuff = Memory.readByteArray(pointer,2000); //Get a 2,000 byte ArrayBuffer
console.log(arrayBuff.byteLength); //Always returns 2,000
//Decode and encode same data without making any changes
var decoded = String.fromCharCode(...new Uint8Array(arrayBuff));
var encoded = Uint8Array.from([...decoded].map(ch => ch.charCodeAt())).buffer;
console.log(encoded.byteLength);
Run Code Online (Sandbox Code Playgroud)
该decoded字符串的长度与输入缓冲区的长度完全相同,并且可以使用正则表达式、字符串方法等轻松操作。但请注意,在内存中占用两个或更多字节的 Unicode 字符(例如“?”)将无法识别不再,因为它们将导致与每个单独字节的代码对应的字符的串联。