local fmt = require("elf.fmt") ---@alias Magic [integer, integer, integer, integer] ---@class Header ---@field magic Magic ---@field class Class ---@field data Endian ---@field ident_version integer ---@field osabi Osabi ---@field abiversion integer ---@field type Type ---@field machine Machine ---@field version integer ---@field entry integer ---@field phoff integer ---@field shoff integer ---@field flags integer ---@field ehsize integer ---@field phentsize? integer ---@field phnum? integer ---@field shentsize integer ---@field shnum integer ---@field shstrndx integer local M = {} ---@param hdr Header ---@return string ---@nodiscard function M.pack(hdr) return string.pack("BBBBBBBBBxxxxxxx" .. fmt.endian(hdr.data) .. "I2I2I4" .. string.rep(fmt.word(hdr.class), 3) .. "I4I2I2I2I2I2I2", hdr.magic[1], hdr.magic[2], hdr.magic[3], hdr.magic[4], hdr.class, hdr.data, hdr.ident_version, hdr.osabi, hdr.abiversion, hdr.type, hdr.machine, hdr.version, hdr.entry, hdr.phoff, hdr.shoff, hdr.flags, hdr.ehsize, hdr.phentsize, hdr.phnum, hdr.shentsize, hdr.shnum, hdr.shstrndx) end return M