Expand description
#assembler
This is a new code base to efficiently assemble 64-bit x86 (AMD64 long mode) machine code at runtime.
Instructions are emitted by using the mnemonic-like methods on the InstructionStream
.
These are designed to work with Rust’s release build optimizations to compile down to just a sequence of byte stores to memory.
In addition, labels are supported; use of short (8-bit) labelled jumps is supported, and, where possible, are used.
§Example Usage
extern crate assembler;
use ::assembler::*;
use ::assembler::mnemonic_parameter_types::BranchHint;
use ::assembler::mnemonic_parameter_types::Label;
use ::assembler::mnemonic_parameter_types::memory_operands::*;
use ::assembler::mnemonic_parameter_types::immediates::*;
use ::assembler::mnemonic_parameter_types::registers::*;
fn main()
{
// SOME_LENGTH will be rounded up to the nearest power of two, with a minimum of the page size (4Kb).
const SOME_LENGTH: usize = 4096;
let memory_map = ExecutableAnonymousMemoryMap::new(SOME_LENGTH).unwrap();
const SOME_LIKELY_NUMBER_OF_LABELS: usize = 512;
let instruction_stream = memory_map.instruction_stream(SOME_LIKELY_NUMBER_OF_LABELS);
instruction_stream.mov_...();
let label = instruction_stream.create_and_attach_label();
instruction_stream.jmp_Label(label)?;
let function_pointer = instruction_stream.nullary_function::<()>():
instruction_stream.finish();
function_pointer();
}
Modules§
- mnemonic_
parameter_ types - Mnemonic parameter types.
Structs§
- Executable
Anonymous Memory Map - Represents an executable memory map that can be used to generate program code into.
- Instruction
Stream - An instruction stream.
- Instruction
Stream Hints - Hints to use when creating an instruction stream.
Enums§
- Executable
Anonymous Memory MapCreation Error - Errors from trying to instantiate an
ExecutableAnonymousMemoryMap
.
Type Aliases§
- Instruction
Pointer - An instruction pointer.
- Short
JmpResult - Represents the result of attempting a mnemonic with a short jump.