asm-rs-macros
Compile-time assembly proc-macros for asm-rs.
Features
asm_bytes!— Assemble at compile time →&'static [u8]asm_array!— Assemble at compile time →[u8; N]- Zero runtime overhead — all assembly happens during compilation
- All architectures — x86, x86-64, ARM, Thumb, AArch64, RISC-V
- Full assembler features — labels, directives, multi-line source
- Optional base address —
asm_bytes!(arch, 0x400000, "source")
Usage
Add to Cargo.toml:
[]
= "0.1"
= "0.1"
Examples
Basic Usage
use asm_bytes;
// x86-64 shellcode assembled at compile time
const SHELLCODE: & = asm_bytes!;
// Fixed-size array variant
use asm_array;
const NOP: = asm_array!;
Multi-Architecture
use asm_bytes;
const X86_CODE: & = asm_bytes!;
const X64_CODE: & = asm_bytes!;
const ARM_CODE: & = asm_bytes!;
const THUMB_CODE: & = asm_bytes!;
const A64_CODE: & = asm_bytes!;
const RV32_CODE: & = asm_bytes!;
const RV64_CODE: & = asm_bytes!;
With Base Address
use asm_bytes;
const CODE: & = asm_bytes!;
Labels and Directives
use asm_bytes;
const DATA: & = asm_bytes!;
Supported Architectures
| Identifier | Architecture |
|---|---|
x86 |
x86 (32-bit) |
x86_64 |
x86-64 (64-bit) |
arm |
ARM (32-bit) |
thumb |
ARM Thumb |
aarch64 |
AArch64 (ARM 64-bit) |
rv32 |
RISC-V 32-bit |
rv64 |
RISC-V 64-bit |
Error Handling
Assembly errors become compile-time errors with full diagnostics:
// This produces a compile-time error:
const BAD: & = asm_bytes!;
License
Licensed under either of Apache License, Version 2.0 or MIT License at your option.