Log unimplemented instructions (issue 163) (#599)
* Remove double printing of exception. * Pretty print the unimplemented instruction raised by unicorn (UcError). * Raise exception after unimplemented instruction error logging. * Ensure the raised exception is actually a unicorn invalid instruction error. * Resolve conflict
This commit is contained in:
parent
481e41991d
commit
e50cc6b9b2
@ -9,6 +9,7 @@ from functools import wraps
|
|||||||
from itertools import islice, imap
|
from itertools import islice, imap
|
||||||
|
|
||||||
import capstone as cs
|
import capstone as cs
|
||||||
|
import unicorn
|
||||||
|
|
||||||
from .disasm import init_disassembler
|
from .disasm import init_disassembler
|
||||||
from ..smtlib import Expression, Bool, BitVec, Array, Operators, Constant
|
from ..smtlib import Expression, Bool, BitVec, Array, Operators, Constant
|
||||||
@ -844,6 +845,12 @@ class Cpu(Eventful):
|
|||||||
emu = UnicornEmulator(self)
|
emu = UnicornEmulator(self)
|
||||||
try:
|
try:
|
||||||
emu.emulate(insn)
|
emu.emulate(insn)
|
||||||
|
except unicorn.UcError as e:
|
||||||
|
if e.errno == unicorn.UC_ERR_INSN_INVALID:
|
||||||
|
text_bytes = ' '.join('%02x'%x for x in insn.bytes)
|
||||||
|
logger.error("Unimplemented instruction: 0x%016x:\t%s\t%s\t%s",
|
||||||
|
insn.address, text_bytes, insn.mnemonic, insn.op_str)
|
||||||
|
raise InstructionEmulationError(str(e))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise InstructionEmulationError(str(e))
|
raise InstructionEmulationError(str(e))
|
||||||
finally:
|
finally:
|
||||||
|
|||||||
@ -499,7 +499,6 @@ class Executor(Eventful):
|
|||||||
import traceback
|
import traceback
|
||||||
trace = traceback.format_exc()
|
trace = traceback.format_exc()
|
||||||
logger.error("Exception: %s\n%s", str(e), trace)
|
logger.error("Exception: %s\n%s", str(e), trace)
|
||||||
print "Exception: %s\n%s"%( str(e), trace)
|
|
||||||
#Notify this worker is done
|
#Notify this worker is done
|
||||||
self._publish('will_terminate_state', current_state, current_state_id, e)
|
self._publish('will_terminate_state', current_state, current_state_id, e)
|
||||||
current_state = None
|
current_state = None
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user