code wiki / _hdl_build / nx_boot_uefi_memmap.nx

nx_boot_uefi_memmap.nx

buildroot/runtime/_hdl_build/nx_boot_uefi_memmap.nx

11790 B214 linesdepth 2pulls 2 transitivereach 0 importersview sourcekind tooltopic boot
docsdependenciesstructsconstsfunctions

about

nx_boot_uefi_memmap.nx -- NOS-R0.2 of the NISHI OS ladder: the OS calls UEFI BootServices. Extends the auto-discovery seed (R0.1): the emitted subsystem-10 EFI_APPLICATION now INVOKES a real UEFI firmware FUNCTION -- BootServices->GetMemoryMap -- using the full MS-x64 ABI (rcx/rdx/r8/r9 + a 5th argument on the stack at [rsp+0x20]). GetMemoryMap is THE call an installer uses to read the machine's RAM layout ("where can I install"). This rung proves the call MECHANISM (reaching BootServices, passing 5 args, the firmware function returning, and continuing) by printing a fixed "RAM-MAP-READ" confirmation after the call. Reading + printing the returned map size (number formatting) is the next rung, NOS-R0.3. Entry ABI (MS x64): RCX=ImageHandle, RDX=SystemTable*. RSI=SystemTable, RDI=ConOut kept across calls. GetMemoryMap(rcx=&MapSize, rdx=MapBuf(NULL), r8=&MapKey, r9=&DescSize, [rsp+0x20]=&DescVer). SystemTable: +0x40 ConOut, +0x60 BootServices. BootServices: +0x38 GetMemoryMap. Scratch arg buffers live in an RWX section (firmware writes the required size into *MapSize). Build (sovereign): ./_offc/nx_sov_build_run.elf nx_boot_uefi_memmap (nx_cc->nxasm, no gcc) Self-gate: byte-reproducible + structural (subsystem=10, entry, the `mov rax,[rsi+0x60]` + `call [rax+0x38]` GetMemoryMap opcodes present) + tamper (subsystem->3 rejects). Exec-proof: nx_emu_uefi models BootServices->GetMemoryMap as a hook -> confirms the call fires and "RAM-MAP-READ" prints (sovereign, no qemu/laptop). Sovereign: syscalls only, no gcc/.sh. license_tier: ORIGINAL

dependencies 1 imports · 0 importers

nx_syscalls.nx nx_boot_uefi_memmap.nx

imports: nx_syscalls.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main sys_mmap uefi_emit _w16 _w8 _w32 _w8 ↻ _w8 ↻ _w64 _w32 ↻ uefi_verify _r32 _r16 _w16 ↻ sys_openat_wr u_p sys_write u_log sys_openat_append u_fp sys_write ↻ u_fn sys_mmap ↻ sys_write ↻ sys_close sys_exit sys_write ↻ sys_close ↻ u_fn ↻

structs

none

consts

23const PE_MAGIC_4096: i64 = 4096
25const PE_FILE_SIZE: i64 = 0x400
26const PE_MACHINE_AMD64: i64 = 0x8664
27const PE_OH_MAGIC_PEPLUS: i64 = 0x020B
28const PE_SUBSYSTEM_EFI_APP: i64 = 10
29const PE_CHAR_EXEC: i64 = 0x0002
30const PE_CHAR_LARGE_ADDR: i64 = 0x0020
31const PE_SECT_CODE_RWX: i64 = 0xE0000020 // CODE|EXECUTE|READ|WRITE (scratch is written by firmware)
33const FOFF_PE_SIG: i64 = 0x80
34const FOFF_COFF: i64 = 0x84
35const FOFF_OPT: i64 = 0x98
36const FOFF_SECT_TBL: i64 = 0x188
37const FOFF_TEXT: i64 = 0x200
38const RVA_TEXT: i64 = 0x1000
39const OPT_SUBSYS: i64 = 0x98 + 68
40const OPT_ENTRY: i64 = 0x98 + 16
41const IMG_BASE: i64 = 0x10000000
42const TEXT_VSIZE: i64 = 0x90

functions

44func _w8(buf: *u8, off: i64, v: i64) -> i64 { buf[off] = (v & 0xff) as u8; return off + 1 }
called by 3: _w16_w32uefi_emit
45func _w16(buf: *u8, off: i64, v: i64) -> i64 { _w8(buf, off, v); _w8(buf, off + 1, v >> 8); return off + 2 }
called by 2: uefi_emitmain calls 1: _w8
46func _w32(buf: *u8, off: i64, v: i64) -> i64
called by 2: _w64uefi_emit calls 1: _w8
50func _w64(buf: *u8, off: i64, v: i64) -> i64 { _w32(buf, off, v); _w32(buf, off + 4, v >> 32); return off + 8 }
called by 1: uefi_emit calls 1: _w32
51func _r16(buf: *u8, off: i64) -> i64 { return (buf[off] as i64) | ((buf[off + 1] as i64) << 8) }
called by 1: uefi_verify
52func _r32(buf: *u8, off: i64) -> i64
called by 1: uefi_verify
56func uefi_emit(buf: *u8) -> i64
called by 1: main calls 4: _w16_w32_w8_w64
130func uefi_verify(buf: *u8) -> i64
called by 1: main calls 2: _r32_r16
152func u_p(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
called by 1: main calls 1: sys_write
153func u_fp(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
called by 1: u_log calls 1: sys_write
154func u_fn(fd: i64, v: i64) -> i64
called by 2: u_logmain calls 2: sys_mmapsys_write
162func u_log(sz: i64, repro: i64, structural: i64, tamper: i64, verdict: *u8) -> i64
173func main(argc: i64, argv: *i64) -> i64