code wiki / (root) / nx_contentdiff_sectionless_candidate_t314.nx

nx_contentdiff_sectionless_candidate_t314.nx source

↩ module page · 25 lines · 1049 B

1import "_hdl_build/nx_contentdiff_lib.nx" 2// ELF64 program-header sizes/offsets follow the ELF ABI, not capacity policy. 3// No section table means no structured DWARF source identities, not an invalid ELF. 4func cds_sectionless(c:*NxCdStructured)->i64{ 5 let b:*u8=c.buf;let n:i64=c.bytes 6 if nx_elf_get_u64_le(b,40)!=0{return CDS_UNKNOWN} 7 if nx_elf_get_u16_le(b,60)!=0||nx_elf_get_u16_le(b,62)!=0{return CDS_INVALID} 8 let po:i64=nx_elf_get_u64_le(b,32);let ps:i64=nx_elf_get_u16_le(b,54);let pc:i64=nx_elf_get_u16_le(b,56) 9 if pc==65535{return CDS_UNKNOWN} 10 if pc==0{return CDS_UNKNOWN} 11 if ps!=56{return CDS_UNKNOWN} 12 if po<64{return CDS_INVALID} 13 if cds_span(n,po,pc*ps)==0{return CDS_INVALID} 14 var i:i64=0 15 while i<pc{ 16 let p:i64=po+i*ps;let kind:i64=nx_elf_get_u32_le(b,p) 17 if kind!=0{ 18 let off:i64=nx_elf_get_u64_le(b,p+8);let size:i64=nx_elf_get_u64_le(b,p+32) 19 if cds_span(n,off,size)==0{return CDS_INVALID} 20 if kind==1{let memory:i64=nx_elf_get_u64_le(b,p+40);if memory<0||size>memory{return CDS_INVALID}} 21 } 22 i=i+1 23 } 24 return 0 25}