private unsafe void WriteSectionHeader64() { var hdr = new Elf64_Ehdr(); ObjectFile.CopyIdentTo(new Span <byte>(hdr.e_ident, EI_NIDENT)); _encoder.Encode(out hdr.e_type, (ushort)ObjectFile.FileType); _encoder.Encode(out hdr.e_machine, ObjectFile.Arch.Value); _encoder.Encode(out hdr.e_version, EV_CURRENT); _encoder.Encode(out hdr.e_entry, ObjectFile.EntryPointAddress); _encoder.Encode(out hdr.e_ehsize, Layout.SizeOfElfHeader); _encoder.Encode(out hdr.e_flags, (uint)ObjectFile.Flags); // program headers _encoder.Encode(out hdr.e_phoff, Layout.OffsetOfProgramHeaderTable); _encoder.Encode(out hdr.e_phentsize, Layout.SizeOfProgramHeaderEntry); _encoder.Encode(out hdr.e_phnum, (ushort)ObjectFile.Segments.Count); // entries for sections _encoder.Encode(out hdr.e_shoff, Layout.OffsetOfSectionHeaderTable); _encoder.Encode(out hdr.e_shentsize, (ushort)sizeof(Elf64_Shdr)); _encoder.Encode(out hdr.e_shnum, (ushort)ObjectFile.VisibleSectionCount); _encoder.Encode(out hdr.e_shstrndx, (ushort)(ObjectFile.SectionHeaderStringTable?.SectionIndex ?? (ushort)0)); Write(hdr); }