nx_wasm_memory_inspect_gate.nx source
↩ module page · 39 lines · 2774 B
1// Read-only whole-file observation through existing readcap and memory-contract owners.
2// A successful descriptor decode is not full Wasm validation or runtime acceptance.
3import "nx_readcap_lib.nx"
4import "nx_wasm_memory_lib.nx"
5import "nx_gate_verdict.nx"
6func wi_cap(s: *u8) -> i64 {
7 var n: i64=0;var i: i64=0
8 while s[i]!=(0 as u8){let digit: i64=s[i] as i64-48;if digit<0||digit>9{return 0-1};if n>(9223372036854775807-digit)/10{return 0-1};n=n*10+digit;i=i+1}
9 if i==0||n<WM_HEADER{return 0-1};return n
10}
11func main(argc: i64,argv: **u8) -> i64 {
12 if argc!=3{gv_puts("usage: wasm-memory-inspect-gate <actual.wasm> <max-read-bytes>\n" as *u8);return 3}
13 let path: *u8=argv[1] as *u8;let capacity: i64=wi_cap(argv[2] as *u8)
14 if capacity<WM_HEADER{return 3}
15 let ctr: *i64=gv_ctr();gv_head("WASM-MEMORY-INSPECT / actual complete artifact" as *u8)
16 let bytes: *u8=sys_mmap(capacity)
17 let state: *i64=sys_mmap(3*__size_of(i64)) as *i64
18 let limits: *i64=sys_mmap(WM_FIELDS*__size_of(i64)) as *i64
19 if (bytes as i64)<=0||(state as i64)<=0||(limits as i64)<=0{gv_check("observation buffers allocated" as *u8,0,ctr);return gv_verdict("WASM-MEMORY-INSPECT" as *u8,ctr,"allocation failed" as *u8)}
20 let fd: i64=sys_openat_rd(path)
21 gv_check("actual artifact opened" as *u8,fd>=0,ctr)
22 if fd<0{return gv_verdict("WASM-MEMORY-INSPECT" as *u8,ctr,"artifact unavailable" as *u8)}
23 let n: i64=rc_fill_file(fd,bytes,capacity,state)
24 let closed: i64=sys_close(fd)
25 gv_check("whole artifact read through EOF or exact-cap EOF probe" as *u8,rc_complete(state)==1,ctr)
26 gv_check("artifact descriptor closed successfully" as *u8,closed==0,ctr)
27 gv_values_head();gv_kv("actual_bytes_read" as *u8,n);gv_kv("read_capacity" as *u8,capacity)
28 gv_puts("read_state=" as *u8);gv_puts(rc_state_name(state[0]));gv_puts("\nartifact=" as *u8);gv_puts(path);gv_puts("\n" as *u8)
29 if rc_complete(state)!=1||closed!=0{return gv_verdict("WASM-MEMORY-INSPECT" as *u8,ctr,"whole-file observation incomplete; no descriptor reported" as *u8)}
30 let rc: i64=wmem_read(bytes,n,limits)
31 gv_check("existing memory-contract decoder accepts complete artifact" as *u8,rc==0,ctr)
32 gv_values_head();gv_kv("memory_decoder_exit" as *u8,rc)
33 if rc==0{
34 gv_kv("minimum_pages" as *u8,limits[0]);gv_kv("maximum_pages_or_minus_one" as *u8,limits[1])
35 gv_kv("shared" as *u8,limits[2]);gv_kv("imported" as *u8,limits[3])
36 }
37 sys_munmap(bytes,capacity);sys_munmap(state as *u8,3*__size_of(i64));sys_munmap(limits as *u8,WM_FIELDS*__size_of(i64))
38 return gv_verdict("WASM-MEMORY-INSPECT" as *u8,ctr,"complete artifact read and existing single-memory descriptor inspected; not full Wasm validation or runtime acceptance" as *u8)
39}