You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Executing invalid instructions crashes unicorn2, this got partially fixed with #1842.
On the dev branch executing the following opcodes "F0 38", "F0 39", "F0 A6", "F0 A7" still results in a crash, unicorn 1.0.3 doesn't crash.
I'm emulating larger binaries, and my main issue is that the code branches to these invalid instructions and unicorn crashes before the code_hook is being executed. Is there a way for me to get the next instruction pointer without executing the actual instruction, so that I could check if the instruction is invalid and stop the emulation before unicorn crashes?
from unicorn import *
from unicorn.x86_const import *
import struct
def code_hook(mu, access, address, size, value, user_data):
return True
for p in [61496, 61497, 61606, 61607, 65496, 65497, 65498, 65499, 65500, 65501, 65502, 65503, 65512, 65513, 65514, 65515, 65516, 65517, 65518, 65519]:
#on dev these still crash unicorn
if p in [61496, 61497, 61606, 61607]:
continue
uc = unicorn.Uc(UC_ARCH_X86, UC_MODE_32)
uc.hook_add(UC_HOOK_MEM_READ, code_hook)
uc.mem_map(0xFFFF0000, 0x2000)
uc.reg_write(UC_X86_REG_ESP, 0xFFFF1000)
uc.reg_write(UC_X86_REG_EBP, 0xFFFF1000)
addr = 0x1000
code = struct.pack('>H',p)
uc.mem_map(0, 0x10000)
uc.mem_write(addr, code)
print(p, code)
try:
uc.emu_start(addr, addr + len(code), count=2)
except:
pass
The text was updated successfully, but these errors were encountered:
Executing invalid instructions crashes unicorn2, this got partially fixed with #1842.
On the dev branch executing the following opcodes "F0 38", "F0 39", "F0 A6", "F0 A7" still results in a crash, unicorn 1.0.3 doesn't crash.
I'm emulating larger binaries, and my main issue is that the code branches to these invalid instructions and unicorn crashes before the code_hook is being executed. Is there a way for me to get the next instruction pointer without executing the actual instruction, so that I could check if the instruction is invalid and stop the emulation before unicorn crashes?
The text was updated successfully, but these errors were encountered: