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