Releases: xarantolus/ax
v0.6.0
- Vastly improved python dev scripts, thank you @Shadow-Devil :)
- Improve dev container
- Upgrade Rust edition
- A few new instructions:
Cdqe
,Cld
,Movd
,Movups
,Neg
,Xorps
- ELF parsing now actually uses ELF LOAD segments instead of the previous, wrong way of loading
- Still does not work perfectly with libc
- Auto-generated API documentation
- Convenience functions for registering some syscalls (Brk, Pipe, Exit, ArchPrctl)
- ELF loading now supports symbol tables
- Tracing: know which jumps, calls and returns were executed
- Call stack tracking, makes debugging easier
- A few new non-stdlib C examples
- Some large internal refactorings
Full Changelog: v0.5.0...v0.6.0
Refactoring, bugfixes
This release contains many internal improvements, refactorings and bugfixes.
It also adds new tests for the public-facing API, making it less likely that it will be broken.
The test scripts can now permutate input flags, allowing them to work on more instructions (new tests using this capability for already implemented instructions were also added).
New instruction:
ADC
(all variants)
Full Changelog: v0.4.0...v0.5.0
Binary releases
In addition to the WebAssembly package, a new binary for Linux and Windows is also being built.
It currently only emulates the write
syscall and has some bugs that need to be fixed, but it is another way of getting an ELF binary to run.
You can e.g. download download this binary and then run the following on Windows:
./ax.exe ./alphabet.bin some other args
Both the Linux and Windows binary are for x86-64/amd64.
Full Changelog: v0.3.2...v0.4.0
Documentation + Register write improvements
Out-of-range register writes now throw an exception instead of an uncatchable panic.
Also the generated TypeScript files now come with inline documentation that is displayed when hovering the function name.
Full Changelog: v0.3.1...v0.3.2
Demo improvements
Some more examples on environment variables, improved demo site
Full Changelog: v0.3.0...v0.3.1
Program initialization
The new init_stack_program_start
function allows easily setting up the stack as it is on Linux. This makes it even easier to run ELF binaries
See the example in the README for full details:
let ax = Axecutor.from_binary(/* elf file content as Uint8Array */);
// Set up the stack according to the System V ABI.
// This sets up memory locations for command-line arguments and environment variables
// and writes the stack pointer to RSP
ax.init_stack_program_start(
8n * 1024n, // Stack size
["/bin/my_binary", "arg1", "arg2"],
[ /* environment variables */ ]
);
Support for programs using libc is still in progress, but has gotten slightly better (still not working).
Full Changelog: v0.2.1...v0.3.0
Documentation improvements
Full Changelog: v0.2.0...v0.2.1
v0.2.0
All register and memory read/write functions now take bigints as inputs and return bigints. This makes them easier to use from JavaScript
Full Changelog: v0.1.1...v0.2.0
v0.1.1
Mostly internal changes, an improved demo site and an automated NPM release pipeline.
https://www.npmjs.com/package/ax-x86
Full Changelog: v0.1.0...v0.1.1
v0.1.0
This is the first binary release of this emulator. It doesn't support much, but most instructions I care about work and are covered by tests.
To see it in action, visit https://memeasm.010.one.
Full Changelog: https://github.com/xarantolus/ax/commits/v0.1.0