diff options
| author | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-23 22:43:44 +0530 |
|---|---|---|
| committer | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-23 22:44:48 +0530 |
| commit | 79f6b161f892f621a909ce1df99b3c680f3682a2 (patch) | |
| tree | 7647bed7ccaa977f3cd28dcc8283ceef63265e57 /elf/header.lua | |
| parent | d46e3e7761a133d58b6c77058473d9edc8a54744 (diff) | |
Refactor: Move to an elf module.
While here, define a elf.d.lua to help author type check configuration file.
Diffstat (limited to 'elf/header.lua')
| -rw-r--r-- | elf/header.lua | 58 |
1 files changed, 58 insertions, 0 deletions
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 |
