71 lines
2.3 KiB
Markdown
71 lines
2.3 KiB
Markdown
[![NPM version](https://badge.fury.io/js/pe-library.svg)](https://www.npmjs.com/package/pe-library)
|
|
[![Build Status](https://github.com/jet2jet/pe-library-js/actions/workflows/main-ci.yml/badge.svg)](https://github.com/jet2jet/pe-library-js)
|
|
|
|
# pe-library
|
|
|
|
pe-library provides parsing and generating Portable Executable (known as Windows Executables) binaries.
|
|
|
|
## Usage
|
|
|
|
```js
|
|
import * as PE from 'pe-library';
|
|
import * as fs from 'fs';
|
|
|
|
// load and parse data
|
|
let data = fs.readFileSync('MyApp.exe');
|
|
// (the Node.js Buffer instance can be specified directly to NtExecutable.from)
|
|
let exe = PE.NtExecutable.from(data);
|
|
|
|
// get section data
|
|
let exportSection = exe.getSectionByEntry(PE.Format.ImageDirectoryEntry.Export);
|
|
// read binary data stored in exportSection.data ...
|
|
// to write binary: use exe.setSectionByEntry
|
|
|
|
// write to buffer
|
|
let newBin = exe.generate();
|
|
fs.writeFileSync('MyApp_modified.exe', new Buffer(newBin));
|
|
```
|
|
|
|
### from CommonJS (using `require`)
|
|
|
|
> Starting from v1.0.0, CommonJS support is changed; you must use `pe-library/cjs` to use from CommonJS file.
|
|
|
|
```js
|
|
const { load } = require('pe-library/cjs');
|
|
const fs = require('fs');
|
|
load().then((PE) => {
|
|
// load and parse data
|
|
let data = fs.readFileSync('MyApp.exe');
|
|
// (the Node.js Buffer instance can be specified directly to NtExecutable.from)
|
|
let exe = PE.NtExecutable.from(data);
|
|
|
|
// get section data
|
|
let exportSection = exe.getSectionByEntry(
|
|
PE.Format.ImageDirectoryEntry.Export
|
|
);
|
|
// read binary data stored in exportSection.data ...
|
|
// to write binary: use exe.setSectionByEntry
|
|
|
|
// write to buffer
|
|
let newBin = exe.generate();
|
|
fs.writeFileSync('MyApp_modified.exe', new Buffer(newBin));
|
|
});
|
|
```
|
|
|
|
#### for CommonJS-based TypeScript module
|
|
|
|
```ts
|
|
// you can use PE namespace for type-reference only
|
|
import { type PE, load } from 'pe-library/cjs';
|
|
load().then((pe: typeof PE) => {
|
|
...
|
|
});
|
|
```
|
|
|
|
## License
|
|
|
|
- All programs / source codes / binaries in this package, EXCEPT FOLLOWINGS, are licensed with [MIT License](./LICENSE).
|
|
- The followings are licensed with 0-BSD license:
|
|
- [tools/dos-stub/dos-stub.asm](./tools/dos-stub/dos-stub.asm)
|
|
- The bit code, generated from tools/dos-stub/dos-stub.asm, written in [src/main/util/generate.ts](./src/main/util/generate.ts) as `DOS_STUB_PROGRAM`
|