probe-header.js 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. // 生成当前 V8 的 dummy 字节码,对比 996box .jsc 头部
  2. const vm = require('vm');
  3. const v8 = require('v8');
  4. v8.setFlagsFromString('--no-lazy');
  5. v8.setFlagsFromString('--no-flush-bytecode');
  6. const script = new vm.Script('"\u200b"', { produceCachedData: true });
  7. const cached = script.cachedData;
  8. console.log('Current V8 version:', process.versions.v8);
  9. console.log('Dummy cachedData size:', cached.length);
  10. console.log('Dummy header (first 32 bytes):', cached.subarray(0, 32).toString('hex'));
  11. console.log('\n996box urlCreator.jsc:');
  12. const raw = require('fs').readFileSync(process.argv[2]);
  13. console.log(' header:', raw.subarray(0, 32).toString('hex'));
  14. // 字段对比
  15. function fields(buf, off) {
  16. return {
  17. magic: buf.subarray(off+0, off+2).toString('hex'),
  18. versionHash: '0x' + buf.readUInt32LE(off+4).toString(16),
  19. sourceHash: '0x' + buf.readUInt32LE(off+8).toString(16),
  20. flagHash: '0x' + buf.readUInt32LE(off+12).toString(16),
  21. roChecksum: '0x' + buf.readUInt32LE(off+16).toString(16),
  22. payloadLen: '0x' + buf.readUInt32LE(off+20).toString(16),
  23. checksum: '0x' + buf.readUInt32LE(off+24).toString(16),
  24. };
  25. }
  26. console.log('\nDummy:', fields(cached, 0));
  27. console.log('996box (off 0, bytenode wrapper included):', fields(raw, 0));
  28. console.log('996box (off 2, bytenode wrapper stripped):', fields(raw, 2));