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 788 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 744 def initialize @endianness = :little @list = [] super() end
Public Instance Methods
<<(exe)
click to toggle source
# File metasm/exe_format/elf.rb, line 786 def <<(exe) @list << exe ; self end
[](i)
click to toggle source
# File metasm/exe_format/elf.rb, line 785 def [](i) AutoExe.decode(@list[i].encoded) if @list[i] end
decode()
click to toggle source
# File metasm/exe_format/elf.rb, line 750 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 736 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 738 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 737 def decode_word(edata = @encoded) edata.decode_imm(:u16, @endianness) end
encode()
click to toggle source
# File metasm/exe_format/elf.rb, line 759 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 733 def encode_byte(val) Expression[val].encode(:u8, @endianness) end
encode_qword(val)
click to toggle source
# File metasm/exe_format/elf.rb, line 735 def encode_qword(val) Expression[val].encode(:u64, @endianness) end
encode_word(val)
click to toggle source
# File metasm/exe_format/elf.rb, line 734 def encode_word(val) Expression[val].encode(:u16, @endianness) end
shortname()
click to toggle source
# File metasm/exe_format/elf.rb, line 797 def shortname; 'fatelf'; end
sizeof_byte()
click to toggle source
# File metasm/exe_format/elf.rb, line 739 def sizeof_byte ; 1 ; end
sizeof_qword()
click to toggle source
# File metasm/exe_format/elf.rb, line 741 def sizeof_qword ; 8 ; end
sizeof_word()
click to toggle source
# File metasm/exe_format/elf.rb, line 740 def sizeof_word ; 2 ; end