class Metasm::ELF::Section

Attributes

encoded[RW]
name[RW]

Public Instance Methods

make_name_p(elf) click to toggle source

defines the @name_p field from @name and elf.section creates .shstrtab if needed

# File metasm/exe_format/elf_encode.rb, line 49
def make_name_p elf
        return 0 if not name or @name == '' or elf.header.shnum == 0
        if elf.header.shstrndx.to_i == 0 or not elf.sections[elf.header.shstrndx]
                sn = Section.new
                sn.name = '.shstrtab'
                sn.type = 'STRTAB'
                sn.flags = []
                sn.addralign = 1
                sn.encoded = EncodedData.new << 0
                elf.header.shstrndx = elf.sections.length
                elf.sections << sn
        end
        sne = elf.sections[elf.header.shstrndx].encoded
        return if name_p and sne.data[@name_p, @name.length+1] == @name+0.chr
        return if @name_p = sne.data.index(@name+0.chr)
        @name_p = sne.virtsize
        sne << @name << 0
end
set_default_values(elf) click to toggle source
Calls superclass method Metasm::SerialStruct#set_default_values
# File metasm/exe_format/elf_encode.rb, line 34
def set_default_values elf
        make_name_p elf if name and @name != ''
        @flags  ||= []
        @addr   ||= (encoded and @flags.include?('ALLOC')) ? elf.label_at(@encoded, 0) : 0
        @offset ||= encoded ? elf.new_label('section_offset') : 0
        @size   ||= encoded ? @encoded.length : 0
        @addralign ||= entsize || 0
        @entsize ||= @addralign
        @link = elf.sections.index(@link) if link.kind_of? Section
        @info = elf.sections.index(@info) if info.kind_of? Section
        super(elf)
end