extern struct SectionHeader [src]

Fields

name: [8]u8
virtual_size: u32
virtual_address: u32
size_of_raw_data: u32
pointer_to_raw_data: u32
pointer_to_relocations: u32
pointer_to_linenumbers: u32
number_of_relocations: u16
number_of_linenumbers: u16
flags: SectionHeaderFlags

Members

Source

pub const SectionHeader = extern struct { name: [8]u8, virtual_size: u32, virtual_address: u32, size_of_raw_data: u32, pointer_to_raw_data: u32, pointer_to_relocations: u32, pointer_to_linenumbers: u32, number_of_relocations: u16, number_of_linenumbers: u16, flags: SectionHeaderFlags, pub fn getName(self: *align(1) const SectionHeader) ?[]const u8 { if (self.name[0] == '/') return null; const len = std.mem.indexOfScalar(u8, &self.name, @as(u8, 0)) orelse self.name.len; return self.name[0..len]; } pub fn getNameOffset(self: SectionHeader) ?u32 { if (self.name[0] != '/') return null; const len = std.mem.indexOfScalar(u8, &self.name, @as(u8, 0)) orelse self.name.len; const offset = std.fmt.parseInt(u32, self.name[1..len], 10) catch unreachable; return offset; } /// Applicable only to section headers in COFF objects. pub fn getAlignment(self: SectionHeader) ?u16 { if (self.flags.ALIGN == 0) return null; return std.math.powi(u16, 2, self.flags.ALIGN - 1) catch unreachable; } pub fn setAlignment(self: *SectionHeader, new_alignment: u16) void { assert(new_alignment > 0 and new_alignment <= 8192); self.flags.ALIGN = @intCast(std.math.log2(new_alignment)); } pub fn isCode(self: SectionHeader) bool { return self.flags.CNT_CODE == 0b1; } pub fn isComdat(self: SectionHeader) bool { return self.flags.LNK_COMDAT == 0b1; } }