From d461c61d0f473bfc64fa1ff15a31a3044207568b Mon Sep 17 00:00:00 2001 From: Sunil Nimmagadda Date: Mon, 12 Oct 2026 11:56:25 +0530 Subject: Extract into ElfHeader_pack function. --- mkelf.lua | 60 ++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/mkelf.lua b/mkelf.lua index b73f9d4..10a00a4 100644 --- a/mkelf.lua +++ b/mkelf.lua @@ -80,6 +80,37 @@ local Machine = { ---@field shnum integer ---@field shstrndx integer +---@param hdr ElfHeader +---@nodiscard +local function ElfHeader_pack(hdr) + local ident = string.pack("BBBBBBBBBxxxxxxx", + hdr.magic[1], hdr.magic[2], hdr.magic[3], hdr.magic[4], + hdr.class, + hdr.data, + hdr.ident_version, + hdr.osabi, + hdr.abiversion) + local e = (hdr.data == Endian.big) and ">" or "<" + local sz = (hdr.class == Class.bit64) and "I8" or "I4" + local h = string.pack(e .. "I2I2I4" .. + sz .. sz .. sz .. + "I4I2I2I2I2I2I2", + 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) + return ident .. h +end + ---@type ElfHeader local header = { magic = { 0x7f, 0x45, 0x4c, 0x46 }, @@ -102,34 +133,7 @@ local header = { shnum = 0, shstrndx = 0, - pack = function(self) - local ident = string.pack("BBBBBBBBBxxxxxxx", - self.magic[1], self.magic[2], self.magic[3], self.magic[4], - self.class, - self.data, - self.ident_version, - self.osabi, - self.abiversion) - local e = (self.data == Endian.big) and ">" or "<" - local sz = (self.class == Class.bit64) and "I8" or "I4" - local hdr = string.pack(e .. "I2I2I4" .. - sz .. sz .. sz .. - "I4I2I2I2I2I2I2", - self.type, - self.machine, - self.version, - self.entry, - self.phoff, - self.shoff, - self.flags, - self.ehsize, - self.phentsize, - self.phnum, - self.shentsize, - self.shnum, - self.shstrndx) - return ident .. hdr - end + pack = ElfHeader_pack } local function main() -- cgit v1.3