【发布时间】:2018-10-16 07:18:15
【问题描述】:
我有一个 ArrayBuffer,它是通过使用 Frida 读取内存返回的。我将 ArrayBuffer 转换为字符串,然后使用 TextDecoder 和 TextEncoder 转换回 ArrayBuffer,但是结果在此过程中被更改。解码和重新编码后的 ArrayBuffer 长度总是变大。有没有大范围的字符解码?
如何在不丢失完整性的情况下将 ArrayBuffer 解码为 String,然后返回 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
【问题讨论】:
-
您是否尝试将任意字节数组编码为文本,然后将其转换回相同的字节序列...或者字节数组是否包含合法的 utf8 编码文本?如果是前者,你根本就做不到。
-
我希望它是相同的字节序列。我的最终目标是替换 ArrayBuffer 中的值。因此,如果它包含字符串“1234”,我想将其设为“1111”并创建一个新的 ArrayBuffer,以便可以在内存中替换它。我这样做是为了进行粗略的测试,并注意到由于尺寸不匹配,它永远不会起作用。