在Node.js环境中做二进制分析,核心依赖是Buffer对象。它代表一段固定长度的原始内存,提供了readUInt32LE、readInt16BE等方法,可以按小端或大端读取不同长度的整数。与浏览器中的ArrayBuffer相比,Node的Buffer操作更直接,不需要额外视图对象即可完成读写,非常适合用来解析自定义格式的二进制文件。

二进制数据读取与字节序处理
任何BinaryAnalysis任务的第一步都是确认数据的字节序。x86架构生成的文件多为小端(Little-Endian),而网络协议或某些嵌入式设备常用大端(Big-Endian)。如果读取时选错方法,数值会完全错位。例如一个四字节序列01 00 00 00,用readUInt32LE得到1,用readUInt32BE则得到16777216。因此在解析前必须依据文件规范固定字节序,或读取头部魔数动态判断。
下面示例展示如何打开一个二进制文件并读取头部两个字段:魔数(4字节大端)和版本号(2字节小端)。通过fs.readFileSync一次性载入后,利用Buffer方法按偏移提取。实际项目中若文件很大,应使用fs.open配合fs.read做分块读取,避免占用过多内存。
const fs = require('fs');
const buf = fs.readFileSync('sample.bin');
const magic = buf.readUInt32BE(0);
const version = buf.readUInt16LE(4);
console.log('magic:', magic.toString(16));
console.log('version:', version);
除了整数,浮点数和字符串也常出现在二进制结构中。Buffer的readFloatLE可读取单精度浮点,slice配合toString('utf8')能提取定长字符串。需要注意的是,C语言结构体里的char数组常以