Write Sign in

Free book shelf

Books prepared for ForgeVM readers

A library surface for free downloadable books, chapter tracks, and long-form references around assembly, OS internals, toolchains, and ForgeVM.

Book tracks

Linux / x86-64

Linux x86-64 Assembly Field Book

A practical route from registers and syscalls to ELF, debugging, and calling C safely.

Registers and flagsAddressing modesLinux syscall ABIStack frames and SysV ABIELF sections and symbolsDynamic linking basicsGDB disassembly workflow
global _start
section .text
_start:
    mov rax, 60
    xor rdi, rdi
    syscall
Windows / x86-64

Windows x64 Internals for Assembly Writers

Win64 ABI, PE/COFF, unwind info, debugger workflow, and safe boundaries with C/C++.

Win64 register conventionShadow space and stack alignmentPE sections and importsStructured exception handlingUnwind metadataMASM and MSVC interopWinDbg crash reading
.code
AddTwo PROC
    mov rax, rcx
    add rax, rdx
    ret
AddTwo ENDP
END
macOS / ARM64

macOS ARM64 Low-Level Notes

Mach-O, Apple arm64 ABI details, dyld, LLDB, universal binaries, and secure platform features.

AArch64 register modelApple calling convention notesMach-O sections and load commandsdyld and symbolsLLDB workflowPointer authentication overviewSwift/C/assembly boundaries
.global _main
_main:
    mov x0, #0
    ret
Linux and bare metal / RISC-V

RISC-V from ISA to Linux

Base ISA, psABI, CSRs, traps, linker scripts, QEMU, and Linux-capable workflows.

RV64I essentialsRegister ABICompressed instructionsELF and relocationBare metal startupMachine and supervisor modesTrap handling
.globl _start
_start:
    li a7, 93
    li a0, 0
    ecall
Windows, Linux, macOS / x86-64, ARM64, RISC-V

Cross-Platform Low-Level Cookbook

A problem-oriented handbook: inspect binaries, call assembly from C/C++, debug crashes, and compare OS boundaries.

Compiler flags that matterInspecting object filesCalling assembly from CInline assembly trapsStack traces and unwindingSyscall tracing by OSMemory mapping APIs
extern "C" long add_two(long a, long b);
int main() { return (int)add_two(20, 22); }