diff options
| author | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-24 16:28:16 +0530 |
|---|---|---|
| committer | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-24 16:28:16 +0530 |
| commit | f5f7251972748d76f9f6e0cacdcae97a303a02dc (patch) | |
| tree | 71b3e73a9fc40403b0af0b61e458f00d4e7ccf0b /elf | |
| parent | be5b2da8fc3a09238e90deec7e35c40afbe00bd2 (diff) | |
Segments: normalize and validate.
While here mark mandatory and optional fields.
Diffstat (limited to 'elf')
| -rw-r--r-- | elf/segment.lua | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/elf/segment.lua b/elf/segment.lua index 662f42e..19cb6d0 100644 --- a/elf/segment.lua +++ b/elf/segment.lua @@ -3,17 +3,39 @@ local fmt = require("elf.fmt") ---@class Segment ---@field type SegmentType ----@field flags integer ----@field offset integer ----@field vaddr integer ----@field paddr integer ----@field filesz integer ----@field memsz integer ----@field align integer +---@field flags? integer +---@field offset? integer +---@field vaddr? integer +---@field paddr? integer +---@field filesz? integer +---@field memsz? integer +---@field align? integer +---@field first_section? string +---@field last_section? string ---@class Segments local M = {} + +function M.normalize(phdrs) + for _, phdr in ipairs(phdrs) do + phdr.flags = phdr.flags or 0 + phdr.offset = phdr.offset or 0 + phdr.vaddr = phdr.vaddr or 0 + phdr.paddr = phdr.paddr or 0 + phdr.filesz = phdr.filesz or 0 + phdr.memsz = phdr.memsz or 0 + phdr.align = phdr.align or 1 + end +end + +function M.validate(phdrs) + for _, phdr in ipairs(phdrs) do + if not phdr.type then error("type is required in segment", 3) end + -- TODO additional validations + end +end + ---@param phdr Segment ---@param endian Endian ---@return string |
