# File metasm/exe_format/elf.rb, line 778 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
# File metasm/exe_format/elf.rb, line 734 def initialize @endianness = :little @list = [] super() end
# File metasm/exe_format/elf.rb, line 776 def <<(exe) @list << exe ; self end
# File metasm/exe_format/elf.rb, line 775 def [](i) AutoExe.decode(@list[i].encoded) if @list[i] end
# File metasm/exe_format/elf.rb, line 740 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
# File metasm/exe_format/elf.rb, line 726 def decode_byte(edata = @encoded) edata.decode_imm(:u8, @endianness) end
# File metasm/exe_format/elf.rb, line 728 def decode_qword(edata = @encoded) edata.decode_imm(:u64, @endianness) end
# File metasm/exe_format/elf.rb, line 727 def decode_word(edata = @encoded) edata.decode_imm(:u16, @endianness) end
# File metasm/exe_format/elf.rb, line 749 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
# File metasm/exe_format/elf.rb, line 723 def encode_byte(val) Expression[val].encode(:u8, @endianness) end
# File metasm/exe_format/elf.rb, line 725 def encode_qword(val) Expression[val].encode(:u64, @endianness) end
# File metasm/exe_format/elf.rb, line 724 def encode_word(val) Expression[val].encode(:u16, @endianness) end
# File metasm/exe_format/elf.rb, line 787 def shortname; 'fatelf'; end
# File metasm/exe_format/elf.rb, line 729 def sizeof_byte ; 1 ; end
# File metasm/exe_format/elf.rb, line 731 def sizeof_qword ; 8 ; end
# File metasm/exe_format/elf.rb, line 730 def sizeof_word ; 2 ; end