asm-rs-macros 0.1.0

Compile-time assembly proc-macros for asm-rs
Documentation
  • Coverage
  • 100%
    3 out of 3 items documented0 out of 2 items with examples
  • Size
  • Source code size: 23.89 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 286.98 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 4s Average build duration of successful builds.
  • all releases: 4s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • hupe1980/asm-rs
    6 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • hupe1980

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 addressasm_bytes!(arch, 0x400000, "source")

Usage

Add to Cargo.toml:

[dependencies]
asm-rs = "0.1"
asm-rs-macros = "0.1"

Examples

Basic Usage

use asm_rs_macros::asm_bytes;

// x86-64 shellcode assembled at compile time
const SHELLCODE: &[u8] = asm_bytes!(x86_64, "
    xor eax, eax
    inc eax
    ret
");

// Fixed-size array variant
use asm_rs_macros::asm_array;
const NOP: [u8; 1] = asm_array!(x86_64, "nop");

Multi-Architecture

use asm_rs_macros::asm_bytes;

const X86_CODE: &[u8]    = asm_bytes!(x86, "nop; ret");
const X64_CODE: &[u8]    = asm_bytes!(x86_64, "nop; ret");
const ARM_CODE: &[u8]    = asm_bytes!(arm, "bx lr");
const THUMB_CODE: &[u8]  = asm_bytes!(thumb, "nop");
const A64_CODE: &[u8]    = asm_bytes!(aarch64, "nop\nret");
const RV32_CODE: &[u8]   = asm_bytes!(rv32, "nop");
const RV64_CODE: &[u8]   = asm_bytes!(rv64, "nop\nret");

With Base Address

use asm_rs_macros::asm_bytes;

const CODE: &[u8] = asm_bytes!(x86_64, 0x400000, "
    start:
        nop
        jmp start
");

Labels and Directives

use asm_rs_macros::asm_bytes;

const DATA: &[u8] = asm_bytes!(x86_64, "
    .byte 0xCC
    .byte 0x90
");

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: &[u8] = asm_bytes!(x86_64, "invalid_mnemonic");

License

Licensed under either of Apache License, Version 2.0 or MIT License at your option.