Commit 89c5c63d by devttys0

Fixed opcode module bugs.

parent 7c3ba831
...@@ -55,15 +55,19 @@ class Disassembler(object): ...@@ -55,15 +55,19 @@ class Disassembler(object):
return None return None
def disassemble_opcode(self, ins, data): def disassemble_opcode(self, ins, data):
if len(data) > self.OPCODE_INDEX:
ins.opcode = ord(data[self.OPCODE_INDEX]) & self.OPCODE_MASK ins.opcode = ord(data[self.OPCODE_INDEX]) & self.OPCODE_MASK
if ins.opcode in self.OPCODES: if ins.opcode in self.OPCODES:
ins.valid = True ins.valid = True
else: else:
ins.valid = False ins.valid = False
else:
ins.valid = False
def disassemble(self, data): def disassemble(self, data):
data = self.pre_processor(data)
ins = Instruction(size=self.INSTRUCTION_SIZE, endianess=self.ENDIANESS) ins = Instruction(size=self.INSTRUCTION_SIZE, endianess=self.ENDIANESS)
if data:
data = self.pre_processor(data)
self.disassemble_opcode(ins, data) self.disassemble_opcode(ins, data)
self.validate(ins) self.validate(ins)
return ins return ins
...@@ -202,7 +206,7 @@ class OpcodeValidator(Module): ...@@ -202,7 +206,7 @@ class OpcodeValidator(Module):
sequence_size = disassembler.MIN_INSTRUCTION_COUNT * disassembler.INSTRUCTION_SIZE sequence_size = disassembler.MIN_INSTRUCTION_COUNT * disassembler.INSTRUCTION_SIZE
if self.is_valid_sequence(disassembler, data[offset:offset+sequence_size]): if self.is_valid_sequence(disassembler, data[offset:offset+sequence_size]):
desc = self.build_description_string(disassembler) desc = self.build_description_string(disassembler)
self.result(description=desc, offset=offset, file=fp, display=self.config.verbose) self.result(description=desc, offset=(fp.tell()-dlen+offset), file=fp, display=self.config.verbose)
results[disassembler][j] += 1 results[disassembler][j] += 1
total_hits[j] += 1 total_hits[j] += 1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment