class Metasm::FatELF

Constants

MAGIC

Attributes

header[RW]
list[RW]

Public Class Methods

autoexe_load(*a) click to toggle source
Calls superclass method Metasm::ExeFormat.autoexe_load
# File metasm/exe_format/elf.rb, line 774
def self.autoexe_load(*a)
        fe = super(*a)
        fe.decode
        # TODO have a global callback or whatever to prompt the user
        # which file he wants to load in the dasm
        puts "FatELF: using 1st archive member" if $VERBOSE
        fe[0]
end
new() click to toggle source
Calls superclass method Metasm::ExeFormat.new
# File metasm/exe_format/elf.rb, line 730
def initialize
        @endianness = :little
        @list = []
        super()
end

Public Instance Methods

<<(exe) click to toggle source
# File metasm/exe_format/elf.rb, line 772
def <<(exe) @list << exe ; self end
[](i) click to toggle source
# File metasm/exe_format/elf.rb, line 771
def [](i) AutoExe.decode(@list[i].encoded) if @list[i] end
decode() click to toggle source
# File metasm/exe_format/elf.rb, line 736
def decode
        @header = Header.decode(self)
        @list = []
        @header.nfat_arch.times { @list << FatArch.decode(self) }
        @list.each { |e|
                e.encoded = @encoded[e.offset, e.size] || EncodedData.new
        }
end
decode_byte(edata = @encoded) click to toggle source
# File metasm/exe_format/elf.rb, line 722
def decode_byte(edata = @encoded)  edata.decode_imm(:u8,  @endianness) end
decode_qword(edata = @encoded) click to toggle source
# File metasm/exe_format/elf.rb, line 724
def decode_qword(edata = @encoded) edata.decode_imm(:u64, @endianness) end
decode_word(edata = @encoded) click to toggle source
# File metasm/exe_format/elf.rb, line 723
def decode_word(edata = @encoded)  edata.decode_imm(:u16, @endianness) end
encode() click to toggle source
# File metasm/exe_format/elf.rb, line 745
def encode
        @header ||= Header.new
        @encoded = @header.encode(self)
        @list.map! { |f|
                if f.kind_of? ExeFormat
                        e = f
                        f = FatArch.new
                        f.encoded = e.encode_string
                        h = e.header
                        f.machine, f.abi, f.abi_version, f.e_class, f.data =
                                h.machine, h.abi, h.abi_version, h.e_class, h.data
                end
                f.offset = new_label('fat_off')
                f.size = f.encoded.size
                @encoded << f.encode(self)
                f
        }
        bd = {}
        @list.each { |f|
                @encoded.align 4096
                bd[f.offset] = @encoded.length if f.offset.kind_of? String
                @encoded << f.encoded
        }
        @encoded.fixup! bd
end
encode_byte(val) click to toggle source
# File metasm/exe_format/elf.rb, line 719
def encode_byte(val)         Expression[val].encode(:u8,  @endianness) end
encode_qword(val) click to toggle source
# File metasm/exe_format/elf.rb, line 721
def encode_qword(val)        Expression[val].encode(:u64, @endianness) end
encode_word(val) click to toggle source
# File metasm/exe_format/elf.rb, line 720
def encode_word(val)         Expression[val].encode(:u16, @endianness) end
shortname() click to toggle source
# File metasm/exe_format/elf.rb, line 783
def shortname; 'fatelf'; end
sizeof_byte() click to toggle source
# File metasm/exe_format/elf.rb, line 725
def sizeof_byte ; 1 ; end
sizeof_qword() click to toggle source
# File metasm/exe_format/elf.rb, line 727
def sizeof_qword ; 8 ; end
sizeof_word() click to toggle source
# File metasm/exe_format/elf.rb, line 726
def sizeof_word ; 2 ; end