extern structstd.coff.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

Functions

FunctiongetName[src]

pub fn getName(self: *align(1) const SectionHeader) ?[]const u8

Parameters

self: *align(1) const SectionHeader

Source Code

Source code
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];
}

FunctiongetNameOffset[src]

pub fn getNameOffset(self: SectionHeader) ?u32

Parameters

Source Code

Source code
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;
}

FunctiongetAlignment[src]

pub fn getAlignment(self: SectionHeader) ?u16

Applicable only to section headers in COFF objects.

Parameters

Source Code

Source code
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;
}

FunctionsetAlignment[src]

pub fn setAlignment(self: *SectionHeader, new_alignment: u16) void

Parameters

new_alignment: u16

Source Code

Source code
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));
}

FunctionisCode[src]

pub fn isCode(self: SectionHeader) bool

Parameters

Source Code

Source code
pub fn isCode(self: SectionHeader) bool {
    return self.flags.CNT_CODE == 0b1;
}

FunctionisComdat[src]

pub fn isComdat(self: SectionHeader) bool

Parameters

Source Code

Source code
pub fn isComdat(self: SectionHeader) bool {
    return self.flags.LNK_COMDAT == 0b1;
}

Source Code

Source code
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;
    }
}