class Metasm::SWF

Constants

CHUNK_TYPE

Attributes

chunks[RW]
endianness[RW]
header[RW]
signature[RW]
version[RW]

Public Class Methods

new(cpu = nil) click to toggle source
Calls superclass method Metasm::ExeFormat::new
# File metasm/exe_format/swf.rb, line 174
def initialize(cpu = nil)
        @endianness = :little
        @header = Header.new
        @chunks = []
        super(cpu)
end

Public Instance Methods

decode() click to toggle source
# File metasm/exe_format/swf.rb, line 198
def decode
        decode_header
        while @encoded.ptr < @data_length
                @chunks << Chunk.decode(self)
        end
end
decode_f16(edata=@encoded) click to toggle source
# File metasm/exe_format/swf.rb, line 160
def decode_f16(edata=@encoded) edata.decode_imm(:i16, @endianness)/256.0 end
decode_f32(edata=@encoded) click to toggle source
# File metasm/exe_format/swf.rb, line 161
def decode_f32(edata=@encoded) edata.decode_imm(:i32, @endianness)/65536.0 end
decode_header() click to toggle source
# File metasm/exe_format/swf.rb, line 181
def decode_header
        @signature = @encoded.read(3)
        @version = decode_u8
        @data_length = decode_u32
        case @signature
        when 'FWS'
        when 'CWS'
                # data_length = uncompressed data length
                data = @encoded.read(@encoded.length-8)
                data = Zlib::Inflate.inflate(data)
                @encoded = EncodedData.new(data)
        else raise InvalidExeFormat, "Bad signature #{@signature.inspect}"
        end
        @data_length = [@data_length, @encoded.length].min
        @header = Header.decode(self)
end
decode_u16(edata=@encoded) click to toggle source
# File metasm/exe_format/swf.rb, line 158
def decode_u16(edata=@encoded) edata.decode_imm(:u16, @endianness) end
decode_u32(edata=@encoded) click to toggle source
# File metasm/exe_format/swf.rb, line 159
def decode_u32(edata=@encoded) edata.decode_imm(:u32, @endianness) end
decode_u8( edata=@encoded) click to toggle source
# File metasm/exe_format/swf.rb, line 157
def decode_u8( edata=@encoded) edata.decode_imm(:u8,  @endianness) end
encode_f16(w) click to toggle source
# File metasm/exe_format/swf.rb, line 165
def encode_f16(w) Expression[(w*256).to_i].encode(:u16, @endianness) end
encode_f32(w) click to toggle source
# File metasm/exe_format/swf.rb, line 166
def encode_f32(w) Expression[(w*65536).to_i].encode(:u32, @endianness) end
encode_u16(w) click to toggle source
# File metasm/exe_format/swf.rb, line 163
def encode_u16(w) Expression[w].encode(:u16, @endianness) end
encode_u32(w) click to toggle source
# File metasm/exe_format/swf.rb, line 164
def encode_u32(w) Expression[w].encode(:u32, @endianness) end
encode_u8(w) click to toggle source
# File metasm/exe_format/swf.rb, line 162
def encode_u8(w)  Expression[w].encode(:u8,  @endianness) end
sizeof_f16() click to toggle source
# File metasm/exe_format/swf.rb, line 170
def sizeof_f16 ; 2 ; end
sizeof_f32() click to toggle source
# File metasm/exe_format/swf.rb, line 171
def sizeof_f32 ; 4 ; end
sizeof_u16() click to toggle source
# File metasm/exe_format/swf.rb, line 168
def sizeof_u16 ; 2 ; end
sizeof_u32() click to toggle source
# File metasm/exe_format/swf.rb, line 169
def sizeof_u32 ; 4 ; end
sizeof_u8() click to toggle source
# File metasm/exe_format/swf.rb, line 167
def sizeof_u8 ; 1 ; end