使用 NodeJS/memoryjs 将 TypeScript 解码缓冲区 JSON 对象

TypeScript Decode Buffer to JSON Object with NodeJS/memoryjs

我正在尝试使用 mermoryjs.readBuffer() 缓冲区 中获取一个 json 对象,并且我已经已经有一段时间了,现在我不确定还能做什么。这是我尝试过的:

import { readBuffer } from 'memoryjs';

let buffer: Buffer = readBuffer(process, address, bufferLength);
console.log(buffer);

// (correctly) OUTPUTS -> <Buffer 88 77 b3 10 00 00 00 00 00 00 00 00 60 d5 69 1b 06 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 c2 52 16 01 00 00 00 00 9a 8f 07 00 00 ... 6 more bytes>
console.log(buffer.toJson());

// OUTPUS: 
{
  type: 'Buffer',
  data: [
    136, 119, 179, 16, 0, 0, 0, 0,  0,   0,   0, 0,
     96, 213, 105, 27, 6, 0, 0, 0, 22,   0,   0, 0,
      0,   0,   0,  0, 0, 0, 0, 0,  0,   0,   0, 0,
     64, 194,  82, 22, 1, 0, 0, 0,  0, 154, 143, 7,
      0,   0,   0,  0, 0, 0, 0, 0
  ]
}
console.log(JSON.parse(JSON.stringify(buffer)));

// OUTPUS: 
{
  type: 'Buffer',
  data: [
    136, 119, 179, 16, 0, 0, 0, 0,  0,   0,   0, 0,
     96, 213, 105, 27, 6, 0, 0, 0, 22,   0,   0, 0,
      0,   0,   0,  0, 0, 0, 0, 0,  0,   0,   0, 0,
     64, 194,  82, 22, 1, 0, 0, 0,  0, 154, 143, 7,
      0,   0,   0,  0, 0, 0, 0, 0
  ]
}
console.log(buffer.toString());

// OUTPUTS: �w�►`�i♠▬�R▬☺��

随后当它尝试这个时:

console.log(JSON.parse(buffer.toString()));

// OUTPUTS: 
    SyntaxError: Unexpected token � in JSON at position 0
         at JSON.parse (<anonymous>)

使用 structron 的 read() 函数(npm 包 https://www.npmjs.com/package/structron

import Struct = require('structron'); // doing " import Struct from 'structron' " gives an import error

let struct = new Struct();
console.log(this.struct.read(buffer, address));

// OUPUTS: {}

我正在实时读取应用程序的内存,当我选中应用程序中的复选框时,我可以看到 buffer var 的 00 更改为 01 和 viscera 所以我认为问题不是以错误的方式获取缓冲区数据(错误的 addressprocess)。

我在想也许我可以 decode/deserialize 来自 buffer.data 的 int 数组到 json 对象中,但我不确定是否有办法做到这一点。

任何输入都会对我有很大帮助。提前致谢。

以明文序列化缓冲区的最佳方法可能是将其转换为 base64:

const buf = Buffer.from("asdf");
// this is a string you can store in a JSON object somewhere
const serialized = x.toString("base64");
console.log(serialized); // YXNkZg==
// you can get the serialized base64 from a JSON object
const deserialized = Buffer.from(serialized, "base64");
console.log(deserialized); // <Buffer 61 73 64 66>
console.log(deserialized.toString("utf8")); // asdf

请注意,如果您可以,则应将缓冲区直接写入文件,因为 base64 space比原始二进制数据消耗更多。