ค้นหาเว็บไซต์

node.js - TypeScript ถอดรหัส Buffer เป็นวัตถุ JSON ด้วย NodeJS/memoryjs


ฉันกำลังพยายามที่จะดึง วัตถุ json จาก บัฟเฟอร์ ด้วย mermoryjs.readBuffer() และฉันได้พยายามมาสักพักแล้ว ฉันไม่แน่ใจว่าควรทำอะไรต่อไป นี่คือสิ่งที่ฉันได้ลอง:

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>)

การใช้ฟังก์ชัน read() ของ structron (แพ็กเกจ 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 เปลี่ยนจาก 00 เป็น 01 และ viscera ดังนั้นฉันจึงไม่คิดว่าปัญหามาจากการดึงข้อมูล buffer ผิดวิธี (ด้วย address หรือ process ผิด)

ฉันกำลังคิดว่า บางทีฉันอาจสามารถถอดรหัส/แปลงอาร์เรย์ของตัวเลขจำนวนเต็มจาก buffer.data เป็นอ็อบเจ็กต์ JSON ได้ แต่ฉันไม่แน่ใจว่าจะมีวิธีทำได้หรือไม่

คำตอบใด ๆ จะช่วยฉันได้มาก ขอบคุณล่วงหน้า

คำตอบ #1

วิธีที่ดีที่สุดในการแปลงบัฟเฟอร์เป็นข้อความธรรมดาอาจเป็นการแปลงมันเป็น 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 ใช้พื้นที่มากกว่าข้อมูลไบนารีดิบ

คำตอบ #2

JSON.parse(body.toString())

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน