which-electron/src/elf.js

36 lines
799 B
JavaScript

import elfinfo from "elfinfo";
import fs from "fs";
// Parse the specified ELF file.
export function getVersion(path, cb) {
const elfdata = fs.readFileSync(path);
let info = null;
elfinfo.open(elfdata).then((info) => {
let rodata = info.elf.sections.filter((x) => {
return x.name == ".rodata";
})[0];
const data = fs.createReadStream(path, {
start: Number(rodata.addr),
end: Number(rodata.addr) + rodata.size,
highWaterMark: rodata.addralign,
});
let ret = false;
data.on("data", function (data) {
let found = data.toString().match(/Electron\/(\d+\.\d+\.\d+)/);
if (found) {
ret = true;
cb(found[1]);
}
});
data.on("end", function (e) {
if (!ret) {
cb(false);
}
});
});
}