From 79f6b161f892f621a909ce1df99b3c680f3682a2 Mon Sep 17 00:00:00 2001 From: Sunil Nimmagadda Date: Fri, 23 Oct 2026 22:43:44 +0530 Subject: Refactor: Move to an elf module. While here, define a elf.d.lua to help author type check configuration file. --- elf/header.lua | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 elf/header.lua (limited to 'elf/header.lua') diff --git a/elf/header.lua b/elf/header.lua new file mode 100644 index 0000000..2a9ec68 --- /dev/null +++ b/elf/header.lua @@ -0,0 +1,58 @@ +local fmt = require("elf.fmt") + +local M = {} + +---@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 + +---@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 -- cgit v1.3