mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-22 20:25:38 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
2998c125de
|
@ -32,7 +32,11 @@ Tim "diff" Strazzere
|
|||
WanderingGlitch of the Zero Day Initiative
|
||||
Sascha Schirra
|
||||
François Serman
|
||||
|
||||
Sean Heelan
|
||||
Luke Burnett
|
||||
Parker Thompson
|
||||
Daniel Godas-Lopez
|
||||
Antonio "s4tan" Parata
|
||||
|
||||
Contributors (in no particular order)
|
||||
=====================================
|
||||
|
|
7
Makefile
7
Makefile
|
@ -287,6 +287,13 @@ header: FORCE
|
|||
$(shell python qemu/header_gen.py $(var) > qemu/$(var).h;))
|
||||
@echo "Generated headers for $(TARGETS)."
|
||||
|
||||
|
||||
uninstall:
|
||||
rm -rf $(INCDIR)/$(LIBNAME)
|
||||
rm -f $(LIBDIR)/lib$(LIBNAME).*
|
||||
rm -f $(PKGCFGDIR)/$(LIBNAME).pc
|
||||
|
||||
|
||||
clean:
|
||||
$(MAKE) -C qemu clean
|
||||
rm -rf *.d *.o
|
||||
|
|
|
@ -50,7 +50,7 @@ def gen(lang):
|
|||
if line == '' or line.startswith('//'):
|
||||
continue
|
||||
|
||||
if not line.startswith(prefix.upper()):
|
||||
if not line.startswith("UC_" + prefix.upper()):
|
||||
continue
|
||||
|
||||
tmp = line.strip().split(',')
|
||||
|
@ -59,7 +59,7 @@ def gen(lang):
|
|||
if not t or t.startswith('//'): continue
|
||||
f = re.split('\s+', t)
|
||||
|
||||
if f[0].startswith(prefix.upper()):
|
||||
if f[0].startswith("UC_" + prefix.upper()):
|
||||
if len(f) > 1 and f[1] not in '//=':
|
||||
print("Error: Unable to convert %s" % f)
|
||||
continue
|
||||
|
|
|
@ -38,9 +38,9 @@ def test_arm():
|
|||
mu.mem_write(ADDRESS, ARM_CODE)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(ARM_REG_R0, 0x1234)
|
||||
mu.reg_write(ARM_REG_R2, 0x6789)
|
||||
mu.reg_write(ARM_REG_R3, 0x3333)
|
||||
mu.reg_write(UC_ARM_REG_R0, 0x1234)
|
||||
mu.reg_write(UC_ARM_REG_R2, 0x6789)
|
||||
mu.reg_write(UC_ARM_REG_R3, 0x3333)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -54,8 +54,8 @@ def test_arm():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r0 = mu.reg_read(ARM_REG_R0)
|
||||
r1 = mu.reg_read(ARM_REG_R1)
|
||||
r0 = mu.reg_read(UC_ARM_REG_R0)
|
||||
r1 = mu.reg_read(UC_ARM_REG_R1)
|
||||
print(">>> R0 = 0x%x" %r0)
|
||||
print(">>> R1 = 0x%x" %r1)
|
||||
|
||||
|
@ -76,7 +76,7 @@ def test_thumb():
|
|||
mu.mem_write(ADDRESS, THUMB_CODE)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(ARM_REG_SP, 0x1234)
|
||||
mu.reg_write(UC_ARM_REG_SP, 0x1234)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -90,7 +90,7 @@ def test_thumb():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
sp = mu.reg_read(ARM_REG_SP)
|
||||
sp = mu.reg_read(UC_ARM_REG_SP)
|
||||
print(">>> SP = 0x%x" %sp)
|
||||
|
||||
except UcError as e:
|
||||
|
|
|
@ -38,9 +38,9 @@ def test_arm64():
|
|||
mu.mem_write(ADDRESS, ARM64_CODE)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(ARM64_REG_X11, 0x1234)
|
||||
mu.reg_write(ARM64_REG_X13, 0x6789)
|
||||
mu.reg_write(ARM64_REG_X15, 0x3333)
|
||||
mu.reg_write(UC_ARM64_REG_X11, 0x1234)
|
||||
mu.reg_write(UC_ARM64_REG_X13, 0x6789)
|
||||
mu.reg_write(UC_ARM64_REG_X15, 0x3333)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -54,9 +54,9 @@ def test_arm64():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
x11 = mu.reg_read(ARM64_REG_X11)
|
||||
x13 = mu.reg_read(ARM64_REG_X13)
|
||||
x15 = mu.reg_read(ARM64_REG_X15)
|
||||
x11 = mu.reg_read(UC_ARM64_REG_X11)
|
||||
x13 = mu.reg_read(UC_ARM64_REG_X13)
|
||||
x15 = mu.reg_read(UC_ARM64_REG_X15)
|
||||
print(">>> X11 = 0x%x" %x11)
|
||||
|
||||
except UcError as e:
|
||||
|
|
|
@ -37,7 +37,7 @@ def test_m68k():
|
|||
mu.mem_write(ADDRESS, M68K_CODE)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(M68K_REG_D3, 0x1234)
|
||||
mu.reg_write(UC_M68K_REG_D3, 0x1234)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -51,7 +51,7 @@ def test_m68k():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
d3 = mu.reg_read(M68K_REG_D3)
|
||||
d3 = mu.reg_read(UC_M68K_REG_D3)
|
||||
print(">>> D3 = 0x%x" %d3)
|
||||
|
||||
except UcError as e:
|
||||
|
|
|
@ -39,7 +39,7 @@ def test_mips_eb():
|
|||
mu.mem_write(ADDRESS, MIPS_CODE_EB)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(MIPS_REG_1, 0x6789)
|
||||
mu.reg_write(UC_MIPS_REG_1, 0x6789)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -53,7 +53,7 @@ def test_mips_eb():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r1 = mu.reg_read(MIPS_REG_1)
|
||||
r1 = mu.reg_read(UC_MIPS_REG_1)
|
||||
print(">>> r1 = 0x%x" %r1)
|
||||
|
||||
except UcError as e:
|
||||
|
@ -74,7 +74,7 @@ def test_mips_el():
|
|||
mu.mem_write(ADDRESS, MIPS_CODE_EL)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(MIPS_REG_1, 0x6789)
|
||||
mu.reg_write(UC_MIPS_REG_1, 0x6789)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -88,7 +88,7 @@ def test_mips_el():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r1 = mu.reg_read(MIPS_REG_1)
|
||||
r1 = mu.reg_read(UC_MIPS_REG_1)
|
||||
print(">>> r1 = 0x%x" %r1)
|
||||
|
||||
except UcError as e:
|
||||
|
|
|
@ -173,11 +173,11 @@ def hook_intr(uc, intno, user_data):
|
|||
if intno != 0x80:
|
||||
return
|
||||
|
||||
eax = uc.reg_read(X86_REG_EAX)
|
||||
ebx = uc.reg_read(X86_REG_EBX)
|
||||
ecx = uc.reg_read(X86_REG_ECX)
|
||||
edx = uc.reg_read(X86_REG_EDX)
|
||||
eip = uc.reg_read(X86_REG_EIP)
|
||||
eax = uc.reg_read(UC_X86_REG_EAX)
|
||||
ebx = uc.reg_read(UC_X86_REG_EBX)
|
||||
ecx = uc.reg_read(UC_X86_REG_ECX)
|
||||
edx = uc.reg_read(UC_X86_REG_EDX)
|
||||
eip = uc.reg_read(UC_X86_REG_EIP)
|
||||
|
||||
# print(">>> INTERRUPT %d" % eax)
|
||||
|
||||
|
@ -217,7 +217,7 @@ def hook_intr(uc, intno, user_data):
|
|||
filename = uc.mem_read(filename_addr, FILENAME_MAX_LEN)
|
||||
|
||||
dummy_fd = id_gen.next()
|
||||
uc.reg_write(X86_REG_EAX, dummy_fd)
|
||||
uc.reg_write(UC_X86_REG_EAX, dummy_fd)
|
||||
|
||||
msg = "open file (filename=%s flags=%d mode=%d) with fd(%d)" % (bytearray_to_string(filename), flags, mode, dummy_fd)
|
||||
|
||||
|
@ -234,8 +234,8 @@ def hook_intr(uc, intno, user_data):
|
|||
print(">>> SYS_DUP2 oldfd=%d newfd=%d" % (ebx, ecx))
|
||||
elif eax == 102: # sys_socketcall
|
||||
# ref: http://www.skyfree.org/linux/kernel_network/socket.html
|
||||
call = uc.reg_read(X86_REG_EBX)
|
||||
args = uc.reg_read(X86_REG_ECX)
|
||||
call = uc.reg_read(UC_X86_REG_EBX)
|
||||
args = uc.reg_read(UC_X86_REG_ECX)
|
||||
|
||||
buf = uc.mem_read(args, SOCKETCALL_MAX_ARGS*SIZE_REG)
|
||||
args = struct.unpack("<" + "I"*SOCKETCALL_MAX_ARGS, buf)
|
||||
|
@ -249,7 +249,7 @@ def hook_intr(uc, intno, user_data):
|
|||
protocol = args[2]
|
||||
|
||||
dummy_fd = id_gen.next()
|
||||
uc.reg_write(X86_REG_EAX, dummy_fd)
|
||||
uc.reg_write(UC_X86_REG_EAX, dummy_fd)
|
||||
|
||||
if family == 2: # AF_INET
|
||||
|
||||
|
@ -353,7 +353,7 @@ def test_i386(code):
|
|||
mu.mem_write(ADDRESS, code)
|
||||
|
||||
# initialize stack
|
||||
mu.reg_write(X86_REG_ESP, ADDRESS + 0x200000)
|
||||
mu.reg_write(UC_X86_REG_ESP, ADDRESS + 0x200000)
|
||||
|
||||
# tracing all instructions with customized callback
|
||||
# mu.hook_add(UC_HOOK_CODE, hook_code)
|
||||
|
|
|
@ -37,9 +37,9 @@ def test_sparc():
|
|||
mu.mem_write(ADDRESS, SPARC_CODE)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(SPARC_REG_G1, 0x1230)
|
||||
mu.reg_write(SPARC_REG_G2, 0x6789)
|
||||
mu.reg_write(SPARC_REG_G3, 0x5555)
|
||||
mu.reg_write(UC_SPARC_REG_G1, 0x1230)
|
||||
mu.reg_write(UC_SPARC_REG_G2, 0x6789)
|
||||
mu.reg_write(UC_SPARC_REG_G3, 0x5555)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -53,7 +53,7 @@ def test_sparc():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
g3 = mu.reg_read(SPARC_REG_G3)
|
||||
g3 = mu.reg_read(UC_SPARC_REG_G3)
|
||||
print(">>> G3 = 0x%x" %g3)
|
||||
|
||||
except UcError as e:
|
||||
|
|
|
@ -12,6 +12,7 @@ X86_CODE32_MEM_READ = b"\x8B\x0D\xAA\xAA\xAA\xAA\x41\x4a" # mov ecx,[0xaaaaaaaa]
|
|||
X86_CODE32_MEM_WRITE = b"\x89\x0D\xAA\xAA\xAA\xAA\x41\x4a" # mov [0xaaaaaaaa], ecx; INC ecx; dec edx
|
||||
X86_CODE64 = b"\x41\xBC\x3B\xB0\x28\x2A\x49\x0F\xC9\x90\x4D\x0F\xAD\xCF\x49\x87\xFD\x90\x48\x81\xD2\x8A\xCE\x77\x35\x48\xF7\xD9\x4D\x29\xF4\x49\x81\xC9\xF6\x8A\xC6\x53\x4D\x87\xED\x48\x0F\xAD\xD2\x49\xF7\xD4\x48\xF7\xE1\x4D\x19\xC5\x4D\x89\xC5\x48\xF7\xD6\x41\xB8\x4F\x8D\x6B\x59\x4D\x87\xD0\x68\x6A\x1E\x09\x3C\x59"
|
||||
X86_CODE32_INOUT = b"\x41\xE4\x3F\x4a\xE6\x46\x43" # INC ecx; IN AL, 0x3f; DEC edx; OUT 0x46, AL; INC ebx
|
||||
X86_CODE64_SYSCALL = '\x0f\x05' # SYSCALL
|
||||
|
||||
# memory address where emulation starts
|
||||
ADDRESS = 0x1000000
|
||||
|
@ -25,7 +26,7 @@ def hook_block(uc, address, size, user_data):
|
|||
# callback for tracing instructions
|
||||
def hook_code(uc, address, size, user_data):
|
||||
print(">>> Tracing instruction at 0x%x, instruction size = %u" %(address, size))
|
||||
#eip = uc.reg_read(X86_REG_EIP)
|
||||
#eip = uc.reg_read(UC_X86_REG_EIP)
|
||||
#print(">>> EIP = 0x%x" %(eip))
|
||||
|
||||
|
||||
|
@ -55,7 +56,7 @@ def hook_mem_access(uc, access, address, size, value, user_data):
|
|||
|
||||
# callback for IN instruction
|
||||
def hook_in(uc, port, size, user_data):
|
||||
eip = uc.reg_read(X86_REG_EIP)
|
||||
eip = uc.reg_read(UC_X86_REG_EIP)
|
||||
print("--- reading from port 0x%x, size: %u, address: 0x%x" %(port, size, eip))
|
||||
if size == 1:
|
||||
# read 1 byte to AL
|
||||
|
@ -72,20 +73,20 @@ def hook_in(uc, port, size, user_data):
|
|||
|
||||
# callback for OUT instruction
|
||||
def hook_out(uc, port, size, value, user_data):
|
||||
eip = uc.reg_read(X86_REG_EIP)
|
||||
eip = uc.reg_read(UC_X86_REG_EIP)
|
||||
print("--- writing to port 0x%x, size: %u, value: 0x%x, address: 0x%x" %(port, size, value, eip))
|
||||
|
||||
# confirm that value is indeed the value of AL/AX/EAX
|
||||
v = 0
|
||||
if size == 1:
|
||||
# read 1 byte in AL
|
||||
v = uc.reg_read(X86_REG_AL)
|
||||
v = uc.reg_read(UC_X86_REG_AL)
|
||||
if size == 2:
|
||||
# read 2 bytes in AX
|
||||
v = uc.reg_read(X86_REG_AX)
|
||||
v = uc.reg_read(UC_X86_REG_AX)
|
||||
if size == 4:
|
||||
# read 4 bytes in EAX
|
||||
v = uc.reg_read(X86_REG_EAX)
|
||||
v = uc.reg_read(UC_X86_REG_EAX)
|
||||
|
||||
print("--- register value = 0x%x" %v)
|
||||
|
||||
|
@ -104,8 +105,8 @@ def test_i386():
|
|||
mu.mem_write(ADDRESS, X86_CODE32)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(X86_REG_EDX, 0x7890)
|
||||
mu.reg_write(UC_X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(UC_X86_REG_EDX, 0x7890)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -119,8 +120,8 @@ def test_i386():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r_ecx = mu.reg_read(X86_REG_ECX)
|
||||
r_edx = mu.reg_read(X86_REG_EDX)
|
||||
r_ecx = mu.reg_read(UC_X86_REG_ECX)
|
||||
r_edx = mu.reg_read(UC_X86_REG_EDX)
|
||||
print(">>> ECX = 0x%x" %r_ecx)
|
||||
print(">>> EDX = 0x%x" %r_edx)
|
||||
|
||||
|
@ -148,8 +149,8 @@ def test_i386_loop():
|
|||
mu.mem_write(ADDRESS, X86_CODE32_LOOP)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(X86_REG_EDX, 0x7890)
|
||||
mu.reg_write(UC_X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(UC_X86_REG_EDX, 0x7890)
|
||||
|
||||
# emulate machine code in infinite time
|
||||
mu.emu_start(ADDRESS, ADDRESS + len(X86_CODE32_LOOP), 2 * UC_SECOND_SCALE)
|
||||
|
@ -157,8 +158,8 @@ def test_i386_loop():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r_ecx = mu.reg_read(X86_REG_ECX)
|
||||
r_edx = mu.reg_read(X86_REG_EDX)
|
||||
r_ecx = mu.reg_read(UC_X86_REG_ECX)
|
||||
r_edx = mu.reg_read(UC_X86_REG_EDX)
|
||||
print(">>> ECX = 0x%x" %r_ecx)
|
||||
print(">>> EDX = 0x%x" %r_edx)
|
||||
|
||||
|
@ -179,8 +180,8 @@ def test_i386_invalid_mem_read():
|
|||
mu.mem_write(ADDRESS, X86_CODE32_MEM_READ)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(X86_REG_EDX, 0x7890)
|
||||
mu.reg_write(UC_X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(UC_X86_REG_EDX, 0x7890)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -197,8 +198,8 @@ def test_i386_invalid_mem_read():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r_ecx = mu.reg_read(X86_REG_ECX)
|
||||
r_edx = mu.reg_read(X86_REG_EDX)
|
||||
r_ecx = mu.reg_read(UC_X86_REG_ECX)
|
||||
r_edx = mu.reg_read(UC_X86_REG_EDX)
|
||||
print(">>> ECX = 0x%x" %r_ecx)
|
||||
print(">>> EDX = 0x%x" %r_edx)
|
||||
|
||||
|
@ -219,8 +220,8 @@ def test_i386_invalid_mem_write():
|
|||
mu.mem_write(ADDRESS, X86_CODE32_MEM_WRITE)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(X86_REG_EDX, 0x7890)
|
||||
mu.reg_write(UC_X86_REG_ECX, 0x1234)
|
||||
mu.reg_write(UC_X86_REG_EDX, 0x7890)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
#mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -240,8 +241,8 @@ def test_i386_invalid_mem_write():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r_ecx = mu.reg_read(X86_REG_ECX)
|
||||
r_edx = mu.reg_read(X86_REG_EDX)
|
||||
r_ecx = mu.reg_read(UC_X86_REG_ECX)
|
||||
r_edx = mu.reg_read(UC_X86_REG_EDX)
|
||||
print(">>> ECX = 0x%x" %r_ecx)
|
||||
print(">>> EDX = 0x%x" %r_edx)
|
||||
|
||||
|
@ -279,8 +280,8 @@ def test_i386_inout():
|
|||
mu.mem_write(ADDRESS, X86_CODE32_INOUT)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(X86_REG_EAX, 0x1234)
|
||||
mu.reg_write(X86_REG_ECX, 0x6789)
|
||||
mu.reg_write(UC_X86_REG_EAX, 0x1234)
|
||||
mu.reg_write(UC_X86_REG_ECX, 0x6789)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -289,8 +290,8 @@ def test_i386_inout():
|
|||
mu.hook_add(UC_HOOK_CODE, hook_code)
|
||||
|
||||
# handle IN & OUT instruction
|
||||
mu.hook_add(UC_HOOK_INSN, hook_in, None, X86_INS_IN)
|
||||
mu.hook_add(UC_HOOK_INSN, hook_out, None, X86_INS_OUT)
|
||||
mu.hook_add(UC_HOOK_INSN, hook_in, None, UC_X86_INS_IN)
|
||||
mu.hook_add(UC_HOOK_INSN, hook_out, None, UC_X86_INS_OUT)
|
||||
|
||||
# emulate machine code in infinite time
|
||||
mu.emu_start(ADDRESS, ADDRESS + len(X86_CODE32_INOUT))
|
||||
|
@ -298,8 +299,8 @@ def test_i386_inout():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
r_ecx = mu.reg_read(X86_REG_ECX)
|
||||
r_eax = mu.reg_read(X86_REG_EAX)
|
||||
r_ecx = mu.reg_read(UC_X86_REG_ECX)
|
||||
r_eax = mu.reg_read(UC_X86_REG_EAX)
|
||||
print(">>> EAX = 0x%x" %r_eax)
|
||||
print(">>> ECX = 0x%x" %r_ecx)
|
||||
except UcError as e:
|
||||
|
@ -319,23 +320,23 @@ def test_x86_64():
|
|||
mu.mem_write(ADDRESS, X86_CODE64)
|
||||
|
||||
# initialize machine registers
|
||||
mu.reg_write(X86_REG_RAX, 0x71f3029efd49d41d)
|
||||
mu.reg_write(X86_REG_RBX, 0xd87b45277f133ddb)
|
||||
mu.reg_write(X86_REG_RCX, 0xab40d1ffd8afc461)
|
||||
mu.reg_write(X86_REG_RDX, 0x919317b4a733f01)
|
||||
mu.reg_write(X86_REG_RSI, 0x4c24e753a17ea358)
|
||||
mu.reg_write(X86_REG_RDI, 0xe509a57d2571ce96)
|
||||
mu.reg_write(X86_REG_R8, 0xea5b108cc2b9ab1f)
|
||||
mu.reg_write(X86_REG_R9, 0x19ec097c8eb618c1)
|
||||
mu.reg_write(X86_REG_R10, 0xec45774f00c5f682)
|
||||
mu.reg_write(X86_REG_R11, 0xe17e9dbec8c074aa)
|
||||
mu.reg_write(X86_REG_R12, 0x80f86a8dc0f6d457)
|
||||
mu.reg_write(X86_REG_R13, 0x48288ca5671c5492)
|
||||
mu.reg_write(X86_REG_R14, 0x595f72f6e4017f6e)
|
||||
mu.reg_write(X86_REG_R15, 0x1efd97aea331cccc)
|
||||
mu.reg_write(UC_X86_REG_RAX, 0x71f3029efd49d41d)
|
||||
mu.reg_write(UC_X86_REG_RBX, 0xd87b45277f133ddb)
|
||||
mu.reg_write(UC_X86_REG_RCX, 0xab40d1ffd8afc461)
|
||||
mu.reg_write(UC_X86_REG_RDX, 0x919317b4a733f01)
|
||||
mu.reg_write(UC_X86_REG_RSI, 0x4c24e753a17ea358)
|
||||
mu.reg_write(UC_X86_REG_RDI, 0xe509a57d2571ce96)
|
||||
mu.reg_write(UC_X86_REG_R8, 0xea5b108cc2b9ab1f)
|
||||
mu.reg_write(UC_X86_REG_R9, 0x19ec097c8eb618c1)
|
||||
mu.reg_write(UC_X86_REG_R10, 0xec45774f00c5f682)
|
||||
mu.reg_write(UC_X86_REG_R11, 0xe17e9dbec8c074aa)
|
||||
mu.reg_write(UC_X86_REG_R12, 0x80f86a8dc0f6d457)
|
||||
mu.reg_write(UC_X86_REG_R13, 0x48288ca5671c5492)
|
||||
mu.reg_write(UC_X86_REG_R14, 0x595f72f6e4017f6e)
|
||||
mu.reg_write(UC_X86_REG_R15, 0x1efd97aea331cccc)
|
||||
|
||||
# setup stack
|
||||
mu.reg_write(X86_REG_RSP, ADDRESS + 0x200000)
|
||||
mu.reg_write(UC_X86_REG_RSP, ADDRESS + 0x200000)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -358,20 +359,20 @@ def test_x86_64():
|
|||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
rax = mu.reg_read(X86_REG_RAX)
|
||||
rbx = mu.reg_read(X86_REG_RBX)
|
||||
rcx = mu.reg_read(X86_REG_RCX)
|
||||
rdx = mu.reg_read(X86_REG_RDX)
|
||||
rsi = mu.reg_read(X86_REG_RSI)
|
||||
rdi = mu.reg_read(X86_REG_RDI)
|
||||
r8 = mu.reg_read(X86_REG_R8)
|
||||
r9 = mu.reg_read(X86_REG_R9)
|
||||
r10 = mu.reg_read(X86_REG_R10)
|
||||
r11 = mu.reg_read(X86_REG_R11)
|
||||
r12 = mu.reg_read(X86_REG_R12)
|
||||
r13 = mu.reg_read(X86_REG_R13)
|
||||
r14 = mu.reg_read(X86_REG_R14)
|
||||
r15 = mu.reg_read(X86_REG_R15)
|
||||
rax = mu.reg_read(UC_X86_REG_RAX)
|
||||
rbx = mu.reg_read(UC_X86_REG_RBX)
|
||||
rcx = mu.reg_read(UC_X86_REG_RCX)
|
||||
rdx = mu.reg_read(UC_X86_REG_RDX)
|
||||
rsi = mu.reg_read(UC_X86_REG_RSI)
|
||||
rdi = mu.reg_read(UC_X86_REG_RDI)
|
||||
r8 = mu.reg_read(UC_X86_REG_R8)
|
||||
r9 = mu.reg_read(UC_X86_REG_R9)
|
||||
r10 = mu.reg_read(UC_X86_REG_R10)
|
||||
r11 = mu.reg_read(UC_X86_REG_R11)
|
||||
r12 = mu.reg_read(UC_X86_REG_R12)
|
||||
r13 = mu.reg_read(UC_X86_REG_R13)
|
||||
r14 = mu.reg_read(UC_X86_REG_R14)
|
||||
r15 = mu.reg_read(UC_X86_REG_R15)
|
||||
|
||||
print(">>> RAX = %x" %rax)
|
||||
print(">>> RBX = %x" %rbx)
|
||||
|
@ -395,6 +396,47 @@ def test_x86_64():
|
|||
print("ERROR: %s" % e)
|
||||
|
||||
|
||||
def test_x86_64_syscall():
|
||||
print("Emulate x86_64 code with 'syscall' instruction")
|
||||
try:
|
||||
# Initialize emulator in X86-64bit mode
|
||||
mu = Uc(UC_ARCH_X86, UC_MODE_64)
|
||||
|
||||
# map 2MB memory for this emulation
|
||||
mu.mem_map(ADDRESS, 2 * 1024 * 1024)
|
||||
|
||||
# write machine code to be emulated to memory
|
||||
mu.mem_write(ADDRESS, X86_CODE64_SYSCALL)
|
||||
|
||||
def hook_syscall(mu, user_data):
|
||||
rax = mu.reg_read(UC_X86_REG_RAX)
|
||||
if rax == 0x100:
|
||||
mu.reg_write(UC_X86_REG_RAX, 0x200)
|
||||
else:
|
||||
print('ERROR: was not expecting rax=%d in syscall' % rax)
|
||||
|
||||
# hook interrupts for syscall
|
||||
mu.hook_add(UC_HOOK_INSN, hook_syscall, None, UC_X86_INS_SYSCALL)
|
||||
|
||||
# syscall handler is expecting rax=0x100
|
||||
mu.reg_write(UC_X86_REG_RAX, 0x100)
|
||||
|
||||
try:
|
||||
# emulate machine code in infinite time
|
||||
mu.emu_start(ADDRESS, ADDRESS + len(X86_CODE64_SYSCALL))
|
||||
except UcError as e:
|
||||
print("ERROR: %s" % e)
|
||||
|
||||
# now print out some registers
|
||||
print(">>> Emulation done. Below is the CPU context")
|
||||
|
||||
rax = mu.reg_read(UC_X86_REG_RAX)
|
||||
print(">>> RAX = 0x%x" % rax)
|
||||
|
||||
except UcError as e:
|
||||
print("ERROR: %s" % e)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_i386()
|
||||
print("=" * 20)
|
||||
|
@ -407,3 +449,5 @@ if __name__ == '__main__':
|
|||
test_i386_inout()
|
||||
print("=" * 20)
|
||||
test_x86_64()
|
||||
print("=" * 20)
|
||||
test_x86_64_syscall()
|
||||
|
|
|
@ -40,16 +40,16 @@ def hook_intr(uc, intno, user_data):
|
|||
uc.emu_stop()
|
||||
return
|
||||
|
||||
eax = uc.reg_read(X86_REG_EAX)
|
||||
eip = uc.reg_read(X86_REG_EIP)
|
||||
eax = uc.reg_read(UC_X86_REG_EAX)
|
||||
eip = uc.reg_read(UC_X86_REG_EIP)
|
||||
if eax == 1: # sys_exit
|
||||
print(">>> 0x%x: interrupt 0x%x, EAX = 0x%x" %(eip, intno, eax))
|
||||
uc.emu_stop()
|
||||
elif eax == 4: # sys_write
|
||||
# ECX = buffer address
|
||||
ecx = uc.reg_read(X86_REG_ECX)
|
||||
ecx = uc.reg_read(UC_X86_REG_ECX)
|
||||
# EDX = buffer size
|
||||
edx = uc.reg_read(X86_REG_EDX)
|
||||
edx = uc.reg_read(UC_X86_REG_EDX)
|
||||
|
||||
try:
|
||||
buf = uc.mem_read(ecx, edx)
|
||||
|
@ -65,6 +65,12 @@ def hook_intr(uc, intno, user_data):
|
|||
print(">>> 0x%x: interrupt 0x%x, EAX = 0x%x" %(eip, intno, eax))
|
||||
|
||||
|
||||
def hook_syscall(mu, user_data):
|
||||
rax = mu.reg_read(UC_X86_REG_RAX)
|
||||
print(">>> got SYSCALL with RAX = 0x%x" %(rax))
|
||||
mu.emu_stop()
|
||||
|
||||
|
||||
# Test X86 32 bit
|
||||
def test_i386(mode, code):
|
||||
print("Emulate x86 code")
|
||||
|
@ -79,7 +85,7 @@ def test_i386(mode, code):
|
|||
mu.mem_write(ADDRESS, code)
|
||||
|
||||
# initialize stack
|
||||
mu.reg_write(X86_REG_ESP, ADDRESS + 0x200000)
|
||||
mu.reg_write(UC_X86_REG_ESP, ADDRESS + 0x200000)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block)
|
||||
|
@ -90,6 +96,9 @@ def test_i386(mode, code):
|
|||
# handle interrupt ourself
|
||||
mu.hook_add(UC_HOOK_INTR, hook_intr)
|
||||
|
||||
# handle SYSCALL
|
||||
mu.hook_add(UC_HOOK_INSN, hook_syscall, None, UC_X86_INS_SYSCALL)
|
||||
|
||||
# emulate machine code in infinite time
|
||||
mu.emu_start(ADDRESS, ADDRESS + len(code))
|
||||
|
||||
|
@ -102,9 +111,9 @@ def test_i386(mode, code):
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
#test_i386(UC_MODE_32, X86_CODE32_SELF)
|
||||
#print("=" * 20)
|
||||
#test_i386(UC_MODE_32, X86_CODE32)
|
||||
#print("=" * 20)
|
||||
test_i386(UC_MODE_32, X86_CODE32_SELF)
|
||||
print("=" * 20)
|
||||
test_i386(UC_MODE_32, X86_CODE32)
|
||||
print("=" * 20)
|
||||
test_i386(UC_MODE_64, X86_CODE64) # FIXME
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ __all__ = [
|
|||
'Uc',
|
||||
|
||||
'uc_version',
|
||||
'uc_support',
|
||||
'uc_arch_supported',
|
||||
'version_bind',
|
||||
'debug',
|
||||
|
||||
|
@ -53,6 +53,7 @@ __all__ = [
|
|||
'UC_ERR_CODE_INVALID',
|
||||
'UC_ERR_HOOK',
|
||||
'UC_ERR_INSN_INVALID',
|
||||
'UC_ERR_MAP',
|
||||
|
||||
'UC_HOOK_INTR',
|
||||
'UC_HOOK_INSN',
|
||||
|
@ -122,6 +123,7 @@ UC_ERR_MEM_WRITE = 8 # Quit emulation due to invalid memory WRITE: uc_emu_st
|
|||
UC_ERR_CODE_INVALID = 9 # Quit emulation due to invalid code address: uc_emu_start()
|
||||
UC_ERR_HOOK = 10 # Invalid hook type: uc_hook_add()
|
||||
UC_ERR_INSN_INVALID = 11 # Invalid instruction
|
||||
UC_ERR_MAP = 12 # Invalid memory mapping
|
||||
|
||||
|
||||
# All type of hooks for uc_hook_add() API.
|
||||
|
@ -202,7 +204,7 @@ def _setup_prototype(lib, fname, restype, *argtypes):
|
|||
getattr(lib, fname).argtypes = argtypes
|
||||
|
||||
_setup_prototype(_uc, "uc_version", ctypes.c_int, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
|
||||
_setup_prototype(_uc, "uc_support", ctypes.c_bool, ctypes.c_int)
|
||||
_setup_prototype(_uc, "uc_arch_supported", ctypes.c_bool, ctypes.c_int)
|
||||
_setup_prototype(_uc, "uc_open", ctypes.c_int, ctypes.c_uint, ctypes.c_uint, ctypes.POINTER(ctypes.c_size_t))
|
||||
_setup_prototype(_uc, "uc_close", ctypes.c_int, ctypes.POINTER(ctypes.c_size_t))
|
||||
_setup_prototype(_uc, "uc_strerror", ctypes.c_char_p, ctypes.c_int)
|
||||
|
@ -231,6 +233,7 @@ UC_HOOK_INSN_IN_CB = ctypes.CFUNCTYPE(ctypes.c_uint32, ctypes.c_size_t, ctypes.c
|
|||
ctypes.c_int, ctypes.c_void_p)
|
||||
UC_HOOK_INSN_OUT_CB = ctypes.CFUNCTYPE(None, ctypes.c_size_t, ctypes.c_uint32, \
|
||||
ctypes.c_int, ctypes.c_uint32, ctypes.c_void_p)
|
||||
UC_HOOK_INSN_SYSCALL_CB = ctypes.CFUNCTYPE(None, ctypes.c_size_t, ctypes.c_void_p)
|
||||
|
||||
|
||||
# access to error code via @errno of UcError
|
||||
|
@ -256,8 +259,8 @@ def version_bind():
|
|||
|
||||
|
||||
# check to see if this engine supports a particular arch
|
||||
def uc_support(query):
|
||||
return _uc.uc_support(query)
|
||||
def uc_arch_supported(query):
|
||||
return _uc.uc_arch_supported(query)
|
||||
|
||||
|
||||
class Uc(object):
|
||||
|
@ -383,6 +386,12 @@ class Uc(object):
|
|||
cb(self, port, size, value, data)
|
||||
|
||||
|
||||
def _hook_insn_syscall_cb(self, handle, user_data):
|
||||
# call user's callback with self object
|
||||
(cb, data) = self._callbacks[user_data]
|
||||
cb(self, data)
|
||||
|
||||
|
||||
# add a hook
|
||||
def hook_add(self, htype, callback, user_data=None, arg1=1, arg2=0):
|
||||
_h2 = ctypes.c_size_t()
|
||||
|
@ -409,10 +418,12 @@ class Uc(object):
|
|||
cb, ctypes.cast(self._callback_count, ctypes.c_void_p))
|
||||
elif htype == UC_HOOK_INSN:
|
||||
insn = ctypes.c_int(arg1)
|
||||
if arg1 == x86_const.X86_INS_IN: # IN instruction
|
||||
if arg1 == x86_const.UC_X86_INS_IN: # IN instruction
|
||||
cb = ctypes.cast(UC_HOOK_INSN_IN_CB(self._hook_insn_in_cb), UC_HOOK_INSN_IN_CB)
|
||||
if arg1 == x86_const.X86_INS_OUT: # OUT instruction
|
||||
if arg1 == x86_const.UC_X86_INS_OUT: # OUT instruction
|
||||
cb = ctypes.cast(UC_HOOK_INSN_OUT_CB(self._hook_insn_out_cb), UC_HOOK_INSN_OUT_CB)
|
||||
if arg1 in (x86_const.UC_X86_INS_SYSCALL, x86_const.UC_X86_INS_SYSENTER): # SYSCALL/SYSENTER instruction
|
||||
cb = ctypes.cast(UC_HOOK_INSN_SYSCALL_CB(self._hook_insn_syscall_cb), UC_HOOK_INSN_SYSCALL_CB)
|
||||
status = _uc.uc_hook_add(self._uch, ctypes.byref(_h2), htype, \
|
||||
cb, ctypes.cast(self._callback_count, ctypes.c_void_p), insn)
|
||||
elif htype == UC_HOOK_INTR:
|
||||
|
@ -439,20 +450,15 @@ class Uc(object):
|
|||
def debug():
|
||||
archs = { "arm": UC_ARCH_ARM, "arm64": UC_ARCH_ARM64, \
|
||||
"mips": UC_ARCH_MIPS, "sparc": UC_ARCH_SPARC, \
|
||||
"m68k": UC_ARCH_M68K }
|
||||
"m68k": UC_ARCH_M68K, "x86": UC_ARCH_X86 }
|
||||
|
||||
all_archs = ""
|
||||
keys = archs.keys()
|
||||
keys.sort()
|
||||
for k in keys:
|
||||
if uc_support(archs[k]):
|
||||
if uc_arch_supported(archs[k]):
|
||||
all_archs += "-%s" % k
|
||||
|
||||
if uc_support(UC_ARCH_X86):
|
||||
all_archs += "-x86"
|
||||
if uc_support(UC_SUPPORT_X86_REDUCE):
|
||||
all_archs += "_reduce"
|
||||
|
||||
(major, minor, _combined) = uc_version()
|
||||
|
||||
return "python-%s-c%u.%u-b%u.%u" % (all_archs, major, minor, UC_API_MAJOR, UC_API_MINOR)
|
||||
|
|
|
@ -2,273 +2,273 @@
|
|||
|
||||
# ARM64 registers
|
||||
|
||||
ARM64_REG_INVALID = 0
|
||||
ARM64_REG_X29 = 1
|
||||
ARM64_REG_X30 = 2
|
||||
ARM64_REG_NZCV = 3
|
||||
ARM64_REG_SP = 4
|
||||
ARM64_REG_WSP = 5
|
||||
ARM64_REG_WZR = 6
|
||||
ARM64_REG_XZR = 7
|
||||
ARM64_REG_B0 = 8
|
||||
ARM64_REG_B1 = 9
|
||||
ARM64_REG_B2 = 10
|
||||
ARM64_REG_B3 = 11
|
||||
ARM64_REG_B4 = 12
|
||||
ARM64_REG_B5 = 13
|
||||
ARM64_REG_B6 = 14
|
||||
ARM64_REG_B7 = 15
|
||||
ARM64_REG_B8 = 16
|
||||
ARM64_REG_B9 = 17
|
||||
ARM64_REG_B10 = 18
|
||||
ARM64_REG_B11 = 19
|
||||
ARM64_REG_B12 = 20
|
||||
ARM64_REG_B13 = 21
|
||||
ARM64_REG_B14 = 22
|
||||
ARM64_REG_B15 = 23
|
||||
ARM64_REG_B16 = 24
|
||||
ARM64_REG_B17 = 25
|
||||
ARM64_REG_B18 = 26
|
||||
ARM64_REG_B19 = 27
|
||||
ARM64_REG_B20 = 28
|
||||
ARM64_REG_B21 = 29
|
||||
ARM64_REG_B22 = 30
|
||||
ARM64_REG_B23 = 31
|
||||
ARM64_REG_B24 = 32
|
||||
ARM64_REG_B25 = 33
|
||||
ARM64_REG_B26 = 34
|
||||
ARM64_REG_B27 = 35
|
||||
ARM64_REG_B28 = 36
|
||||
ARM64_REG_B29 = 37
|
||||
ARM64_REG_B30 = 38
|
||||
ARM64_REG_B31 = 39
|
||||
ARM64_REG_D0 = 40
|
||||
ARM64_REG_D1 = 41
|
||||
ARM64_REG_D2 = 42
|
||||
ARM64_REG_D3 = 43
|
||||
ARM64_REG_D4 = 44
|
||||
ARM64_REG_D5 = 45
|
||||
ARM64_REG_D6 = 46
|
||||
ARM64_REG_D7 = 47
|
||||
ARM64_REG_D8 = 48
|
||||
ARM64_REG_D9 = 49
|
||||
ARM64_REG_D10 = 50
|
||||
ARM64_REG_D11 = 51
|
||||
ARM64_REG_D12 = 52
|
||||
ARM64_REG_D13 = 53
|
||||
ARM64_REG_D14 = 54
|
||||
ARM64_REG_D15 = 55
|
||||
ARM64_REG_D16 = 56
|
||||
ARM64_REG_D17 = 57
|
||||
ARM64_REG_D18 = 58
|
||||
ARM64_REG_D19 = 59
|
||||
ARM64_REG_D20 = 60
|
||||
ARM64_REG_D21 = 61
|
||||
ARM64_REG_D22 = 62
|
||||
ARM64_REG_D23 = 63
|
||||
ARM64_REG_D24 = 64
|
||||
ARM64_REG_D25 = 65
|
||||
ARM64_REG_D26 = 66
|
||||
ARM64_REG_D27 = 67
|
||||
ARM64_REG_D28 = 68
|
||||
ARM64_REG_D29 = 69
|
||||
ARM64_REG_D30 = 70
|
||||
ARM64_REG_D31 = 71
|
||||
ARM64_REG_H0 = 72
|
||||
ARM64_REG_H1 = 73
|
||||
ARM64_REG_H2 = 74
|
||||
ARM64_REG_H3 = 75
|
||||
ARM64_REG_H4 = 76
|
||||
ARM64_REG_H5 = 77
|
||||
ARM64_REG_H6 = 78
|
||||
ARM64_REG_H7 = 79
|
||||
ARM64_REG_H8 = 80
|
||||
ARM64_REG_H9 = 81
|
||||
ARM64_REG_H10 = 82
|
||||
ARM64_REG_H11 = 83
|
||||
ARM64_REG_H12 = 84
|
||||
ARM64_REG_H13 = 85
|
||||
ARM64_REG_H14 = 86
|
||||
ARM64_REG_H15 = 87
|
||||
ARM64_REG_H16 = 88
|
||||
ARM64_REG_H17 = 89
|
||||
ARM64_REG_H18 = 90
|
||||
ARM64_REG_H19 = 91
|
||||
ARM64_REG_H20 = 92
|
||||
ARM64_REG_H21 = 93
|
||||
ARM64_REG_H22 = 94
|
||||
ARM64_REG_H23 = 95
|
||||
ARM64_REG_H24 = 96
|
||||
ARM64_REG_H25 = 97
|
||||
ARM64_REG_H26 = 98
|
||||
ARM64_REG_H27 = 99
|
||||
ARM64_REG_H28 = 100
|
||||
ARM64_REG_H29 = 101
|
||||
ARM64_REG_H30 = 102
|
||||
ARM64_REG_H31 = 103
|
||||
ARM64_REG_Q0 = 104
|
||||
ARM64_REG_Q1 = 105
|
||||
ARM64_REG_Q2 = 106
|
||||
ARM64_REG_Q3 = 107
|
||||
ARM64_REG_Q4 = 108
|
||||
ARM64_REG_Q5 = 109
|
||||
ARM64_REG_Q6 = 110
|
||||
ARM64_REG_Q7 = 111
|
||||
ARM64_REG_Q8 = 112
|
||||
ARM64_REG_Q9 = 113
|
||||
ARM64_REG_Q10 = 114
|
||||
ARM64_REG_Q11 = 115
|
||||
ARM64_REG_Q12 = 116
|
||||
ARM64_REG_Q13 = 117
|
||||
ARM64_REG_Q14 = 118
|
||||
ARM64_REG_Q15 = 119
|
||||
ARM64_REG_Q16 = 120
|
||||
ARM64_REG_Q17 = 121
|
||||
ARM64_REG_Q18 = 122
|
||||
ARM64_REG_Q19 = 123
|
||||
ARM64_REG_Q20 = 124
|
||||
ARM64_REG_Q21 = 125
|
||||
ARM64_REG_Q22 = 126
|
||||
ARM64_REG_Q23 = 127
|
||||
ARM64_REG_Q24 = 128
|
||||
ARM64_REG_Q25 = 129
|
||||
ARM64_REG_Q26 = 130
|
||||
ARM64_REG_Q27 = 131
|
||||
ARM64_REG_Q28 = 132
|
||||
ARM64_REG_Q29 = 133
|
||||
ARM64_REG_Q30 = 134
|
||||
ARM64_REG_Q31 = 135
|
||||
ARM64_REG_S0 = 136
|
||||
ARM64_REG_S1 = 137
|
||||
ARM64_REG_S2 = 138
|
||||
ARM64_REG_S3 = 139
|
||||
ARM64_REG_S4 = 140
|
||||
ARM64_REG_S5 = 141
|
||||
ARM64_REG_S6 = 142
|
||||
ARM64_REG_S7 = 143
|
||||
ARM64_REG_S8 = 144
|
||||
ARM64_REG_S9 = 145
|
||||
ARM64_REG_S10 = 146
|
||||
ARM64_REG_S11 = 147
|
||||
ARM64_REG_S12 = 148
|
||||
ARM64_REG_S13 = 149
|
||||
ARM64_REG_S14 = 150
|
||||
ARM64_REG_S15 = 151
|
||||
ARM64_REG_S16 = 152
|
||||
ARM64_REG_S17 = 153
|
||||
ARM64_REG_S18 = 154
|
||||
ARM64_REG_S19 = 155
|
||||
ARM64_REG_S20 = 156
|
||||
ARM64_REG_S21 = 157
|
||||
ARM64_REG_S22 = 158
|
||||
ARM64_REG_S23 = 159
|
||||
ARM64_REG_S24 = 160
|
||||
ARM64_REG_S25 = 161
|
||||
ARM64_REG_S26 = 162
|
||||
ARM64_REG_S27 = 163
|
||||
ARM64_REG_S28 = 164
|
||||
ARM64_REG_S29 = 165
|
||||
ARM64_REG_S30 = 166
|
||||
ARM64_REG_S31 = 167
|
||||
ARM64_REG_W0 = 168
|
||||
ARM64_REG_W1 = 169
|
||||
ARM64_REG_W2 = 170
|
||||
ARM64_REG_W3 = 171
|
||||
ARM64_REG_W4 = 172
|
||||
ARM64_REG_W5 = 173
|
||||
ARM64_REG_W6 = 174
|
||||
ARM64_REG_W7 = 175
|
||||
ARM64_REG_W8 = 176
|
||||
ARM64_REG_W9 = 177
|
||||
ARM64_REG_W10 = 178
|
||||
ARM64_REG_W11 = 179
|
||||
ARM64_REG_W12 = 180
|
||||
ARM64_REG_W13 = 181
|
||||
ARM64_REG_W14 = 182
|
||||
ARM64_REG_W15 = 183
|
||||
ARM64_REG_W16 = 184
|
||||
ARM64_REG_W17 = 185
|
||||
ARM64_REG_W18 = 186
|
||||
ARM64_REG_W19 = 187
|
||||
ARM64_REG_W20 = 188
|
||||
ARM64_REG_W21 = 189
|
||||
ARM64_REG_W22 = 190
|
||||
ARM64_REG_W23 = 191
|
||||
ARM64_REG_W24 = 192
|
||||
ARM64_REG_W25 = 193
|
||||
ARM64_REG_W26 = 194
|
||||
ARM64_REG_W27 = 195
|
||||
ARM64_REG_W28 = 196
|
||||
ARM64_REG_W29 = 197
|
||||
ARM64_REG_W30 = 198
|
||||
ARM64_REG_X0 = 199
|
||||
ARM64_REG_X1 = 200
|
||||
ARM64_REG_X2 = 201
|
||||
ARM64_REG_X3 = 202
|
||||
ARM64_REG_X4 = 203
|
||||
ARM64_REG_X5 = 204
|
||||
ARM64_REG_X6 = 205
|
||||
ARM64_REG_X7 = 206
|
||||
ARM64_REG_X8 = 207
|
||||
ARM64_REG_X9 = 208
|
||||
ARM64_REG_X10 = 209
|
||||
ARM64_REG_X11 = 210
|
||||
ARM64_REG_X12 = 211
|
||||
ARM64_REG_X13 = 212
|
||||
ARM64_REG_X14 = 213
|
||||
ARM64_REG_X15 = 214
|
||||
ARM64_REG_X16 = 215
|
||||
ARM64_REG_X17 = 216
|
||||
ARM64_REG_X18 = 217
|
||||
ARM64_REG_X19 = 218
|
||||
ARM64_REG_X20 = 219
|
||||
ARM64_REG_X21 = 220
|
||||
ARM64_REG_X22 = 221
|
||||
ARM64_REG_X23 = 222
|
||||
ARM64_REG_X24 = 223
|
||||
ARM64_REG_X25 = 224
|
||||
ARM64_REG_X26 = 225
|
||||
ARM64_REG_X27 = 226
|
||||
ARM64_REG_X28 = 227
|
||||
ARM64_REG_V0 = 228
|
||||
ARM64_REG_V1 = 229
|
||||
ARM64_REG_V2 = 230
|
||||
ARM64_REG_V3 = 231
|
||||
ARM64_REG_V4 = 232
|
||||
ARM64_REG_V5 = 233
|
||||
ARM64_REG_V6 = 234
|
||||
ARM64_REG_V7 = 235
|
||||
ARM64_REG_V8 = 236
|
||||
ARM64_REG_V9 = 237
|
||||
ARM64_REG_V10 = 238
|
||||
ARM64_REG_V11 = 239
|
||||
ARM64_REG_V12 = 240
|
||||
ARM64_REG_V13 = 241
|
||||
ARM64_REG_V14 = 242
|
||||
ARM64_REG_V15 = 243
|
||||
ARM64_REG_V16 = 244
|
||||
ARM64_REG_V17 = 245
|
||||
ARM64_REG_V18 = 246
|
||||
ARM64_REG_V19 = 247
|
||||
ARM64_REG_V20 = 248
|
||||
ARM64_REG_V21 = 249
|
||||
ARM64_REG_V22 = 250
|
||||
ARM64_REG_V23 = 251
|
||||
ARM64_REG_V24 = 252
|
||||
ARM64_REG_V25 = 253
|
||||
ARM64_REG_V26 = 254
|
||||
ARM64_REG_V27 = 255
|
||||
ARM64_REG_V28 = 256
|
||||
ARM64_REG_V29 = 257
|
||||
ARM64_REG_V30 = 258
|
||||
ARM64_REG_V31 = 259
|
||||
UC_ARM64_REG_INVALID = 0
|
||||
UC_ARM64_REG_X29 = 1
|
||||
UC_ARM64_REG_X30 = 2
|
||||
UC_ARM64_REG_NZCV = 3
|
||||
UC_ARM64_REG_SP = 4
|
||||
UC_ARM64_REG_WSP = 5
|
||||
UC_ARM64_REG_WZR = 6
|
||||
UC_ARM64_REG_XZR = 7
|
||||
UC_ARM64_REG_B0 = 8
|
||||
UC_ARM64_REG_B1 = 9
|
||||
UC_ARM64_REG_B2 = 10
|
||||
UC_ARM64_REG_B3 = 11
|
||||
UC_ARM64_REG_B4 = 12
|
||||
UC_ARM64_REG_B5 = 13
|
||||
UC_ARM64_REG_B6 = 14
|
||||
UC_ARM64_REG_B7 = 15
|
||||
UC_ARM64_REG_B8 = 16
|
||||
UC_ARM64_REG_B9 = 17
|
||||
UC_ARM64_REG_B10 = 18
|
||||
UC_ARM64_REG_B11 = 19
|
||||
UC_ARM64_REG_B12 = 20
|
||||
UC_ARM64_REG_B13 = 21
|
||||
UC_ARM64_REG_B14 = 22
|
||||
UC_ARM64_REG_B15 = 23
|
||||
UC_ARM64_REG_B16 = 24
|
||||
UC_ARM64_REG_B17 = 25
|
||||
UC_ARM64_REG_B18 = 26
|
||||
UC_ARM64_REG_B19 = 27
|
||||
UC_ARM64_REG_B20 = 28
|
||||
UC_ARM64_REG_B21 = 29
|
||||
UC_ARM64_REG_B22 = 30
|
||||
UC_ARM64_REG_B23 = 31
|
||||
UC_ARM64_REG_B24 = 32
|
||||
UC_ARM64_REG_B25 = 33
|
||||
UC_ARM64_REG_B26 = 34
|
||||
UC_ARM64_REG_B27 = 35
|
||||
UC_ARM64_REG_B28 = 36
|
||||
UC_ARM64_REG_B29 = 37
|
||||
UC_ARM64_REG_B30 = 38
|
||||
UC_ARM64_REG_B31 = 39
|
||||
UC_ARM64_REG_D0 = 40
|
||||
UC_ARM64_REG_D1 = 41
|
||||
UC_ARM64_REG_D2 = 42
|
||||
UC_ARM64_REG_D3 = 43
|
||||
UC_ARM64_REG_D4 = 44
|
||||
UC_ARM64_REG_D5 = 45
|
||||
UC_ARM64_REG_D6 = 46
|
||||
UC_ARM64_REG_D7 = 47
|
||||
UC_ARM64_REG_D8 = 48
|
||||
UC_ARM64_REG_D9 = 49
|
||||
UC_ARM64_REG_D10 = 50
|
||||
UC_ARM64_REG_D11 = 51
|
||||
UC_ARM64_REG_D12 = 52
|
||||
UC_ARM64_REG_D13 = 53
|
||||
UC_ARM64_REG_D14 = 54
|
||||
UC_ARM64_REG_D15 = 55
|
||||
UC_ARM64_REG_D16 = 56
|
||||
UC_ARM64_REG_D17 = 57
|
||||
UC_ARM64_REG_D18 = 58
|
||||
UC_ARM64_REG_D19 = 59
|
||||
UC_ARM64_REG_D20 = 60
|
||||
UC_ARM64_REG_D21 = 61
|
||||
UC_ARM64_REG_D22 = 62
|
||||
UC_ARM64_REG_D23 = 63
|
||||
UC_ARM64_REG_D24 = 64
|
||||
UC_ARM64_REG_D25 = 65
|
||||
UC_ARM64_REG_D26 = 66
|
||||
UC_ARM64_REG_D27 = 67
|
||||
UC_ARM64_REG_D28 = 68
|
||||
UC_ARM64_REG_D29 = 69
|
||||
UC_ARM64_REG_D30 = 70
|
||||
UC_ARM64_REG_D31 = 71
|
||||
UC_ARM64_REG_H0 = 72
|
||||
UC_ARM64_REG_H1 = 73
|
||||
UC_ARM64_REG_H2 = 74
|
||||
UC_ARM64_REG_H3 = 75
|
||||
UC_ARM64_REG_H4 = 76
|
||||
UC_ARM64_REG_H5 = 77
|
||||
UC_ARM64_REG_H6 = 78
|
||||
UC_ARM64_REG_H7 = 79
|
||||
UC_ARM64_REG_H8 = 80
|
||||
UC_ARM64_REG_H9 = 81
|
||||
UC_ARM64_REG_H10 = 82
|
||||
UC_ARM64_REG_H11 = 83
|
||||
UC_ARM64_REG_H12 = 84
|
||||
UC_ARM64_REG_H13 = 85
|
||||
UC_ARM64_REG_H14 = 86
|
||||
UC_ARM64_REG_H15 = 87
|
||||
UC_ARM64_REG_H16 = 88
|
||||
UC_ARM64_REG_H17 = 89
|
||||
UC_ARM64_REG_H18 = 90
|
||||
UC_ARM64_REG_H19 = 91
|
||||
UC_ARM64_REG_H20 = 92
|
||||
UC_ARM64_REG_H21 = 93
|
||||
UC_ARM64_REG_H22 = 94
|
||||
UC_ARM64_REG_H23 = 95
|
||||
UC_ARM64_REG_H24 = 96
|
||||
UC_ARM64_REG_H25 = 97
|
||||
UC_ARM64_REG_H26 = 98
|
||||
UC_ARM64_REG_H27 = 99
|
||||
UC_ARM64_REG_H28 = 100
|
||||
UC_ARM64_REG_H29 = 101
|
||||
UC_ARM64_REG_H30 = 102
|
||||
UC_ARM64_REG_H31 = 103
|
||||
UC_ARM64_REG_Q0 = 104
|
||||
UC_ARM64_REG_Q1 = 105
|
||||
UC_ARM64_REG_Q2 = 106
|
||||
UC_ARM64_REG_Q3 = 107
|
||||
UC_ARM64_REG_Q4 = 108
|
||||
UC_ARM64_REG_Q5 = 109
|
||||
UC_ARM64_REG_Q6 = 110
|
||||
UC_ARM64_REG_Q7 = 111
|
||||
UC_ARM64_REG_Q8 = 112
|
||||
UC_ARM64_REG_Q9 = 113
|
||||
UC_ARM64_REG_Q10 = 114
|
||||
UC_ARM64_REG_Q11 = 115
|
||||
UC_ARM64_REG_Q12 = 116
|
||||
UC_ARM64_REG_Q13 = 117
|
||||
UC_ARM64_REG_Q14 = 118
|
||||
UC_ARM64_REG_Q15 = 119
|
||||
UC_ARM64_REG_Q16 = 120
|
||||
UC_ARM64_REG_Q17 = 121
|
||||
UC_ARM64_REG_Q18 = 122
|
||||
UC_ARM64_REG_Q19 = 123
|
||||
UC_ARM64_REG_Q20 = 124
|
||||
UC_ARM64_REG_Q21 = 125
|
||||
UC_ARM64_REG_Q22 = 126
|
||||
UC_ARM64_REG_Q23 = 127
|
||||
UC_ARM64_REG_Q24 = 128
|
||||
UC_ARM64_REG_Q25 = 129
|
||||
UC_ARM64_REG_Q26 = 130
|
||||
UC_ARM64_REG_Q27 = 131
|
||||
UC_ARM64_REG_Q28 = 132
|
||||
UC_ARM64_REG_Q29 = 133
|
||||
UC_ARM64_REG_Q30 = 134
|
||||
UC_ARM64_REG_Q31 = 135
|
||||
UC_ARM64_REG_S0 = 136
|
||||
UC_ARM64_REG_S1 = 137
|
||||
UC_ARM64_REG_S2 = 138
|
||||
UC_ARM64_REG_S3 = 139
|
||||
UC_ARM64_REG_S4 = 140
|
||||
UC_ARM64_REG_S5 = 141
|
||||
UC_ARM64_REG_S6 = 142
|
||||
UC_ARM64_REG_S7 = 143
|
||||
UC_ARM64_REG_S8 = 144
|
||||
UC_ARM64_REG_S9 = 145
|
||||
UC_ARM64_REG_S10 = 146
|
||||
UC_ARM64_REG_S11 = 147
|
||||
UC_ARM64_REG_S12 = 148
|
||||
UC_ARM64_REG_S13 = 149
|
||||
UC_ARM64_REG_S14 = 150
|
||||
UC_ARM64_REG_S15 = 151
|
||||
UC_ARM64_REG_S16 = 152
|
||||
UC_ARM64_REG_S17 = 153
|
||||
UC_ARM64_REG_S18 = 154
|
||||
UC_ARM64_REG_S19 = 155
|
||||
UC_ARM64_REG_S20 = 156
|
||||
UC_ARM64_REG_S21 = 157
|
||||
UC_ARM64_REG_S22 = 158
|
||||
UC_ARM64_REG_S23 = 159
|
||||
UC_ARM64_REG_S24 = 160
|
||||
UC_ARM64_REG_S25 = 161
|
||||
UC_ARM64_REG_S26 = 162
|
||||
UC_ARM64_REG_S27 = 163
|
||||
UC_ARM64_REG_S28 = 164
|
||||
UC_ARM64_REG_S29 = 165
|
||||
UC_ARM64_REG_S30 = 166
|
||||
UC_ARM64_REG_S31 = 167
|
||||
UC_ARM64_REG_W0 = 168
|
||||
UC_ARM64_REG_W1 = 169
|
||||
UC_ARM64_REG_W2 = 170
|
||||
UC_ARM64_REG_W3 = 171
|
||||
UC_ARM64_REG_W4 = 172
|
||||
UC_ARM64_REG_W5 = 173
|
||||
UC_ARM64_REG_W6 = 174
|
||||
UC_ARM64_REG_W7 = 175
|
||||
UC_ARM64_REG_W8 = 176
|
||||
UC_ARM64_REG_W9 = 177
|
||||
UC_ARM64_REG_W10 = 178
|
||||
UC_ARM64_REG_W11 = 179
|
||||
UC_ARM64_REG_W12 = 180
|
||||
UC_ARM64_REG_W13 = 181
|
||||
UC_ARM64_REG_W14 = 182
|
||||
UC_ARM64_REG_W15 = 183
|
||||
UC_ARM64_REG_W16 = 184
|
||||
UC_ARM64_REG_W17 = 185
|
||||
UC_ARM64_REG_W18 = 186
|
||||
UC_ARM64_REG_W19 = 187
|
||||
UC_ARM64_REG_W20 = 188
|
||||
UC_ARM64_REG_W21 = 189
|
||||
UC_ARM64_REG_W22 = 190
|
||||
UC_ARM64_REG_W23 = 191
|
||||
UC_ARM64_REG_W24 = 192
|
||||
UC_ARM64_REG_W25 = 193
|
||||
UC_ARM64_REG_W26 = 194
|
||||
UC_ARM64_REG_W27 = 195
|
||||
UC_ARM64_REG_W28 = 196
|
||||
UC_ARM64_REG_W29 = 197
|
||||
UC_ARM64_REG_W30 = 198
|
||||
UC_ARM64_REG_X0 = 199
|
||||
UC_ARM64_REG_X1 = 200
|
||||
UC_ARM64_REG_X2 = 201
|
||||
UC_ARM64_REG_X3 = 202
|
||||
UC_ARM64_REG_X4 = 203
|
||||
UC_ARM64_REG_X5 = 204
|
||||
UC_ARM64_REG_X6 = 205
|
||||
UC_ARM64_REG_X7 = 206
|
||||
UC_ARM64_REG_X8 = 207
|
||||
UC_ARM64_REG_X9 = 208
|
||||
UC_ARM64_REG_X10 = 209
|
||||
UC_ARM64_REG_X11 = 210
|
||||
UC_ARM64_REG_X12 = 211
|
||||
UC_ARM64_REG_X13 = 212
|
||||
UC_ARM64_REG_X14 = 213
|
||||
UC_ARM64_REG_X15 = 214
|
||||
UC_ARM64_REG_X16 = 215
|
||||
UC_ARM64_REG_X17 = 216
|
||||
UC_ARM64_REG_X18 = 217
|
||||
UC_ARM64_REG_X19 = 218
|
||||
UC_ARM64_REG_X20 = 219
|
||||
UC_ARM64_REG_X21 = 220
|
||||
UC_ARM64_REG_X22 = 221
|
||||
UC_ARM64_REG_X23 = 222
|
||||
UC_ARM64_REG_X24 = 223
|
||||
UC_ARM64_REG_X25 = 224
|
||||
UC_ARM64_REG_X26 = 225
|
||||
UC_ARM64_REG_X27 = 226
|
||||
UC_ARM64_REG_X28 = 227
|
||||
UC_ARM64_REG_V0 = 228
|
||||
UC_ARM64_REG_V1 = 229
|
||||
UC_ARM64_REG_V2 = 230
|
||||
UC_ARM64_REG_V3 = 231
|
||||
UC_ARM64_REG_V4 = 232
|
||||
UC_ARM64_REG_V5 = 233
|
||||
UC_ARM64_REG_V6 = 234
|
||||
UC_ARM64_REG_V7 = 235
|
||||
UC_ARM64_REG_V8 = 236
|
||||
UC_ARM64_REG_V9 = 237
|
||||
UC_ARM64_REG_V10 = 238
|
||||
UC_ARM64_REG_V11 = 239
|
||||
UC_ARM64_REG_V12 = 240
|
||||
UC_ARM64_REG_V13 = 241
|
||||
UC_ARM64_REG_V14 = 242
|
||||
UC_ARM64_REG_V15 = 243
|
||||
UC_ARM64_REG_V16 = 244
|
||||
UC_ARM64_REG_V17 = 245
|
||||
UC_ARM64_REG_V18 = 246
|
||||
UC_ARM64_REG_V19 = 247
|
||||
UC_ARM64_REG_V20 = 248
|
||||
UC_ARM64_REG_V21 = 249
|
||||
UC_ARM64_REG_V22 = 250
|
||||
UC_ARM64_REG_V23 = 251
|
||||
UC_ARM64_REG_V24 = 252
|
||||
UC_ARM64_REG_V25 = 253
|
||||
UC_ARM64_REG_V26 = 254
|
||||
UC_ARM64_REG_V27 = 255
|
||||
UC_ARM64_REG_V28 = 256
|
||||
UC_ARM64_REG_V29 = 257
|
||||
UC_ARM64_REG_V30 = 258
|
||||
UC_ARM64_REG_V31 = 259
|
||||
|
||||
# pseudo registers
|
||||
ARM64_REG_PC = 260
|
||||
ARM64_REG_ENDING = 261
|
||||
UC_ARM64_REG_PC = 260
|
||||
UC_ARM64_REG_ENDING = 261
|
||||
|
||||
# alias registers
|
||||
ARM64_REG_IP1 = ARM64_REG_X16
|
||||
ARM64_REG_IP0 = ARM64_REG_X17
|
||||
ARM64_REG_FP = ARM64_REG_X29
|
||||
ARM64_REG_LR = ARM64_REG_X30
|
||||
UC_ARM64_REG_IP1 = UC_ARM64_REG_X16
|
||||
UC_ARM64_REG_IP0 = UC_ARM64_REG_X17
|
||||
UC_ARM64_REG_FP = UC_ARM64_REG_X29
|
||||
UC_ARM64_REG_LR = UC_ARM64_REG_X30
|
||||
|
|
|
@ -2,124 +2,124 @@
|
|||
|
||||
# ARM registers
|
||||
|
||||
ARM_REG_INVALID = 0
|
||||
ARM_REG_APSR = 1
|
||||
ARM_REG_APSR_NZCV = 2
|
||||
ARM_REG_CPSR = 3
|
||||
ARM_REG_FPEXC = 4
|
||||
ARM_REG_FPINST = 5
|
||||
ARM_REG_FPSCR = 6
|
||||
ARM_REG_FPSCR_NZCV = 7
|
||||
ARM_REG_FPSID = 8
|
||||
ARM_REG_ITSTATE = 9
|
||||
ARM_REG_LR = 10
|
||||
ARM_REG_PC = 11
|
||||
ARM_REG_SP = 12
|
||||
ARM_REG_SPSR = 13
|
||||
ARM_REG_D0 = 14
|
||||
ARM_REG_D1 = 15
|
||||
ARM_REG_D2 = 16
|
||||
ARM_REG_D3 = 17
|
||||
ARM_REG_D4 = 18
|
||||
ARM_REG_D5 = 19
|
||||
ARM_REG_D6 = 20
|
||||
ARM_REG_D7 = 21
|
||||
ARM_REG_D8 = 22
|
||||
ARM_REG_D9 = 23
|
||||
ARM_REG_D10 = 24
|
||||
ARM_REG_D11 = 25
|
||||
ARM_REG_D12 = 26
|
||||
ARM_REG_D13 = 27
|
||||
ARM_REG_D14 = 28
|
||||
ARM_REG_D15 = 29
|
||||
ARM_REG_D16 = 30
|
||||
ARM_REG_D17 = 31
|
||||
ARM_REG_D18 = 32
|
||||
ARM_REG_D19 = 33
|
||||
ARM_REG_D20 = 34
|
||||
ARM_REG_D21 = 35
|
||||
ARM_REG_D22 = 36
|
||||
ARM_REG_D23 = 37
|
||||
ARM_REG_D24 = 38
|
||||
ARM_REG_D25 = 39
|
||||
ARM_REG_D26 = 40
|
||||
ARM_REG_D27 = 41
|
||||
ARM_REG_D28 = 42
|
||||
ARM_REG_D29 = 43
|
||||
ARM_REG_D30 = 44
|
||||
ARM_REG_D31 = 45
|
||||
ARM_REG_FPINST2 = 46
|
||||
ARM_REG_MVFR0 = 47
|
||||
ARM_REG_MVFR1 = 48
|
||||
ARM_REG_MVFR2 = 49
|
||||
ARM_REG_Q0 = 50
|
||||
ARM_REG_Q1 = 51
|
||||
ARM_REG_Q2 = 52
|
||||
ARM_REG_Q3 = 53
|
||||
ARM_REG_Q4 = 54
|
||||
ARM_REG_Q5 = 55
|
||||
ARM_REG_Q6 = 56
|
||||
ARM_REG_Q7 = 57
|
||||
ARM_REG_Q8 = 58
|
||||
ARM_REG_Q9 = 59
|
||||
ARM_REG_Q10 = 60
|
||||
ARM_REG_Q11 = 61
|
||||
ARM_REG_Q12 = 62
|
||||
ARM_REG_Q13 = 63
|
||||
ARM_REG_Q14 = 64
|
||||
ARM_REG_Q15 = 65
|
||||
ARM_REG_R0 = 66
|
||||
ARM_REG_R1 = 67
|
||||
ARM_REG_R2 = 68
|
||||
ARM_REG_R3 = 69
|
||||
ARM_REG_R4 = 70
|
||||
ARM_REG_R5 = 71
|
||||
ARM_REG_R6 = 72
|
||||
ARM_REG_R7 = 73
|
||||
ARM_REG_R8 = 74
|
||||
ARM_REG_R9 = 75
|
||||
ARM_REG_R10 = 76
|
||||
ARM_REG_R11 = 77
|
||||
ARM_REG_R12 = 78
|
||||
ARM_REG_S0 = 79
|
||||
ARM_REG_S1 = 80
|
||||
ARM_REG_S2 = 81
|
||||
ARM_REG_S3 = 82
|
||||
ARM_REG_S4 = 83
|
||||
ARM_REG_S5 = 84
|
||||
ARM_REG_S6 = 85
|
||||
ARM_REG_S7 = 86
|
||||
ARM_REG_S8 = 87
|
||||
ARM_REG_S9 = 88
|
||||
ARM_REG_S10 = 89
|
||||
ARM_REG_S11 = 90
|
||||
ARM_REG_S12 = 91
|
||||
ARM_REG_S13 = 92
|
||||
ARM_REG_S14 = 93
|
||||
ARM_REG_S15 = 94
|
||||
ARM_REG_S16 = 95
|
||||
ARM_REG_S17 = 96
|
||||
ARM_REG_S18 = 97
|
||||
ARM_REG_S19 = 98
|
||||
ARM_REG_S20 = 99
|
||||
ARM_REG_S21 = 100
|
||||
ARM_REG_S22 = 101
|
||||
ARM_REG_S23 = 102
|
||||
ARM_REG_S24 = 103
|
||||
ARM_REG_S25 = 104
|
||||
ARM_REG_S26 = 105
|
||||
ARM_REG_S27 = 106
|
||||
ARM_REG_S28 = 107
|
||||
ARM_REG_S29 = 108
|
||||
ARM_REG_S30 = 109
|
||||
ARM_REG_S31 = 110
|
||||
ARM_REG_ENDING = 111
|
||||
UC_ARM_REG_INVALID = 0
|
||||
UC_ARM_REG_APSR = 1
|
||||
UC_ARM_REG_APSR_NZCV = 2
|
||||
UC_ARM_REG_CPSR = 3
|
||||
UC_ARM_REG_FPEXC = 4
|
||||
UC_ARM_REG_FPINST = 5
|
||||
UC_ARM_REG_FPSCR = 6
|
||||
UC_ARM_REG_FPSCR_NZCV = 7
|
||||
UC_ARM_REG_FPSID = 8
|
||||
UC_ARM_REG_ITSTATE = 9
|
||||
UC_ARM_REG_LR = 10
|
||||
UC_ARM_REG_PC = 11
|
||||
UC_ARM_REG_SP = 12
|
||||
UC_ARM_REG_SPSR = 13
|
||||
UC_ARM_REG_D0 = 14
|
||||
UC_ARM_REG_D1 = 15
|
||||
UC_ARM_REG_D2 = 16
|
||||
UC_ARM_REG_D3 = 17
|
||||
UC_ARM_REG_D4 = 18
|
||||
UC_ARM_REG_D5 = 19
|
||||
UC_ARM_REG_D6 = 20
|
||||
UC_ARM_REG_D7 = 21
|
||||
UC_ARM_REG_D8 = 22
|
||||
UC_ARM_REG_D9 = 23
|
||||
UC_ARM_REG_D10 = 24
|
||||
UC_ARM_REG_D11 = 25
|
||||
UC_ARM_REG_D12 = 26
|
||||
UC_ARM_REG_D13 = 27
|
||||
UC_ARM_REG_D14 = 28
|
||||
UC_ARM_REG_D15 = 29
|
||||
UC_ARM_REG_D16 = 30
|
||||
UC_ARM_REG_D17 = 31
|
||||
UC_ARM_REG_D18 = 32
|
||||
UC_ARM_REG_D19 = 33
|
||||
UC_ARM_REG_D20 = 34
|
||||
UC_ARM_REG_D21 = 35
|
||||
UC_ARM_REG_D22 = 36
|
||||
UC_ARM_REG_D23 = 37
|
||||
UC_ARM_REG_D24 = 38
|
||||
UC_ARM_REG_D25 = 39
|
||||
UC_ARM_REG_D26 = 40
|
||||
UC_ARM_REG_D27 = 41
|
||||
UC_ARM_REG_D28 = 42
|
||||
UC_ARM_REG_D29 = 43
|
||||
UC_ARM_REG_D30 = 44
|
||||
UC_ARM_REG_D31 = 45
|
||||
UC_ARM_REG_FPINST2 = 46
|
||||
UC_ARM_REG_MVFR0 = 47
|
||||
UC_ARM_REG_MVFR1 = 48
|
||||
UC_ARM_REG_MVFR2 = 49
|
||||
UC_ARM_REG_Q0 = 50
|
||||
UC_ARM_REG_Q1 = 51
|
||||
UC_ARM_REG_Q2 = 52
|
||||
UC_ARM_REG_Q3 = 53
|
||||
UC_ARM_REG_Q4 = 54
|
||||
UC_ARM_REG_Q5 = 55
|
||||
UC_ARM_REG_Q6 = 56
|
||||
UC_ARM_REG_Q7 = 57
|
||||
UC_ARM_REG_Q8 = 58
|
||||
UC_ARM_REG_Q9 = 59
|
||||
UC_ARM_REG_Q10 = 60
|
||||
UC_ARM_REG_Q11 = 61
|
||||
UC_ARM_REG_Q12 = 62
|
||||
UC_ARM_REG_Q13 = 63
|
||||
UC_ARM_REG_Q14 = 64
|
||||
UC_ARM_REG_Q15 = 65
|
||||
UC_ARM_REG_R0 = 66
|
||||
UC_ARM_REG_R1 = 67
|
||||
UC_ARM_REG_R2 = 68
|
||||
UC_ARM_REG_R3 = 69
|
||||
UC_ARM_REG_R4 = 70
|
||||
UC_ARM_REG_R5 = 71
|
||||
UC_ARM_REG_R6 = 72
|
||||
UC_ARM_REG_R7 = 73
|
||||
UC_ARM_REG_R8 = 74
|
||||
UC_ARM_REG_R9 = 75
|
||||
UC_ARM_REG_R10 = 76
|
||||
UC_ARM_REG_R11 = 77
|
||||
UC_ARM_REG_R12 = 78
|
||||
UC_ARM_REG_S0 = 79
|
||||
UC_ARM_REG_S1 = 80
|
||||
UC_ARM_REG_S2 = 81
|
||||
UC_ARM_REG_S3 = 82
|
||||
UC_ARM_REG_S4 = 83
|
||||
UC_ARM_REG_S5 = 84
|
||||
UC_ARM_REG_S6 = 85
|
||||
UC_ARM_REG_S7 = 86
|
||||
UC_ARM_REG_S8 = 87
|
||||
UC_ARM_REG_S9 = 88
|
||||
UC_ARM_REG_S10 = 89
|
||||
UC_ARM_REG_S11 = 90
|
||||
UC_ARM_REG_S12 = 91
|
||||
UC_ARM_REG_S13 = 92
|
||||
UC_ARM_REG_S14 = 93
|
||||
UC_ARM_REG_S15 = 94
|
||||
UC_ARM_REG_S16 = 95
|
||||
UC_ARM_REG_S17 = 96
|
||||
UC_ARM_REG_S18 = 97
|
||||
UC_ARM_REG_S19 = 98
|
||||
UC_ARM_REG_S20 = 99
|
||||
UC_ARM_REG_S21 = 100
|
||||
UC_ARM_REG_S22 = 101
|
||||
UC_ARM_REG_S23 = 102
|
||||
UC_ARM_REG_S24 = 103
|
||||
UC_ARM_REG_S25 = 104
|
||||
UC_ARM_REG_S26 = 105
|
||||
UC_ARM_REG_S27 = 106
|
||||
UC_ARM_REG_S28 = 107
|
||||
UC_ARM_REG_S29 = 108
|
||||
UC_ARM_REG_S30 = 109
|
||||
UC_ARM_REG_S31 = 110
|
||||
UC_ARM_REG_ENDING = 111
|
||||
|
||||
# alias registers
|
||||
ARM_REG_R13 = ARM_REG_SP
|
||||
ARM_REG_R14 = ARM_REG_LR
|
||||
ARM_REG_R15 = ARM_REG_PC
|
||||
ARM_REG_SB = ARM_REG_R9
|
||||
ARM_REG_SL = ARM_REG_R10
|
||||
ARM_REG_FP = ARM_REG_R11
|
||||
ARM_REG_IP = ARM_REG_R12
|
||||
UC_ARM_REG_R13 = UC_ARM_REG_SP
|
||||
UC_ARM_REG_R14 = UC_ARM_REG_LR
|
||||
UC_ARM_REG_R15 = UC_ARM_REG_PC
|
||||
UC_ARM_REG_SB = UC_ARM_REG_R9
|
||||
UC_ARM_REG_SL = UC_ARM_REG_R10
|
||||
UC_ARM_REG_FP = UC_ARM_REG_R11
|
||||
UC_ARM_REG_IP = UC_ARM_REG_R12
|
||||
|
|
|
@ -2,23 +2,23 @@
|
|||
|
||||
# M68K registers
|
||||
|
||||
M68K_REG_INVALID = 0
|
||||
M68K_REG_A0 = 1
|
||||
M68K_REG_A1 = 2
|
||||
M68K_REG_A2 = 3
|
||||
M68K_REG_A3 = 4
|
||||
M68K_REG_A4 = 5
|
||||
M68K_REG_A5 = 6
|
||||
M68K_REG_A6 = 7
|
||||
M68K_REG_A7 = 8
|
||||
M68K_REG_D0 = 9
|
||||
M68K_REG_D1 = 10
|
||||
M68K_REG_D2 = 11
|
||||
M68K_REG_D3 = 12
|
||||
M68K_REG_D4 = 13
|
||||
M68K_REG_D5 = 14
|
||||
M68K_REG_D6 = 15
|
||||
M68K_REG_D7 = 16
|
||||
M68K_REG_SR = 17
|
||||
M68K_REG_PC = 18
|
||||
M68K_REG_ENDING = 19
|
||||
UC_M68K_REG_INVALID = 0
|
||||
UC_M68K_REG_A0 = 1
|
||||
UC_M68K_REG_A1 = 2
|
||||
UC_M68K_REG_A2 = 3
|
||||
UC_M68K_REG_A3 = 4
|
||||
UC_M68K_REG_A4 = 5
|
||||
UC_M68K_REG_A5 = 6
|
||||
UC_M68K_REG_A6 = 7
|
||||
UC_M68K_REG_A7 = 8
|
||||
UC_M68K_REG_D0 = 9
|
||||
UC_M68K_REG_D1 = 10
|
||||
UC_M68K_REG_D2 = 11
|
||||
UC_M68K_REG_D3 = 12
|
||||
UC_M68K_REG_D4 = 13
|
||||
UC_M68K_REG_D5 = 14
|
||||
UC_M68K_REG_D6 = 15
|
||||
UC_M68K_REG_D7 = 16
|
||||
UC_M68K_REG_SR = 17
|
||||
UC_M68K_REG_PC = 18
|
||||
UC_M68K_REG_ENDING = 19
|
||||
|
|
|
@ -2,194 +2,194 @@
|
|||
|
||||
# MIPS registers
|
||||
|
||||
MIPS_REG_INVALID = 0
|
||||
UC_MIPS_REG_INVALID = 0
|
||||
|
||||
# General purpose registers
|
||||
MIPS_REG_PC = 1
|
||||
MIPS_REG_0 = 2
|
||||
MIPS_REG_1 = 3
|
||||
MIPS_REG_2 = 4
|
||||
MIPS_REG_3 = 5
|
||||
MIPS_REG_4 = 6
|
||||
MIPS_REG_5 = 7
|
||||
MIPS_REG_6 = 8
|
||||
MIPS_REG_7 = 9
|
||||
MIPS_REG_8 = 10
|
||||
MIPS_REG_9 = 11
|
||||
MIPS_REG_10 = 12
|
||||
MIPS_REG_11 = 13
|
||||
MIPS_REG_12 = 14
|
||||
MIPS_REG_13 = 15
|
||||
MIPS_REG_14 = 16
|
||||
MIPS_REG_15 = 17
|
||||
MIPS_REG_16 = 18
|
||||
MIPS_REG_17 = 19
|
||||
MIPS_REG_18 = 20
|
||||
MIPS_REG_19 = 21
|
||||
MIPS_REG_20 = 22
|
||||
MIPS_REG_21 = 23
|
||||
MIPS_REG_22 = 24
|
||||
MIPS_REG_23 = 25
|
||||
MIPS_REG_24 = 26
|
||||
MIPS_REG_25 = 27
|
||||
MIPS_REG_26 = 28
|
||||
MIPS_REG_27 = 29
|
||||
MIPS_REG_28 = 30
|
||||
MIPS_REG_29 = 31
|
||||
MIPS_REG_30 = 32
|
||||
MIPS_REG_31 = 33
|
||||
UC_MIPS_REG_PC = 1
|
||||
UC_MIPS_REG_0 = 2
|
||||
UC_MIPS_REG_1 = 3
|
||||
UC_MIPS_REG_2 = 4
|
||||
UC_MIPS_REG_3 = 5
|
||||
UC_MIPS_REG_4 = 6
|
||||
UC_MIPS_REG_5 = 7
|
||||
UC_MIPS_REG_6 = 8
|
||||
UC_MIPS_REG_7 = 9
|
||||
UC_MIPS_REG_8 = 10
|
||||
UC_MIPS_REG_9 = 11
|
||||
UC_MIPS_REG_10 = 12
|
||||
UC_MIPS_REG_11 = 13
|
||||
UC_MIPS_REG_12 = 14
|
||||
UC_MIPS_REG_13 = 15
|
||||
UC_MIPS_REG_14 = 16
|
||||
UC_MIPS_REG_15 = 17
|
||||
UC_MIPS_REG_16 = 18
|
||||
UC_MIPS_REG_17 = 19
|
||||
UC_MIPS_REG_18 = 20
|
||||
UC_MIPS_REG_19 = 21
|
||||
UC_MIPS_REG_20 = 22
|
||||
UC_MIPS_REG_21 = 23
|
||||
UC_MIPS_REG_22 = 24
|
||||
UC_MIPS_REG_23 = 25
|
||||
UC_MIPS_REG_24 = 26
|
||||
UC_MIPS_REG_25 = 27
|
||||
UC_MIPS_REG_26 = 28
|
||||
UC_MIPS_REG_27 = 29
|
||||
UC_MIPS_REG_28 = 30
|
||||
UC_MIPS_REG_29 = 31
|
||||
UC_MIPS_REG_30 = 32
|
||||
UC_MIPS_REG_31 = 33
|
||||
|
||||
# DSP registers
|
||||
MIPS_REG_DSPCCOND = 34
|
||||
MIPS_REG_DSPCARRY = 35
|
||||
MIPS_REG_DSPEFI = 36
|
||||
MIPS_REG_DSPOUTFLAG = 37
|
||||
MIPS_REG_DSPOUTFLAG16_19 = 38
|
||||
MIPS_REG_DSPOUTFLAG20 = 39
|
||||
MIPS_REG_DSPOUTFLAG21 = 40
|
||||
MIPS_REG_DSPOUTFLAG22 = 41
|
||||
MIPS_REG_DSPOUTFLAG23 = 42
|
||||
MIPS_REG_DSPPOS = 43
|
||||
MIPS_REG_DSPSCOUNT = 44
|
||||
UC_MIPS_REG_DSPCCOND = 34
|
||||
UC_MIPS_REG_DSPCARRY = 35
|
||||
UC_MIPS_REG_DSPEFI = 36
|
||||
UC_MIPS_REG_DSPOUTFLAG = 37
|
||||
UC_MIPS_REG_DSPOUTFLAG16_19 = 38
|
||||
UC_MIPS_REG_DSPOUTFLAG20 = 39
|
||||
UC_MIPS_REG_DSPOUTFLAG21 = 40
|
||||
UC_MIPS_REG_DSPOUTFLAG22 = 41
|
||||
UC_MIPS_REG_DSPOUTFLAG23 = 42
|
||||
UC_MIPS_REG_DSPPOS = 43
|
||||
UC_MIPS_REG_DSPSCOUNT = 44
|
||||
|
||||
# ACC registers
|
||||
MIPS_REG_AC0 = 45
|
||||
MIPS_REG_AC1 = 46
|
||||
MIPS_REG_AC2 = 47
|
||||
MIPS_REG_AC3 = 48
|
||||
UC_MIPS_REG_AC0 = 45
|
||||
UC_MIPS_REG_AC1 = 46
|
||||
UC_MIPS_REG_AC2 = 47
|
||||
UC_MIPS_REG_AC3 = 48
|
||||
|
||||
# COP registers
|
||||
MIPS_REG_CC0 = 49
|
||||
MIPS_REG_CC1 = 50
|
||||
MIPS_REG_CC2 = 51
|
||||
MIPS_REG_CC3 = 52
|
||||
MIPS_REG_CC4 = 53
|
||||
MIPS_REG_CC5 = 54
|
||||
MIPS_REG_CC6 = 55
|
||||
MIPS_REG_CC7 = 56
|
||||
UC_MIPS_REG_CC0 = 49
|
||||
UC_MIPS_REG_CC1 = 50
|
||||
UC_MIPS_REG_CC2 = 51
|
||||
UC_MIPS_REG_CC3 = 52
|
||||
UC_MIPS_REG_CC4 = 53
|
||||
UC_MIPS_REG_CC5 = 54
|
||||
UC_MIPS_REG_CC6 = 55
|
||||
UC_MIPS_REG_CC7 = 56
|
||||
|
||||
# FPU registers
|
||||
MIPS_REG_F0 = 57
|
||||
MIPS_REG_F1 = 58
|
||||
MIPS_REG_F2 = 59
|
||||
MIPS_REG_F3 = 60
|
||||
MIPS_REG_F4 = 61
|
||||
MIPS_REG_F5 = 62
|
||||
MIPS_REG_F6 = 63
|
||||
MIPS_REG_F7 = 64
|
||||
MIPS_REG_F8 = 65
|
||||
MIPS_REG_F9 = 66
|
||||
MIPS_REG_F10 = 67
|
||||
MIPS_REG_F11 = 68
|
||||
MIPS_REG_F12 = 69
|
||||
MIPS_REG_F13 = 70
|
||||
MIPS_REG_F14 = 71
|
||||
MIPS_REG_F15 = 72
|
||||
MIPS_REG_F16 = 73
|
||||
MIPS_REG_F17 = 74
|
||||
MIPS_REG_F18 = 75
|
||||
MIPS_REG_F19 = 76
|
||||
MIPS_REG_F20 = 77
|
||||
MIPS_REG_F21 = 78
|
||||
MIPS_REG_F22 = 79
|
||||
MIPS_REG_F23 = 80
|
||||
MIPS_REG_F24 = 81
|
||||
MIPS_REG_F25 = 82
|
||||
MIPS_REG_F26 = 83
|
||||
MIPS_REG_F27 = 84
|
||||
MIPS_REG_F28 = 85
|
||||
MIPS_REG_F29 = 86
|
||||
MIPS_REG_F30 = 87
|
||||
MIPS_REG_F31 = 88
|
||||
MIPS_REG_FCC0 = 89
|
||||
MIPS_REG_FCC1 = 90
|
||||
MIPS_REG_FCC2 = 91
|
||||
MIPS_REG_FCC3 = 92
|
||||
MIPS_REG_FCC4 = 93
|
||||
MIPS_REG_FCC5 = 94
|
||||
MIPS_REG_FCC6 = 95
|
||||
MIPS_REG_FCC7 = 96
|
||||
UC_MIPS_REG_F0 = 57
|
||||
UC_MIPS_REG_F1 = 58
|
||||
UC_MIPS_REG_F2 = 59
|
||||
UC_MIPS_REG_F3 = 60
|
||||
UC_MIPS_REG_F4 = 61
|
||||
UC_MIPS_REG_F5 = 62
|
||||
UC_MIPS_REG_F6 = 63
|
||||
UC_MIPS_REG_F7 = 64
|
||||
UC_MIPS_REG_F8 = 65
|
||||
UC_MIPS_REG_F9 = 66
|
||||
UC_MIPS_REG_F10 = 67
|
||||
UC_MIPS_REG_F11 = 68
|
||||
UC_MIPS_REG_F12 = 69
|
||||
UC_MIPS_REG_F13 = 70
|
||||
UC_MIPS_REG_F14 = 71
|
||||
UC_MIPS_REG_F15 = 72
|
||||
UC_MIPS_REG_F16 = 73
|
||||
UC_MIPS_REG_F17 = 74
|
||||
UC_MIPS_REG_F18 = 75
|
||||
UC_MIPS_REG_F19 = 76
|
||||
UC_MIPS_REG_F20 = 77
|
||||
UC_MIPS_REG_F21 = 78
|
||||
UC_MIPS_REG_F22 = 79
|
||||
UC_MIPS_REG_F23 = 80
|
||||
UC_MIPS_REG_F24 = 81
|
||||
UC_MIPS_REG_F25 = 82
|
||||
UC_MIPS_REG_F26 = 83
|
||||
UC_MIPS_REG_F27 = 84
|
||||
UC_MIPS_REG_F28 = 85
|
||||
UC_MIPS_REG_F29 = 86
|
||||
UC_MIPS_REG_F30 = 87
|
||||
UC_MIPS_REG_F31 = 88
|
||||
UC_MIPS_REG_FCC0 = 89
|
||||
UC_MIPS_REG_FCC1 = 90
|
||||
UC_MIPS_REG_FCC2 = 91
|
||||
UC_MIPS_REG_FCC3 = 92
|
||||
UC_MIPS_REG_FCC4 = 93
|
||||
UC_MIPS_REG_FCC5 = 94
|
||||
UC_MIPS_REG_FCC6 = 95
|
||||
UC_MIPS_REG_FCC7 = 96
|
||||
|
||||
# AFPR128
|
||||
MIPS_REG_W0 = 97
|
||||
MIPS_REG_W1 = 98
|
||||
MIPS_REG_W2 = 99
|
||||
MIPS_REG_W3 = 100
|
||||
MIPS_REG_W4 = 101
|
||||
MIPS_REG_W5 = 102
|
||||
MIPS_REG_W6 = 103
|
||||
MIPS_REG_W7 = 104
|
||||
MIPS_REG_W8 = 105
|
||||
MIPS_REG_W9 = 106
|
||||
MIPS_REG_W10 = 107
|
||||
MIPS_REG_W11 = 108
|
||||
MIPS_REG_W12 = 109
|
||||
MIPS_REG_W13 = 110
|
||||
MIPS_REG_W14 = 111
|
||||
MIPS_REG_W15 = 112
|
||||
MIPS_REG_W16 = 113
|
||||
MIPS_REG_W17 = 114
|
||||
MIPS_REG_W18 = 115
|
||||
MIPS_REG_W19 = 116
|
||||
MIPS_REG_W20 = 117
|
||||
MIPS_REG_W21 = 118
|
||||
MIPS_REG_W22 = 119
|
||||
MIPS_REG_W23 = 120
|
||||
MIPS_REG_W24 = 121
|
||||
MIPS_REG_W25 = 122
|
||||
MIPS_REG_W26 = 123
|
||||
MIPS_REG_W27 = 124
|
||||
MIPS_REG_W28 = 125
|
||||
MIPS_REG_W29 = 126
|
||||
MIPS_REG_W30 = 127
|
||||
MIPS_REG_W31 = 128
|
||||
MIPS_REG_HI = 129
|
||||
MIPS_REG_LO = 130
|
||||
MIPS_REG_P0 = 131
|
||||
MIPS_REG_P1 = 132
|
||||
MIPS_REG_P2 = 133
|
||||
MIPS_REG_MPL0 = 134
|
||||
MIPS_REG_MPL1 = 135
|
||||
MIPS_REG_MPL2 = 136
|
||||
MIPS_REG_ENDING = 137
|
||||
MIPS_REG_ZERO = MIPS_REG_0
|
||||
MIPS_REG_AT = MIPS_REG_1
|
||||
MIPS_REG_V0 = MIPS_REG_2
|
||||
MIPS_REG_V1 = MIPS_REG_3
|
||||
MIPS_REG_A0 = MIPS_REG_4
|
||||
MIPS_REG_A1 = MIPS_REG_5
|
||||
MIPS_REG_A2 = MIPS_REG_6
|
||||
MIPS_REG_A3 = MIPS_REG_7
|
||||
MIPS_REG_T0 = MIPS_REG_8
|
||||
MIPS_REG_T1 = MIPS_REG_9
|
||||
MIPS_REG_T2 = MIPS_REG_10
|
||||
MIPS_REG_T3 = MIPS_REG_11
|
||||
MIPS_REG_T4 = MIPS_REG_12
|
||||
MIPS_REG_T5 = MIPS_REG_13
|
||||
MIPS_REG_T6 = MIPS_REG_14
|
||||
MIPS_REG_T7 = MIPS_REG_15
|
||||
MIPS_REG_S0 = MIPS_REG_16
|
||||
MIPS_REG_S1 = MIPS_REG_17
|
||||
MIPS_REG_S2 = MIPS_REG_18
|
||||
MIPS_REG_S3 = MIPS_REG_19
|
||||
MIPS_REG_S4 = MIPS_REG_20
|
||||
MIPS_REG_S5 = MIPS_REG_21
|
||||
MIPS_REG_S6 = MIPS_REG_22
|
||||
MIPS_REG_S7 = MIPS_REG_23
|
||||
MIPS_REG_T8 = MIPS_REG_24
|
||||
MIPS_REG_T9 = MIPS_REG_25
|
||||
MIPS_REG_K0 = MIPS_REG_26
|
||||
MIPS_REG_K1 = MIPS_REG_27
|
||||
MIPS_REG_GP = MIPS_REG_28
|
||||
MIPS_REG_SP = MIPS_REG_29
|
||||
MIPS_REG_FP = MIPS_REG_30
|
||||
MIPS_REG_S8 = MIPS_REG_30
|
||||
MIPS_REG_RA = MIPS_REG_31
|
||||
MIPS_REG_HI0 = MIPS_REG_AC0
|
||||
MIPS_REG_HI1 = MIPS_REG_AC1
|
||||
MIPS_REG_HI2 = MIPS_REG_AC2
|
||||
MIPS_REG_HI3 = MIPS_REG_AC3
|
||||
MIPS_REG_LO0 = MIPS_REG_HI0
|
||||
MIPS_REG_LO1 = MIPS_REG_HI1
|
||||
MIPS_REG_LO2 = MIPS_REG_HI2
|
||||
MIPS_REG_LO3 = MIPS_REG_HI3
|
||||
UC_MIPS_REG_W0 = 97
|
||||
UC_MIPS_REG_W1 = 98
|
||||
UC_MIPS_REG_W2 = 99
|
||||
UC_MIPS_REG_W3 = 100
|
||||
UC_MIPS_REG_W4 = 101
|
||||
UC_MIPS_REG_W5 = 102
|
||||
UC_MIPS_REG_W6 = 103
|
||||
UC_MIPS_REG_W7 = 104
|
||||
UC_MIPS_REG_W8 = 105
|
||||
UC_MIPS_REG_W9 = 106
|
||||
UC_MIPS_REG_W10 = 107
|
||||
UC_MIPS_REG_W11 = 108
|
||||
UC_MIPS_REG_W12 = 109
|
||||
UC_MIPS_REG_W13 = 110
|
||||
UC_MIPS_REG_W14 = 111
|
||||
UC_MIPS_REG_W15 = 112
|
||||
UC_MIPS_REG_W16 = 113
|
||||
UC_MIPS_REG_W17 = 114
|
||||
UC_MIPS_REG_W18 = 115
|
||||
UC_MIPS_REG_W19 = 116
|
||||
UC_MIPS_REG_W20 = 117
|
||||
UC_MIPS_REG_W21 = 118
|
||||
UC_MIPS_REG_W22 = 119
|
||||
UC_MIPS_REG_W23 = 120
|
||||
UC_MIPS_REG_W24 = 121
|
||||
UC_MIPS_REG_W25 = 122
|
||||
UC_MIPS_REG_W26 = 123
|
||||
UC_MIPS_REG_W27 = 124
|
||||
UC_MIPS_REG_W28 = 125
|
||||
UC_MIPS_REG_W29 = 126
|
||||
UC_MIPS_REG_W30 = 127
|
||||
UC_MIPS_REG_W31 = 128
|
||||
UC_MIPS_REG_HI = 129
|
||||
UC_MIPS_REG_LO = 130
|
||||
UC_MIPS_REG_P0 = 131
|
||||
UC_MIPS_REG_P1 = 132
|
||||
UC_MIPS_REG_P2 = 133
|
||||
UC_MIPS_REG_MPL0 = 134
|
||||
UC_MIPS_REG_MPL1 = 135
|
||||
UC_MIPS_REG_MPL2 = 136
|
||||
UC_MIPS_REG_ENDING = 137
|
||||
UC_MIPS_REG_ZERO = UC_MIPS_REG_0
|
||||
UC_MIPS_REG_AT = UC_MIPS_REG_1
|
||||
UC_MIPS_REG_V0 = UC_MIPS_REG_2
|
||||
UC_MIPS_REG_V1 = UC_MIPS_REG_3
|
||||
UC_MIPS_REG_A0 = UC_MIPS_REG_4
|
||||
UC_MIPS_REG_A1 = UC_MIPS_REG_5
|
||||
UC_MIPS_REG_A2 = UC_MIPS_REG_6
|
||||
UC_MIPS_REG_A3 = UC_MIPS_REG_7
|
||||
UC_MIPS_REG_T0 = UC_MIPS_REG_8
|
||||
UC_MIPS_REG_T1 = UC_MIPS_REG_9
|
||||
UC_MIPS_REG_T2 = UC_MIPS_REG_10
|
||||
UC_MIPS_REG_T3 = UC_MIPS_REG_11
|
||||
UC_MIPS_REG_T4 = UC_MIPS_REG_12
|
||||
UC_MIPS_REG_T5 = UC_MIPS_REG_13
|
||||
UC_MIPS_REG_T6 = UC_MIPS_REG_14
|
||||
UC_MIPS_REG_T7 = UC_MIPS_REG_15
|
||||
UC_MIPS_REG_S0 = UC_MIPS_REG_16
|
||||
UC_MIPS_REG_S1 = UC_MIPS_REG_17
|
||||
UC_MIPS_REG_S2 = UC_MIPS_REG_18
|
||||
UC_MIPS_REG_S3 = UC_MIPS_REG_19
|
||||
UC_MIPS_REG_S4 = UC_MIPS_REG_20
|
||||
UC_MIPS_REG_S5 = UC_MIPS_REG_21
|
||||
UC_MIPS_REG_S6 = UC_MIPS_REG_22
|
||||
UC_MIPS_REG_S7 = UC_MIPS_REG_23
|
||||
UC_MIPS_REG_T8 = UC_MIPS_REG_24
|
||||
UC_MIPS_REG_T9 = UC_MIPS_REG_25
|
||||
UC_MIPS_REG_K0 = UC_MIPS_REG_26
|
||||
UC_MIPS_REG_K1 = UC_MIPS_REG_27
|
||||
UC_MIPS_REG_GP = UC_MIPS_REG_28
|
||||
UC_MIPS_REG_SP = UC_MIPS_REG_29
|
||||
UC_MIPS_REG_FP = UC_MIPS_REG_30
|
||||
UC_MIPS_REG_S8 = UC_MIPS_REG_30
|
||||
UC_MIPS_REG_RA = UC_MIPS_REG_31
|
||||
UC_MIPS_REG_HI0 = UC_MIPS_REG_AC0
|
||||
UC_MIPS_REG_HI1 = UC_MIPS_REG_AC1
|
||||
UC_MIPS_REG_HI2 = UC_MIPS_REG_AC2
|
||||
UC_MIPS_REG_HI3 = UC_MIPS_REG_AC3
|
||||
UC_MIPS_REG_LO0 = UC_MIPS_REG_HI0
|
||||
UC_MIPS_REG_LO1 = UC_MIPS_REG_HI1
|
||||
UC_MIPS_REG_LO2 = UC_MIPS_REG_HI2
|
||||
UC_MIPS_REG_LO3 = UC_MIPS_REG_HI3
|
||||
|
|
|
@ -2,95 +2,95 @@
|
|||
|
||||
# SPARC registers
|
||||
|
||||
SPARC_REG_INVALID = 0
|
||||
SPARC_REG_F0 = 1
|
||||
SPARC_REG_F1 = 2
|
||||
SPARC_REG_F2 = 3
|
||||
SPARC_REG_F3 = 4
|
||||
SPARC_REG_F4 = 5
|
||||
SPARC_REG_F5 = 6
|
||||
SPARC_REG_F6 = 7
|
||||
SPARC_REG_F7 = 8
|
||||
SPARC_REG_F8 = 9
|
||||
SPARC_REG_F9 = 10
|
||||
SPARC_REG_F10 = 11
|
||||
SPARC_REG_F11 = 12
|
||||
SPARC_REG_F12 = 13
|
||||
SPARC_REG_F13 = 14
|
||||
SPARC_REG_F14 = 15
|
||||
SPARC_REG_F15 = 16
|
||||
SPARC_REG_F16 = 17
|
||||
SPARC_REG_F17 = 18
|
||||
SPARC_REG_F18 = 19
|
||||
SPARC_REG_F19 = 20
|
||||
SPARC_REG_F20 = 21
|
||||
SPARC_REG_F21 = 22
|
||||
SPARC_REG_F22 = 23
|
||||
SPARC_REG_F23 = 24
|
||||
SPARC_REG_F24 = 25
|
||||
SPARC_REG_F25 = 26
|
||||
SPARC_REG_F26 = 27
|
||||
SPARC_REG_F27 = 28
|
||||
SPARC_REG_F28 = 29
|
||||
SPARC_REG_F29 = 30
|
||||
SPARC_REG_F30 = 31
|
||||
SPARC_REG_F31 = 32
|
||||
SPARC_REG_F32 = 33
|
||||
SPARC_REG_F34 = 34
|
||||
SPARC_REG_F36 = 35
|
||||
SPARC_REG_F38 = 36
|
||||
SPARC_REG_F40 = 37
|
||||
SPARC_REG_F42 = 38
|
||||
SPARC_REG_F44 = 39
|
||||
SPARC_REG_F46 = 40
|
||||
SPARC_REG_F48 = 41
|
||||
SPARC_REG_F50 = 42
|
||||
SPARC_REG_F52 = 43
|
||||
SPARC_REG_F54 = 44
|
||||
SPARC_REG_F56 = 45
|
||||
SPARC_REG_F58 = 46
|
||||
SPARC_REG_F60 = 47
|
||||
SPARC_REG_F62 = 48
|
||||
SPARC_REG_FCC0 = 49
|
||||
SPARC_REG_FCC1 = 50
|
||||
SPARC_REG_FCC2 = 51
|
||||
SPARC_REG_FCC3 = 52
|
||||
SPARC_REG_FP = 53
|
||||
SPARC_REG_G0 = 54
|
||||
SPARC_REG_G1 = 55
|
||||
SPARC_REG_G2 = 56
|
||||
SPARC_REG_G3 = 57
|
||||
SPARC_REG_G4 = 58
|
||||
SPARC_REG_G5 = 59
|
||||
SPARC_REG_G6 = 60
|
||||
SPARC_REG_G7 = 61
|
||||
SPARC_REG_I0 = 62
|
||||
SPARC_REG_I1 = 63
|
||||
SPARC_REG_I2 = 64
|
||||
SPARC_REG_I3 = 65
|
||||
SPARC_REG_I4 = 66
|
||||
SPARC_REG_I5 = 67
|
||||
SPARC_REG_I7 = 68
|
||||
SPARC_REG_ICC = 69
|
||||
SPARC_REG_L0 = 70
|
||||
SPARC_REG_L1 = 71
|
||||
SPARC_REG_L2 = 72
|
||||
SPARC_REG_L3 = 73
|
||||
SPARC_REG_L4 = 74
|
||||
SPARC_REG_L5 = 75
|
||||
SPARC_REG_L6 = 76
|
||||
SPARC_REG_L7 = 77
|
||||
SPARC_REG_O0 = 78
|
||||
SPARC_REG_O1 = 79
|
||||
SPARC_REG_O2 = 80
|
||||
SPARC_REG_O3 = 81
|
||||
SPARC_REG_O4 = 82
|
||||
SPARC_REG_O5 = 83
|
||||
SPARC_REG_O7 = 84
|
||||
SPARC_REG_SP = 85
|
||||
SPARC_REG_Y = 86
|
||||
SPARC_REG_XCC = 87
|
||||
SPARC_REG_PC = 88
|
||||
SPARC_REG_ENDING = 89
|
||||
SPARC_REG_O6 = SPARC_REG_SP
|
||||
SPARC_REG_I6 = SPARC_REG_FP
|
||||
UC_SPARC_REG_INVALID = 0
|
||||
UC_SPARC_REG_F0 = 1
|
||||
UC_SPARC_REG_F1 = 2
|
||||
UC_SPARC_REG_F2 = 3
|
||||
UC_SPARC_REG_F3 = 4
|
||||
UC_SPARC_REG_F4 = 5
|
||||
UC_SPARC_REG_F5 = 6
|
||||
UC_SPARC_REG_F6 = 7
|
||||
UC_SPARC_REG_F7 = 8
|
||||
UC_SPARC_REG_F8 = 9
|
||||
UC_SPARC_REG_F9 = 10
|
||||
UC_SPARC_REG_F10 = 11
|
||||
UC_SPARC_REG_F11 = 12
|
||||
UC_SPARC_REG_F12 = 13
|
||||
UC_SPARC_REG_F13 = 14
|
||||
UC_SPARC_REG_F14 = 15
|
||||
UC_SPARC_REG_F15 = 16
|
||||
UC_SPARC_REG_F16 = 17
|
||||
UC_SPARC_REG_F17 = 18
|
||||
UC_SPARC_REG_F18 = 19
|
||||
UC_SPARC_REG_F19 = 20
|
||||
UC_SPARC_REG_F20 = 21
|
||||
UC_SPARC_REG_F21 = 22
|
||||
UC_SPARC_REG_F22 = 23
|
||||
UC_SPARC_REG_F23 = 24
|
||||
UC_SPARC_REG_F24 = 25
|
||||
UC_SPARC_REG_F25 = 26
|
||||
UC_SPARC_REG_F26 = 27
|
||||
UC_SPARC_REG_F27 = 28
|
||||
UC_SPARC_REG_F28 = 29
|
||||
UC_SPARC_REG_F29 = 30
|
||||
UC_SPARC_REG_F30 = 31
|
||||
UC_SPARC_REG_F31 = 32
|
||||
UC_SPARC_REG_F32 = 33
|
||||
UC_SPARC_REG_F34 = 34
|
||||
UC_SPARC_REG_F36 = 35
|
||||
UC_SPARC_REG_F38 = 36
|
||||
UC_SPARC_REG_F40 = 37
|
||||
UC_SPARC_REG_F42 = 38
|
||||
UC_SPARC_REG_F44 = 39
|
||||
UC_SPARC_REG_F46 = 40
|
||||
UC_SPARC_REG_F48 = 41
|
||||
UC_SPARC_REG_F50 = 42
|
||||
UC_SPARC_REG_F52 = 43
|
||||
UC_SPARC_REG_F54 = 44
|
||||
UC_SPARC_REG_F56 = 45
|
||||
UC_SPARC_REG_F58 = 46
|
||||
UC_SPARC_REG_F60 = 47
|
||||
UC_SPARC_REG_F62 = 48
|
||||
UC_SPARC_REG_FCC0 = 49
|
||||
UC_SPARC_REG_FCC1 = 50
|
||||
UC_SPARC_REG_FCC2 = 51
|
||||
UC_SPARC_REG_FCC3 = 52
|
||||
UC_SPARC_REG_FP = 53
|
||||
UC_SPARC_REG_G0 = 54
|
||||
UC_SPARC_REG_G1 = 55
|
||||
UC_SPARC_REG_G2 = 56
|
||||
UC_SPARC_REG_G3 = 57
|
||||
UC_SPARC_REG_G4 = 58
|
||||
UC_SPARC_REG_G5 = 59
|
||||
UC_SPARC_REG_G6 = 60
|
||||
UC_SPARC_REG_G7 = 61
|
||||
UC_SPARC_REG_I0 = 62
|
||||
UC_SPARC_REG_I1 = 63
|
||||
UC_SPARC_REG_I2 = 64
|
||||
UC_SPARC_REG_I3 = 65
|
||||
UC_SPARC_REG_I4 = 66
|
||||
UC_SPARC_REG_I5 = 67
|
||||
UC_SPARC_REG_I7 = 68
|
||||
UC_SPARC_REG_ICC = 69
|
||||
UC_SPARC_REG_L0 = 70
|
||||
UC_SPARC_REG_L1 = 71
|
||||
UC_SPARC_REG_L2 = 72
|
||||
UC_SPARC_REG_L3 = 73
|
||||
UC_SPARC_REG_L4 = 74
|
||||
UC_SPARC_REG_L5 = 75
|
||||
UC_SPARC_REG_L6 = 76
|
||||
UC_SPARC_REG_L7 = 77
|
||||
UC_SPARC_REG_O0 = 78
|
||||
UC_SPARC_REG_O1 = 79
|
||||
UC_SPARC_REG_O2 = 80
|
||||
UC_SPARC_REG_O3 = 81
|
||||
UC_SPARC_REG_O4 = 82
|
||||
UC_SPARC_REG_O5 = 83
|
||||
UC_SPARC_REG_O7 = 84
|
||||
UC_SPARC_REG_SP = 85
|
||||
UC_SPARC_REG_Y = 86
|
||||
UC_SPARC_REG_XCC = 87
|
||||
UC_SPARC_REG_PC = 88
|
||||
UC_SPARC_REG_ENDING = 89
|
||||
UC_SPARC_REG_O6 = UC_SPARC_REG_SP
|
||||
UC_SPARC_REG_I6 = UC_SPARC_REG_FP
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -146,6 +146,7 @@ struct uc_struct {
|
|||
int hook_intr_idx; // for handling interrupt
|
||||
int hook_out_idx; // for handling OUT instruction (X86)
|
||||
int hook_in_idx; // for handling IN instruction (X86)
|
||||
int hook_syscall_idx; // for handling SYSCALL/SYSENTER (X86)
|
||||
|
||||
|
||||
bool init_tcg; // already initialized local TCGv variables?
|
||||
|
|
|
@ -13,131 +13,131 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
//> ARM registers
|
||||
typedef enum arm_reg {
|
||||
ARM_REG_INVALID = 0,
|
||||
ARM_REG_APSR,
|
||||
ARM_REG_APSR_NZCV,
|
||||
ARM_REG_CPSR,
|
||||
ARM_REG_FPEXC,
|
||||
ARM_REG_FPINST,
|
||||
ARM_REG_FPSCR,
|
||||
ARM_REG_FPSCR_NZCV,
|
||||
ARM_REG_FPSID,
|
||||
ARM_REG_ITSTATE,
|
||||
ARM_REG_LR,
|
||||
ARM_REG_PC,
|
||||
ARM_REG_SP,
|
||||
ARM_REG_SPSR,
|
||||
ARM_REG_D0,
|
||||
ARM_REG_D1,
|
||||
ARM_REG_D2,
|
||||
ARM_REG_D3,
|
||||
ARM_REG_D4,
|
||||
ARM_REG_D5,
|
||||
ARM_REG_D6,
|
||||
ARM_REG_D7,
|
||||
ARM_REG_D8,
|
||||
ARM_REG_D9,
|
||||
ARM_REG_D10,
|
||||
ARM_REG_D11,
|
||||
ARM_REG_D12,
|
||||
ARM_REG_D13,
|
||||
ARM_REG_D14,
|
||||
ARM_REG_D15,
|
||||
ARM_REG_D16,
|
||||
ARM_REG_D17,
|
||||
ARM_REG_D18,
|
||||
ARM_REG_D19,
|
||||
ARM_REG_D20,
|
||||
ARM_REG_D21,
|
||||
ARM_REG_D22,
|
||||
ARM_REG_D23,
|
||||
ARM_REG_D24,
|
||||
ARM_REG_D25,
|
||||
ARM_REG_D26,
|
||||
ARM_REG_D27,
|
||||
ARM_REG_D28,
|
||||
ARM_REG_D29,
|
||||
ARM_REG_D30,
|
||||
ARM_REG_D31,
|
||||
ARM_REG_FPINST2,
|
||||
ARM_REG_MVFR0,
|
||||
ARM_REG_MVFR1,
|
||||
ARM_REG_MVFR2,
|
||||
ARM_REG_Q0,
|
||||
ARM_REG_Q1,
|
||||
ARM_REG_Q2,
|
||||
ARM_REG_Q3,
|
||||
ARM_REG_Q4,
|
||||
ARM_REG_Q5,
|
||||
ARM_REG_Q6,
|
||||
ARM_REG_Q7,
|
||||
ARM_REG_Q8,
|
||||
ARM_REG_Q9,
|
||||
ARM_REG_Q10,
|
||||
ARM_REG_Q11,
|
||||
ARM_REG_Q12,
|
||||
ARM_REG_Q13,
|
||||
ARM_REG_Q14,
|
||||
ARM_REG_Q15,
|
||||
ARM_REG_R0,
|
||||
ARM_REG_R1,
|
||||
ARM_REG_R2,
|
||||
ARM_REG_R3,
|
||||
ARM_REG_R4,
|
||||
ARM_REG_R5,
|
||||
ARM_REG_R6,
|
||||
ARM_REG_R7,
|
||||
ARM_REG_R8,
|
||||
ARM_REG_R9,
|
||||
ARM_REG_R10,
|
||||
ARM_REG_R11,
|
||||
ARM_REG_R12,
|
||||
ARM_REG_S0,
|
||||
ARM_REG_S1,
|
||||
ARM_REG_S2,
|
||||
ARM_REG_S3,
|
||||
ARM_REG_S4,
|
||||
ARM_REG_S5,
|
||||
ARM_REG_S6,
|
||||
ARM_REG_S7,
|
||||
ARM_REG_S8,
|
||||
ARM_REG_S9,
|
||||
ARM_REG_S10,
|
||||
ARM_REG_S11,
|
||||
ARM_REG_S12,
|
||||
ARM_REG_S13,
|
||||
ARM_REG_S14,
|
||||
ARM_REG_S15,
|
||||
ARM_REG_S16,
|
||||
ARM_REG_S17,
|
||||
ARM_REG_S18,
|
||||
ARM_REG_S19,
|
||||
ARM_REG_S20,
|
||||
ARM_REG_S21,
|
||||
ARM_REG_S22,
|
||||
ARM_REG_S23,
|
||||
ARM_REG_S24,
|
||||
ARM_REG_S25,
|
||||
ARM_REG_S26,
|
||||
ARM_REG_S27,
|
||||
ARM_REG_S28,
|
||||
ARM_REG_S29,
|
||||
ARM_REG_S30,
|
||||
ARM_REG_S31,
|
||||
typedef enum uc_arm_reg {
|
||||
UC_ARM_REG_INVALID = 0,
|
||||
UC_ARM_REG_APSR,
|
||||
UC_ARM_REG_APSR_NZCV,
|
||||
UC_ARM_REG_CPSR,
|
||||
UC_ARM_REG_FPEXC,
|
||||
UC_ARM_REG_FPINST,
|
||||
UC_ARM_REG_FPSCR,
|
||||
UC_ARM_REG_FPSCR_NZCV,
|
||||
UC_ARM_REG_FPSID,
|
||||
UC_ARM_REG_ITSTATE,
|
||||
UC_ARM_REG_LR,
|
||||
UC_ARM_REG_PC,
|
||||
UC_ARM_REG_SP,
|
||||
UC_ARM_REG_SPSR,
|
||||
UC_ARM_REG_D0,
|
||||
UC_ARM_REG_D1,
|
||||
UC_ARM_REG_D2,
|
||||
UC_ARM_REG_D3,
|
||||
UC_ARM_REG_D4,
|
||||
UC_ARM_REG_D5,
|
||||
UC_ARM_REG_D6,
|
||||
UC_ARM_REG_D7,
|
||||
UC_ARM_REG_D8,
|
||||
UC_ARM_REG_D9,
|
||||
UC_ARM_REG_D10,
|
||||
UC_ARM_REG_D11,
|
||||
UC_ARM_REG_D12,
|
||||
UC_ARM_REG_D13,
|
||||
UC_ARM_REG_D14,
|
||||
UC_ARM_REG_D15,
|
||||
UC_ARM_REG_D16,
|
||||
UC_ARM_REG_D17,
|
||||
UC_ARM_REG_D18,
|
||||
UC_ARM_REG_D19,
|
||||
UC_ARM_REG_D20,
|
||||
UC_ARM_REG_D21,
|
||||
UC_ARM_REG_D22,
|
||||
UC_ARM_REG_D23,
|
||||
UC_ARM_REG_D24,
|
||||
UC_ARM_REG_D25,
|
||||
UC_ARM_REG_D26,
|
||||
UC_ARM_REG_D27,
|
||||
UC_ARM_REG_D28,
|
||||
UC_ARM_REG_D29,
|
||||
UC_ARM_REG_D30,
|
||||
UC_ARM_REG_D31,
|
||||
UC_ARM_REG_FPINST2,
|
||||
UC_ARM_REG_MVFR0,
|
||||
UC_ARM_REG_MVFR1,
|
||||
UC_ARM_REG_MVFR2,
|
||||
UC_ARM_REG_Q0,
|
||||
UC_ARM_REG_Q1,
|
||||
UC_ARM_REG_Q2,
|
||||
UC_ARM_REG_Q3,
|
||||
UC_ARM_REG_Q4,
|
||||
UC_ARM_REG_Q5,
|
||||
UC_ARM_REG_Q6,
|
||||
UC_ARM_REG_Q7,
|
||||
UC_ARM_REG_Q8,
|
||||
UC_ARM_REG_Q9,
|
||||
UC_ARM_REG_Q10,
|
||||
UC_ARM_REG_Q11,
|
||||
UC_ARM_REG_Q12,
|
||||
UC_ARM_REG_Q13,
|
||||
UC_ARM_REG_Q14,
|
||||
UC_ARM_REG_Q15,
|
||||
UC_ARM_REG_R0,
|
||||
UC_ARM_REG_R1,
|
||||
UC_ARM_REG_R2,
|
||||
UC_ARM_REG_R3,
|
||||
UC_ARM_REG_R4,
|
||||
UC_ARM_REG_R5,
|
||||
UC_ARM_REG_R6,
|
||||
UC_ARM_REG_R7,
|
||||
UC_ARM_REG_R8,
|
||||
UC_ARM_REG_R9,
|
||||
UC_ARM_REG_R10,
|
||||
UC_ARM_REG_R11,
|
||||
UC_ARM_REG_R12,
|
||||
UC_ARM_REG_S0,
|
||||
UC_ARM_REG_S1,
|
||||
UC_ARM_REG_S2,
|
||||
UC_ARM_REG_S3,
|
||||
UC_ARM_REG_S4,
|
||||
UC_ARM_REG_S5,
|
||||
UC_ARM_REG_S6,
|
||||
UC_ARM_REG_S7,
|
||||
UC_ARM_REG_S8,
|
||||
UC_ARM_REG_S9,
|
||||
UC_ARM_REG_S10,
|
||||
UC_ARM_REG_S11,
|
||||
UC_ARM_REG_S12,
|
||||
UC_ARM_REG_S13,
|
||||
UC_ARM_REG_S14,
|
||||
UC_ARM_REG_S15,
|
||||
UC_ARM_REG_S16,
|
||||
UC_ARM_REG_S17,
|
||||
UC_ARM_REG_S18,
|
||||
UC_ARM_REG_S19,
|
||||
UC_ARM_REG_S20,
|
||||
UC_ARM_REG_S21,
|
||||
UC_ARM_REG_S22,
|
||||
UC_ARM_REG_S23,
|
||||
UC_ARM_REG_S24,
|
||||
UC_ARM_REG_S25,
|
||||
UC_ARM_REG_S26,
|
||||
UC_ARM_REG_S27,
|
||||
UC_ARM_REG_S28,
|
||||
UC_ARM_REG_S29,
|
||||
UC_ARM_REG_S30,
|
||||
UC_ARM_REG_S31,
|
||||
|
||||
ARM_REG_ENDING, // <-- mark the end of the list or registers
|
||||
UC_ARM_REG_ENDING, // <-- mark the end of the list or registers
|
||||
|
||||
//> alias registers
|
||||
ARM_REG_R13 = ARM_REG_SP,
|
||||
ARM_REG_R14 = ARM_REG_LR,
|
||||
ARM_REG_R15 = ARM_REG_PC,
|
||||
UC_ARM_REG_R13 = UC_ARM_REG_SP,
|
||||
UC_ARM_REG_R14 = UC_ARM_REG_LR,
|
||||
UC_ARM_REG_R15 = UC_ARM_REG_PC,
|
||||
|
||||
ARM_REG_SB = ARM_REG_R9,
|
||||
ARM_REG_SL = ARM_REG_R10,
|
||||
ARM_REG_FP = ARM_REG_R11,
|
||||
ARM_REG_IP = ARM_REG_R12,
|
||||
} arm_reg;
|
||||
UC_ARM_REG_SB = UC_ARM_REG_R9,
|
||||
UC_ARM_REG_SL = UC_ARM_REG_R10,
|
||||
UC_ARM_REG_FP = UC_ARM_REG_R11,
|
||||
UC_ARM_REG_IP = UC_ARM_REG_R12,
|
||||
} uc_arm_reg;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -13,282 +13,282 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
//> ARM64 registers
|
||||
typedef enum arm64_reg {
|
||||
ARM64_REG_INVALID = 0,
|
||||
typedef enum uc_arm64_reg {
|
||||
UC_ARM64_REG_INVALID = 0,
|
||||
|
||||
ARM64_REG_X29,
|
||||
ARM64_REG_X30,
|
||||
ARM64_REG_NZCV,
|
||||
ARM64_REG_SP,
|
||||
ARM64_REG_WSP,
|
||||
ARM64_REG_WZR,
|
||||
ARM64_REG_XZR,
|
||||
ARM64_REG_B0,
|
||||
ARM64_REG_B1,
|
||||
ARM64_REG_B2,
|
||||
ARM64_REG_B3,
|
||||
ARM64_REG_B4,
|
||||
ARM64_REG_B5,
|
||||
ARM64_REG_B6,
|
||||
ARM64_REG_B7,
|
||||
ARM64_REG_B8,
|
||||
ARM64_REG_B9,
|
||||
ARM64_REG_B10,
|
||||
ARM64_REG_B11,
|
||||
ARM64_REG_B12,
|
||||
ARM64_REG_B13,
|
||||
ARM64_REG_B14,
|
||||
ARM64_REG_B15,
|
||||
ARM64_REG_B16,
|
||||
ARM64_REG_B17,
|
||||
ARM64_REG_B18,
|
||||
ARM64_REG_B19,
|
||||
ARM64_REG_B20,
|
||||
ARM64_REG_B21,
|
||||
ARM64_REG_B22,
|
||||
ARM64_REG_B23,
|
||||
ARM64_REG_B24,
|
||||
ARM64_REG_B25,
|
||||
ARM64_REG_B26,
|
||||
ARM64_REG_B27,
|
||||
ARM64_REG_B28,
|
||||
ARM64_REG_B29,
|
||||
ARM64_REG_B30,
|
||||
ARM64_REG_B31,
|
||||
ARM64_REG_D0,
|
||||
ARM64_REG_D1,
|
||||
ARM64_REG_D2,
|
||||
ARM64_REG_D3,
|
||||
ARM64_REG_D4,
|
||||
ARM64_REG_D5,
|
||||
ARM64_REG_D6,
|
||||
ARM64_REG_D7,
|
||||
ARM64_REG_D8,
|
||||
ARM64_REG_D9,
|
||||
ARM64_REG_D10,
|
||||
ARM64_REG_D11,
|
||||
ARM64_REG_D12,
|
||||
ARM64_REG_D13,
|
||||
ARM64_REG_D14,
|
||||
ARM64_REG_D15,
|
||||
ARM64_REG_D16,
|
||||
ARM64_REG_D17,
|
||||
ARM64_REG_D18,
|
||||
ARM64_REG_D19,
|
||||
ARM64_REG_D20,
|
||||
ARM64_REG_D21,
|
||||
ARM64_REG_D22,
|
||||
ARM64_REG_D23,
|
||||
ARM64_REG_D24,
|
||||
ARM64_REG_D25,
|
||||
ARM64_REG_D26,
|
||||
ARM64_REG_D27,
|
||||
ARM64_REG_D28,
|
||||
ARM64_REG_D29,
|
||||
ARM64_REG_D30,
|
||||
ARM64_REG_D31,
|
||||
ARM64_REG_H0,
|
||||
ARM64_REG_H1,
|
||||
ARM64_REG_H2,
|
||||
ARM64_REG_H3,
|
||||
ARM64_REG_H4,
|
||||
ARM64_REG_H5,
|
||||
ARM64_REG_H6,
|
||||
ARM64_REG_H7,
|
||||
ARM64_REG_H8,
|
||||
ARM64_REG_H9,
|
||||
ARM64_REG_H10,
|
||||
ARM64_REG_H11,
|
||||
ARM64_REG_H12,
|
||||
ARM64_REG_H13,
|
||||
ARM64_REG_H14,
|
||||
ARM64_REG_H15,
|
||||
ARM64_REG_H16,
|
||||
ARM64_REG_H17,
|
||||
ARM64_REG_H18,
|
||||
ARM64_REG_H19,
|
||||
ARM64_REG_H20,
|
||||
ARM64_REG_H21,
|
||||
ARM64_REG_H22,
|
||||
ARM64_REG_H23,
|
||||
ARM64_REG_H24,
|
||||
ARM64_REG_H25,
|
||||
ARM64_REG_H26,
|
||||
ARM64_REG_H27,
|
||||
ARM64_REG_H28,
|
||||
ARM64_REG_H29,
|
||||
ARM64_REG_H30,
|
||||
ARM64_REG_H31,
|
||||
ARM64_REG_Q0,
|
||||
ARM64_REG_Q1,
|
||||
ARM64_REG_Q2,
|
||||
ARM64_REG_Q3,
|
||||
ARM64_REG_Q4,
|
||||
ARM64_REG_Q5,
|
||||
ARM64_REG_Q6,
|
||||
ARM64_REG_Q7,
|
||||
ARM64_REG_Q8,
|
||||
ARM64_REG_Q9,
|
||||
ARM64_REG_Q10,
|
||||
ARM64_REG_Q11,
|
||||
ARM64_REG_Q12,
|
||||
ARM64_REG_Q13,
|
||||
ARM64_REG_Q14,
|
||||
ARM64_REG_Q15,
|
||||
ARM64_REG_Q16,
|
||||
ARM64_REG_Q17,
|
||||
ARM64_REG_Q18,
|
||||
ARM64_REG_Q19,
|
||||
ARM64_REG_Q20,
|
||||
ARM64_REG_Q21,
|
||||
ARM64_REG_Q22,
|
||||
ARM64_REG_Q23,
|
||||
ARM64_REG_Q24,
|
||||
ARM64_REG_Q25,
|
||||
ARM64_REG_Q26,
|
||||
ARM64_REG_Q27,
|
||||
ARM64_REG_Q28,
|
||||
ARM64_REG_Q29,
|
||||
ARM64_REG_Q30,
|
||||
ARM64_REG_Q31,
|
||||
ARM64_REG_S0,
|
||||
ARM64_REG_S1,
|
||||
ARM64_REG_S2,
|
||||
ARM64_REG_S3,
|
||||
ARM64_REG_S4,
|
||||
ARM64_REG_S5,
|
||||
ARM64_REG_S6,
|
||||
ARM64_REG_S7,
|
||||
ARM64_REG_S8,
|
||||
ARM64_REG_S9,
|
||||
ARM64_REG_S10,
|
||||
ARM64_REG_S11,
|
||||
ARM64_REG_S12,
|
||||
ARM64_REG_S13,
|
||||
ARM64_REG_S14,
|
||||
ARM64_REG_S15,
|
||||
ARM64_REG_S16,
|
||||
ARM64_REG_S17,
|
||||
ARM64_REG_S18,
|
||||
ARM64_REG_S19,
|
||||
ARM64_REG_S20,
|
||||
ARM64_REG_S21,
|
||||
ARM64_REG_S22,
|
||||
ARM64_REG_S23,
|
||||
ARM64_REG_S24,
|
||||
ARM64_REG_S25,
|
||||
ARM64_REG_S26,
|
||||
ARM64_REG_S27,
|
||||
ARM64_REG_S28,
|
||||
ARM64_REG_S29,
|
||||
ARM64_REG_S30,
|
||||
ARM64_REG_S31,
|
||||
ARM64_REG_W0,
|
||||
ARM64_REG_W1,
|
||||
ARM64_REG_W2,
|
||||
ARM64_REG_W3,
|
||||
ARM64_REG_W4,
|
||||
ARM64_REG_W5,
|
||||
ARM64_REG_W6,
|
||||
ARM64_REG_W7,
|
||||
ARM64_REG_W8,
|
||||
ARM64_REG_W9,
|
||||
ARM64_REG_W10,
|
||||
ARM64_REG_W11,
|
||||
ARM64_REG_W12,
|
||||
ARM64_REG_W13,
|
||||
ARM64_REG_W14,
|
||||
ARM64_REG_W15,
|
||||
ARM64_REG_W16,
|
||||
ARM64_REG_W17,
|
||||
ARM64_REG_W18,
|
||||
ARM64_REG_W19,
|
||||
ARM64_REG_W20,
|
||||
ARM64_REG_W21,
|
||||
ARM64_REG_W22,
|
||||
ARM64_REG_W23,
|
||||
ARM64_REG_W24,
|
||||
ARM64_REG_W25,
|
||||
ARM64_REG_W26,
|
||||
ARM64_REG_W27,
|
||||
ARM64_REG_W28,
|
||||
ARM64_REG_W29,
|
||||
ARM64_REG_W30,
|
||||
ARM64_REG_X0,
|
||||
ARM64_REG_X1,
|
||||
ARM64_REG_X2,
|
||||
ARM64_REG_X3,
|
||||
ARM64_REG_X4,
|
||||
ARM64_REG_X5,
|
||||
ARM64_REG_X6,
|
||||
ARM64_REG_X7,
|
||||
ARM64_REG_X8,
|
||||
ARM64_REG_X9,
|
||||
ARM64_REG_X10,
|
||||
ARM64_REG_X11,
|
||||
ARM64_REG_X12,
|
||||
ARM64_REG_X13,
|
||||
ARM64_REG_X14,
|
||||
ARM64_REG_X15,
|
||||
ARM64_REG_X16,
|
||||
ARM64_REG_X17,
|
||||
ARM64_REG_X18,
|
||||
ARM64_REG_X19,
|
||||
ARM64_REG_X20,
|
||||
ARM64_REG_X21,
|
||||
ARM64_REG_X22,
|
||||
ARM64_REG_X23,
|
||||
ARM64_REG_X24,
|
||||
ARM64_REG_X25,
|
||||
ARM64_REG_X26,
|
||||
ARM64_REG_X27,
|
||||
ARM64_REG_X28,
|
||||
UC_ARM64_REG_X29,
|
||||
UC_ARM64_REG_X30,
|
||||
UC_ARM64_REG_NZCV,
|
||||
UC_ARM64_REG_SP,
|
||||
UC_ARM64_REG_WSP,
|
||||
UC_ARM64_REG_WZR,
|
||||
UC_ARM64_REG_XZR,
|
||||
UC_ARM64_REG_B0,
|
||||
UC_ARM64_REG_B1,
|
||||
UC_ARM64_REG_B2,
|
||||
UC_ARM64_REG_B3,
|
||||
UC_ARM64_REG_B4,
|
||||
UC_ARM64_REG_B5,
|
||||
UC_ARM64_REG_B6,
|
||||
UC_ARM64_REG_B7,
|
||||
UC_ARM64_REG_B8,
|
||||
UC_ARM64_REG_B9,
|
||||
UC_ARM64_REG_B10,
|
||||
UC_ARM64_REG_B11,
|
||||
UC_ARM64_REG_B12,
|
||||
UC_ARM64_REG_B13,
|
||||
UC_ARM64_REG_B14,
|
||||
UC_ARM64_REG_B15,
|
||||
UC_ARM64_REG_B16,
|
||||
UC_ARM64_REG_B17,
|
||||
UC_ARM64_REG_B18,
|
||||
UC_ARM64_REG_B19,
|
||||
UC_ARM64_REG_B20,
|
||||
UC_ARM64_REG_B21,
|
||||
UC_ARM64_REG_B22,
|
||||
UC_ARM64_REG_B23,
|
||||
UC_ARM64_REG_B24,
|
||||
UC_ARM64_REG_B25,
|
||||
UC_ARM64_REG_B26,
|
||||
UC_ARM64_REG_B27,
|
||||
UC_ARM64_REG_B28,
|
||||
UC_ARM64_REG_B29,
|
||||
UC_ARM64_REG_B30,
|
||||
UC_ARM64_REG_B31,
|
||||
UC_ARM64_REG_D0,
|
||||
UC_ARM64_REG_D1,
|
||||
UC_ARM64_REG_D2,
|
||||
UC_ARM64_REG_D3,
|
||||
UC_ARM64_REG_D4,
|
||||
UC_ARM64_REG_D5,
|
||||
UC_ARM64_REG_D6,
|
||||
UC_ARM64_REG_D7,
|
||||
UC_ARM64_REG_D8,
|
||||
UC_ARM64_REG_D9,
|
||||
UC_ARM64_REG_D10,
|
||||
UC_ARM64_REG_D11,
|
||||
UC_ARM64_REG_D12,
|
||||
UC_ARM64_REG_D13,
|
||||
UC_ARM64_REG_D14,
|
||||
UC_ARM64_REG_D15,
|
||||
UC_ARM64_REG_D16,
|
||||
UC_ARM64_REG_D17,
|
||||
UC_ARM64_REG_D18,
|
||||
UC_ARM64_REG_D19,
|
||||
UC_ARM64_REG_D20,
|
||||
UC_ARM64_REG_D21,
|
||||
UC_ARM64_REG_D22,
|
||||
UC_ARM64_REG_D23,
|
||||
UC_ARM64_REG_D24,
|
||||
UC_ARM64_REG_D25,
|
||||
UC_ARM64_REG_D26,
|
||||
UC_ARM64_REG_D27,
|
||||
UC_ARM64_REG_D28,
|
||||
UC_ARM64_REG_D29,
|
||||
UC_ARM64_REG_D30,
|
||||
UC_ARM64_REG_D31,
|
||||
UC_ARM64_REG_H0,
|
||||
UC_ARM64_REG_H1,
|
||||
UC_ARM64_REG_H2,
|
||||
UC_ARM64_REG_H3,
|
||||
UC_ARM64_REG_H4,
|
||||
UC_ARM64_REG_H5,
|
||||
UC_ARM64_REG_H6,
|
||||
UC_ARM64_REG_H7,
|
||||
UC_ARM64_REG_H8,
|
||||
UC_ARM64_REG_H9,
|
||||
UC_ARM64_REG_H10,
|
||||
UC_ARM64_REG_H11,
|
||||
UC_ARM64_REG_H12,
|
||||
UC_ARM64_REG_H13,
|
||||
UC_ARM64_REG_H14,
|
||||
UC_ARM64_REG_H15,
|
||||
UC_ARM64_REG_H16,
|
||||
UC_ARM64_REG_H17,
|
||||
UC_ARM64_REG_H18,
|
||||
UC_ARM64_REG_H19,
|
||||
UC_ARM64_REG_H20,
|
||||
UC_ARM64_REG_H21,
|
||||
UC_ARM64_REG_H22,
|
||||
UC_ARM64_REG_H23,
|
||||
UC_ARM64_REG_H24,
|
||||
UC_ARM64_REG_H25,
|
||||
UC_ARM64_REG_H26,
|
||||
UC_ARM64_REG_H27,
|
||||
UC_ARM64_REG_H28,
|
||||
UC_ARM64_REG_H29,
|
||||
UC_ARM64_REG_H30,
|
||||
UC_ARM64_REG_H31,
|
||||
UC_ARM64_REG_Q0,
|
||||
UC_ARM64_REG_Q1,
|
||||
UC_ARM64_REG_Q2,
|
||||
UC_ARM64_REG_Q3,
|
||||
UC_ARM64_REG_Q4,
|
||||
UC_ARM64_REG_Q5,
|
||||
UC_ARM64_REG_Q6,
|
||||
UC_ARM64_REG_Q7,
|
||||
UC_ARM64_REG_Q8,
|
||||
UC_ARM64_REG_Q9,
|
||||
UC_ARM64_REG_Q10,
|
||||
UC_ARM64_REG_Q11,
|
||||
UC_ARM64_REG_Q12,
|
||||
UC_ARM64_REG_Q13,
|
||||
UC_ARM64_REG_Q14,
|
||||
UC_ARM64_REG_Q15,
|
||||
UC_ARM64_REG_Q16,
|
||||
UC_ARM64_REG_Q17,
|
||||
UC_ARM64_REG_Q18,
|
||||
UC_ARM64_REG_Q19,
|
||||
UC_ARM64_REG_Q20,
|
||||
UC_ARM64_REG_Q21,
|
||||
UC_ARM64_REG_Q22,
|
||||
UC_ARM64_REG_Q23,
|
||||
UC_ARM64_REG_Q24,
|
||||
UC_ARM64_REG_Q25,
|
||||
UC_ARM64_REG_Q26,
|
||||
UC_ARM64_REG_Q27,
|
||||
UC_ARM64_REG_Q28,
|
||||
UC_ARM64_REG_Q29,
|
||||
UC_ARM64_REG_Q30,
|
||||
UC_ARM64_REG_Q31,
|
||||
UC_ARM64_REG_S0,
|
||||
UC_ARM64_REG_S1,
|
||||
UC_ARM64_REG_S2,
|
||||
UC_ARM64_REG_S3,
|
||||
UC_ARM64_REG_S4,
|
||||
UC_ARM64_REG_S5,
|
||||
UC_ARM64_REG_S6,
|
||||
UC_ARM64_REG_S7,
|
||||
UC_ARM64_REG_S8,
|
||||
UC_ARM64_REG_S9,
|
||||
UC_ARM64_REG_S10,
|
||||
UC_ARM64_REG_S11,
|
||||
UC_ARM64_REG_S12,
|
||||
UC_ARM64_REG_S13,
|
||||
UC_ARM64_REG_S14,
|
||||
UC_ARM64_REG_S15,
|
||||
UC_ARM64_REG_S16,
|
||||
UC_ARM64_REG_S17,
|
||||
UC_ARM64_REG_S18,
|
||||
UC_ARM64_REG_S19,
|
||||
UC_ARM64_REG_S20,
|
||||
UC_ARM64_REG_S21,
|
||||
UC_ARM64_REG_S22,
|
||||
UC_ARM64_REG_S23,
|
||||
UC_ARM64_REG_S24,
|
||||
UC_ARM64_REG_S25,
|
||||
UC_ARM64_REG_S26,
|
||||
UC_ARM64_REG_S27,
|
||||
UC_ARM64_REG_S28,
|
||||
UC_ARM64_REG_S29,
|
||||
UC_ARM64_REG_S30,
|
||||
UC_ARM64_REG_S31,
|
||||
UC_ARM64_REG_W0,
|
||||
UC_ARM64_REG_W1,
|
||||
UC_ARM64_REG_W2,
|
||||
UC_ARM64_REG_W3,
|
||||
UC_ARM64_REG_W4,
|
||||
UC_ARM64_REG_W5,
|
||||
UC_ARM64_REG_W6,
|
||||
UC_ARM64_REG_W7,
|
||||
UC_ARM64_REG_W8,
|
||||
UC_ARM64_REG_W9,
|
||||
UC_ARM64_REG_W10,
|
||||
UC_ARM64_REG_W11,
|
||||
UC_ARM64_REG_W12,
|
||||
UC_ARM64_REG_W13,
|
||||
UC_ARM64_REG_W14,
|
||||
UC_ARM64_REG_W15,
|
||||
UC_ARM64_REG_W16,
|
||||
UC_ARM64_REG_W17,
|
||||
UC_ARM64_REG_W18,
|
||||
UC_ARM64_REG_W19,
|
||||
UC_ARM64_REG_W20,
|
||||
UC_ARM64_REG_W21,
|
||||
UC_ARM64_REG_W22,
|
||||
UC_ARM64_REG_W23,
|
||||
UC_ARM64_REG_W24,
|
||||
UC_ARM64_REG_W25,
|
||||
UC_ARM64_REG_W26,
|
||||
UC_ARM64_REG_W27,
|
||||
UC_ARM64_REG_W28,
|
||||
UC_ARM64_REG_W29,
|
||||
UC_ARM64_REG_W30,
|
||||
UC_ARM64_REG_X0,
|
||||
UC_ARM64_REG_X1,
|
||||
UC_ARM64_REG_X2,
|
||||
UC_ARM64_REG_X3,
|
||||
UC_ARM64_REG_X4,
|
||||
UC_ARM64_REG_X5,
|
||||
UC_ARM64_REG_X6,
|
||||
UC_ARM64_REG_X7,
|
||||
UC_ARM64_REG_X8,
|
||||
UC_ARM64_REG_X9,
|
||||
UC_ARM64_REG_X10,
|
||||
UC_ARM64_REG_X11,
|
||||
UC_ARM64_REG_X12,
|
||||
UC_ARM64_REG_X13,
|
||||
UC_ARM64_REG_X14,
|
||||
UC_ARM64_REG_X15,
|
||||
UC_ARM64_REG_X16,
|
||||
UC_ARM64_REG_X17,
|
||||
UC_ARM64_REG_X18,
|
||||
UC_ARM64_REG_X19,
|
||||
UC_ARM64_REG_X20,
|
||||
UC_ARM64_REG_X21,
|
||||
UC_ARM64_REG_X22,
|
||||
UC_ARM64_REG_X23,
|
||||
UC_ARM64_REG_X24,
|
||||
UC_ARM64_REG_X25,
|
||||
UC_ARM64_REG_X26,
|
||||
UC_ARM64_REG_X27,
|
||||
UC_ARM64_REG_X28,
|
||||
|
||||
ARM64_REG_V0,
|
||||
ARM64_REG_V1,
|
||||
ARM64_REG_V2,
|
||||
ARM64_REG_V3,
|
||||
ARM64_REG_V4,
|
||||
ARM64_REG_V5,
|
||||
ARM64_REG_V6,
|
||||
ARM64_REG_V7,
|
||||
ARM64_REG_V8,
|
||||
ARM64_REG_V9,
|
||||
ARM64_REG_V10,
|
||||
ARM64_REG_V11,
|
||||
ARM64_REG_V12,
|
||||
ARM64_REG_V13,
|
||||
ARM64_REG_V14,
|
||||
ARM64_REG_V15,
|
||||
ARM64_REG_V16,
|
||||
ARM64_REG_V17,
|
||||
ARM64_REG_V18,
|
||||
ARM64_REG_V19,
|
||||
ARM64_REG_V20,
|
||||
ARM64_REG_V21,
|
||||
ARM64_REG_V22,
|
||||
ARM64_REG_V23,
|
||||
ARM64_REG_V24,
|
||||
ARM64_REG_V25,
|
||||
ARM64_REG_V26,
|
||||
ARM64_REG_V27,
|
||||
ARM64_REG_V28,
|
||||
ARM64_REG_V29,
|
||||
ARM64_REG_V30,
|
||||
ARM64_REG_V31,
|
||||
UC_ARM64_REG_V0,
|
||||
UC_ARM64_REG_V1,
|
||||
UC_ARM64_REG_V2,
|
||||
UC_ARM64_REG_V3,
|
||||
UC_ARM64_REG_V4,
|
||||
UC_ARM64_REG_V5,
|
||||
UC_ARM64_REG_V6,
|
||||
UC_ARM64_REG_V7,
|
||||
UC_ARM64_REG_V8,
|
||||
UC_ARM64_REG_V9,
|
||||
UC_ARM64_REG_V10,
|
||||
UC_ARM64_REG_V11,
|
||||
UC_ARM64_REG_V12,
|
||||
UC_ARM64_REG_V13,
|
||||
UC_ARM64_REG_V14,
|
||||
UC_ARM64_REG_V15,
|
||||
UC_ARM64_REG_V16,
|
||||
UC_ARM64_REG_V17,
|
||||
UC_ARM64_REG_V18,
|
||||
UC_ARM64_REG_V19,
|
||||
UC_ARM64_REG_V20,
|
||||
UC_ARM64_REG_V21,
|
||||
UC_ARM64_REG_V22,
|
||||
UC_ARM64_REG_V23,
|
||||
UC_ARM64_REG_V24,
|
||||
UC_ARM64_REG_V25,
|
||||
UC_ARM64_REG_V26,
|
||||
UC_ARM64_REG_V27,
|
||||
UC_ARM64_REG_V28,
|
||||
UC_ARM64_REG_V29,
|
||||
UC_ARM64_REG_V30,
|
||||
UC_ARM64_REG_V31,
|
||||
|
||||
//> pseudo registers
|
||||
ARM64_REG_PC, // program counter register
|
||||
UC_ARM64_REG_PC, // program counter register
|
||||
|
||||
ARM64_REG_ENDING, // <-- mark the end of the list of registers
|
||||
UC_ARM64_REG_ENDING, // <-- mark the end of the list of registers
|
||||
|
||||
//> alias registers
|
||||
|
||||
ARM64_REG_IP1 = ARM64_REG_X16,
|
||||
ARM64_REG_IP0 = ARM64_REG_X17,
|
||||
ARM64_REG_FP = ARM64_REG_X29,
|
||||
ARM64_REG_LR = ARM64_REG_X30,
|
||||
} arm64_reg;
|
||||
UC_ARM64_REG_IP1 = UC_ARM64_REG_X16,
|
||||
UC_ARM64_REG_IP0 = UC_ARM64_REG_X17,
|
||||
UC_ARM64_REG_FP = UC_ARM64_REG_X29,
|
||||
UC_ARM64_REG_LR = UC_ARM64_REG_X30,
|
||||
} uc_arm64_reg;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -17,30 +17,30 @@ extern "C" {
|
|||
|
||||
//> M68K registers
|
||||
typedef enum m68k_reg {
|
||||
M68K_REG_INVALID = 0,
|
||||
UC_M68K_REG_INVALID = 0,
|
||||
|
||||
M68K_REG_A0,
|
||||
M68K_REG_A1,
|
||||
M68K_REG_A2,
|
||||
M68K_REG_A3,
|
||||
M68K_REG_A4,
|
||||
M68K_REG_A5,
|
||||
M68K_REG_A6,
|
||||
M68K_REG_A7,
|
||||
UC_M68K_REG_A0,
|
||||
UC_M68K_REG_A1,
|
||||
UC_M68K_REG_A2,
|
||||
UC_M68K_REG_A3,
|
||||
UC_M68K_REG_A4,
|
||||
UC_M68K_REG_A5,
|
||||
UC_M68K_REG_A6,
|
||||
UC_M68K_REG_A7,
|
||||
|
||||
M68K_REG_D0,
|
||||
M68K_REG_D1,
|
||||
M68K_REG_D2,
|
||||
M68K_REG_D3,
|
||||
M68K_REG_D4,
|
||||
M68K_REG_D5,
|
||||
M68K_REG_D6,
|
||||
M68K_REG_D7,
|
||||
UC_M68K_REG_D0,
|
||||
UC_M68K_REG_D1,
|
||||
UC_M68K_REG_D2,
|
||||
UC_M68K_REG_D3,
|
||||
UC_M68K_REG_D4,
|
||||
UC_M68K_REG_D5,
|
||||
UC_M68K_REG_D6,
|
||||
UC_M68K_REG_D7,
|
||||
|
||||
M68K_REG_SR,
|
||||
M68K_REG_PC,
|
||||
UC_M68K_REG_SR,
|
||||
UC_M68K_REG_PC,
|
||||
|
||||
M68K_REG_ENDING, // <-- mark the end of the list of registers
|
||||
UC_M68K_REG_ENDING, // <-- mark the end of the list of registers
|
||||
} m68k_reg;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -17,207 +17,207 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
//> MIPS registers
|
||||
typedef enum mips_reg {
|
||||
MIPS_REG_INVALID = 0,
|
||||
typedef enum UC_MIPS_REG {
|
||||
UC_MIPS_REG_INVALID = 0,
|
||||
//> General purpose registers
|
||||
MIPS_REG_PC,
|
||||
UC_MIPS_REG_PC,
|
||||
|
||||
MIPS_REG_0,
|
||||
MIPS_REG_1,
|
||||
MIPS_REG_2,
|
||||
MIPS_REG_3,
|
||||
MIPS_REG_4,
|
||||
MIPS_REG_5,
|
||||
MIPS_REG_6,
|
||||
MIPS_REG_7,
|
||||
MIPS_REG_8,
|
||||
MIPS_REG_9,
|
||||
MIPS_REG_10,
|
||||
MIPS_REG_11,
|
||||
MIPS_REG_12,
|
||||
MIPS_REG_13,
|
||||
MIPS_REG_14,
|
||||
MIPS_REG_15,
|
||||
MIPS_REG_16,
|
||||
MIPS_REG_17,
|
||||
MIPS_REG_18,
|
||||
MIPS_REG_19,
|
||||
MIPS_REG_20,
|
||||
MIPS_REG_21,
|
||||
MIPS_REG_22,
|
||||
MIPS_REG_23,
|
||||
MIPS_REG_24,
|
||||
MIPS_REG_25,
|
||||
MIPS_REG_26,
|
||||
MIPS_REG_27,
|
||||
MIPS_REG_28,
|
||||
MIPS_REG_29,
|
||||
MIPS_REG_30,
|
||||
MIPS_REG_31,
|
||||
UC_MIPS_REG_0,
|
||||
UC_MIPS_REG_1,
|
||||
UC_MIPS_REG_2,
|
||||
UC_MIPS_REG_3,
|
||||
UC_MIPS_REG_4,
|
||||
UC_MIPS_REG_5,
|
||||
UC_MIPS_REG_6,
|
||||
UC_MIPS_REG_7,
|
||||
UC_MIPS_REG_8,
|
||||
UC_MIPS_REG_9,
|
||||
UC_MIPS_REG_10,
|
||||
UC_MIPS_REG_11,
|
||||
UC_MIPS_REG_12,
|
||||
UC_MIPS_REG_13,
|
||||
UC_MIPS_REG_14,
|
||||
UC_MIPS_REG_15,
|
||||
UC_MIPS_REG_16,
|
||||
UC_MIPS_REG_17,
|
||||
UC_MIPS_REG_18,
|
||||
UC_MIPS_REG_19,
|
||||
UC_MIPS_REG_20,
|
||||
UC_MIPS_REG_21,
|
||||
UC_MIPS_REG_22,
|
||||
UC_MIPS_REG_23,
|
||||
UC_MIPS_REG_24,
|
||||
UC_MIPS_REG_25,
|
||||
UC_MIPS_REG_26,
|
||||
UC_MIPS_REG_27,
|
||||
UC_MIPS_REG_28,
|
||||
UC_MIPS_REG_29,
|
||||
UC_MIPS_REG_30,
|
||||
UC_MIPS_REG_31,
|
||||
|
||||
//> DSP registers
|
||||
MIPS_REG_DSPCCOND,
|
||||
MIPS_REG_DSPCARRY,
|
||||
MIPS_REG_DSPEFI,
|
||||
MIPS_REG_DSPOUTFLAG,
|
||||
MIPS_REG_DSPOUTFLAG16_19,
|
||||
MIPS_REG_DSPOUTFLAG20,
|
||||
MIPS_REG_DSPOUTFLAG21,
|
||||
MIPS_REG_DSPOUTFLAG22,
|
||||
MIPS_REG_DSPOUTFLAG23,
|
||||
MIPS_REG_DSPPOS,
|
||||
MIPS_REG_DSPSCOUNT,
|
||||
UC_MIPS_REG_DSPCCOND,
|
||||
UC_MIPS_REG_DSPCARRY,
|
||||
UC_MIPS_REG_DSPEFI,
|
||||
UC_MIPS_REG_DSPOUTFLAG,
|
||||
UC_MIPS_REG_DSPOUTFLAG16_19,
|
||||
UC_MIPS_REG_DSPOUTFLAG20,
|
||||
UC_MIPS_REG_DSPOUTFLAG21,
|
||||
UC_MIPS_REG_DSPOUTFLAG22,
|
||||
UC_MIPS_REG_DSPOUTFLAG23,
|
||||
UC_MIPS_REG_DSPPOS,
|
||||
UC_MIPS_REG_DSPSCOUNT,
|
||||
|
||||
//> ACC registers
|
||||
MIPS_REG_AC0,
|
||||
MIPS_REG_AC1,
|
||||
MIPS_REG_AC2,
|
||||
MIPS_REG_AC3,
|
||||
UC_MIPS_REG_AC0,
|
||||
UC_MIPS_REG_AC1,
|
||||
UC_MIPS_REG_AC2,
|
||||
UC_MIPS_REG_AC3,
|
||||
|
||||
//> COP registers
|
||||
MIPS_REG_CC0,
|
||||
MIPS_REG_CC1,
|
||||
MIPS_REG_CC2,
|
||||
MIPS_REG_CC3,
|
||||
MIPS_REG_CC4,
|
||||
MIPS_REG_CC5,
|
||||
MIPS_REG_CC6,
|
||||
MIPS_REG_CC7,
|
||||
UC_MIPS_REG_CC0,
|
||||
UC_MIPS_REG_CC1,
|
||||
UC_MIPS_REG_CC2,
|
||||
UC_MIPS_REG_CC3,
|
||||
UC_MIPS_REG_CC4,
|
||||
UC_MIPS_REG_CC5,
|
||||
UC_MIPS_REG_CC6,
|
||||
UC_MIPS_REG_CC7,
|
||||
|
||||
//> FPU registers
|
||||
MIPS_REG_F0,
|
||||
MIPS_REG_F1,
|
||||
MIPS_REG_F2,
|
||||
MIPS_REG_F3,
|
||||
MIPS_REG_F4,
|
||||
MIPS_REG_F5,
|
||||
MIPS_REG_F6,
|
||||
MIPS_REG_F7,
|
||||
MIPS_REG_F8,
|
||||
MIPS_REG_F9,
|
||||
MIPS_REG_F10,
|
||||
MIPS_REG_F11,
|
||||
MIPS_REG_F12,
|
||||
MIPS_REG_F13,
|
||||
MIPS_REG_F14,
|
||||
MIPS_REG_F15,
|
||||
MIPS_REG_F16,
|
||||
MIPS_REG_F17,
|
||||
MIPS_REG_F18,
|
||||
MIPS_REG_F19,
|
||||
MIPS_REG_F20,
|
||||
MIPS_REG_F21,
|
||||
MIPS_REG_F22,
|
||||
MIPS_REG_F23,
|
||||
MIPS_REG_F24,
|
||||
MIPS_REG_F25,
|
||||
MIPS_REG_F26,
|
||||
MIPS_REG_F27,
|
||||
MIPS_REG_F28,
|
||||
MIPS_REG_F29,
|
||||
MIPS_REG_F30,
|
||||
MIPS_REG_F31,
|
||||
UC_MIPS_REG_F0,
|
||||
UC_MIPS_REG_F1,
|
||||
UC_MIPS_REG_F2,
|
||||
UC_MIPS_REG_F3,
|
||||
UC_MIPS_REG_F4,
|
||||
UC_MIPS_REG_F5,
|
||||
UC_MIPS_REG_F6,
|
||||
UC_MIPS_REG_F7,
|
||||
UC_MIPS_REG_F8,
|
||||
UC_MIPS_REG_F9,
|
||||
UC_MIPS_REG_F10,
|
||||
UC_MIPS_REG_F11,
|
||||
UC_MIPS_REG_F12,
|
||||
UC_MIPS_REG_F13,
|
||||
UC_MIPS_REG_F14,
|
||||
UC_MIPS_REG_F15,
|
||||
UC_MIPS_REG_F16,
|
||||
UC_MIPS_REG_F17,
|
||||
UC_MIPS_REG_F18,
|
||||
UC_MIPS_REG_F19,
|
||||
UC_MIPS_REG_F20,
|
||||
UC_MIPS_REG_F21,
|
||||
UC_MIPS_REG_F22,
|
||||
UC_MIPS_REG_F23,
|
||||
UC_MIPS_REG_F24,
|
||||
UC_MIPS_REG_F25,
|
||||
UC_MIPS_REG_F26,
|
||||
UC_MIPS_REG_F27,
|
||||
UC_MIPS_REG_F28,
|
||||
UC_MIPS_REG_F29,
|
||||
UC_MIPS_REG_F30,
|
||||
UC_MIPS_REG_F31,
|
||||
|
||||
MIPS_REG_FCC0,
|
||||
MIPS_REG_FCC1,
|
||||
MIPS_REG_FCC2,
|
||||
MIPS_REG_FCC3,
|
||||
MIPS_REG_FCC4,
|
||||
MIPS_REG_FCC5,
|
||||
MIPS_REG_FCC6,
|
||||
MIPS_REG_FCC7,
|
||||
UC_MIPS_REG_FCC0,
|
||||
UC_MIPS_REG_FCC1,
|
||||
UC_MIPS_REG_FCC2,
|
||||
UC_MIPS_REG_FCC3,
|
||||
UC_MIPS_REG_FCC4,
|
||||
UC_MIPS_REG_FCC5,
|
||||
UC_MIPS_REG_FCC6,
|
||||
UC_MIPS_REG_FCC7,
|
||||
|
||||
//> AFPR128
|
||||
MIPS_REG_W0,
|
||||
MIPS_REG_W1,
|
||||
MIPS_REG_W2,
|
||||
MIPS_REG_W3,
|
||||
MIPS_REG_W4,
|
||||
MIPS_REG_W5,
|
||||
MIPS_REG_W6,
|
||||
MIPS_REG_W7,
|
||||
MIPS_REG_W8,
|
||||
MIPS_REG_W9,
|
||||
MIPS_REG_W10,
|
||||
MIPS_REG_W11,
|
||||
MIPS_REG_W12,
|
||||
MIPS_REG_W13,
|
||||
MIPS_REG_W14,
|
||||
MIPS_REG_W15,
|
||||
MIPS_REG_W16,
|
||||
MIPS_REG_W17,
|
||||
MIPS_REG_W18,
|
||||
MIPS_REG_W19,
|
||||
MIPS_REG_W20,
|
||||
MIPS_REG_W21,
|
||||
MIPS_REG_W22,
|
||||
MIPS_REG_W23,
|
||||
MIPS_REG_W24,
|
||||
MIPS_REG_W25,
|
||||
MIPS_REG_W26,
|
||||
MIPS_REG_W27,
|
||||
MIPS_REG_W28,
|
||||
MIPS_REG_W29,
|
||||
MIPS_REG_W30,
|
||||
MIPS_REG_W31,
|
||||
UC_MIPS_REG_W0,
|
||||
UC_MIPS_REG_W1,
|
||||
UC_MIPS_REG_W2,
|
||||
UC_MIPS_REG_W3,
|
||||
UC_MIPS_REG_W4,
|
||||
UC_MIPS_REG_W5,
|
||||
UC_MIPS_REG_W6,
|
||||
UC_MIPS_REG_W7,
|
||||
UC_MIPS_REG_W8,
|
||||
UC_MIPS_REG_W9,
|
||||
UC_MIPS_REG_W10,
|
||||
UC_MIPS_REG_W11,
|
||||
UC_MIPS_REG_W12,
|
||||
UC_MIPS_REG_W13,
|
||||
UC_MIPS_REG_W14,
|
||||
UC_MIPS_REG_W15,
|
||||
UC_MIPS_REG_W16,
|
||||
UC_MIPS_REG_W17,
|
||||
UC_MIPS_REG_W18,
|
||||
UC_MIPS_REG_W19,
|
||||
UC_MIPS_REG_W20,
|
||||
UC_MIPS_REG_W21,
|
||||
UC_MIPS_REG_W22,
|
||||
UC_MIPS_REG_W23,
|
||||
UC_MIPS_REG_W24,
|
||||
UC_MIPS_REG_W25,
|
||||
UC_MIPS_REG_W26,
|
||||
UC_MIPS_REG_W27,
|
||||
UC_MIPS_REG_W28,
|
||||
UC_MIPS_REG_W29,
|
||||
UC_MIPS_REG_W30,
|
||||
UC_MIPS_REG_W31,
|
||||
|
||||
MIPS_REG_HI,
|
||||
MIPS_REG_LO,
|
||||
UC_MIPS_REG_HI,
|
||||
UC_MIPS_REG_LO,
|
||||
|
||||
MIPS_REG_P0,
|
||||
MIPS_REG_P1,
|
||||
MIPS_REG_P2,
|
||||
UC_MIPS_REG_P0,
|
||||
UC_MIPS_REG_P1,
|
||||
UC_MIPS_REG_P2,
|
||||
|
||||
MIPS_REG_MPL0,
|
||||
MIPS_REG_MPL1,
|
||||
MIPS_REG_MPL2,
|
||||
UC_MIPS_REG_MPL0,
|
||||
UC_MIPS_REG_MPL1,
|
||||
UC_MIPS_REG_MPL2,
|
||||
|
||||
MIPS_REG_ENDING, // <-- mark the end of the list or registers
|
||||
UC_MIPS_REG_ENDING, // <-- mark the end of the list or registers
|
||||
|
||||
// alias registers
|
||||
MIPS_REG_ZERO = MIPS_REG_0,
|
||||
MIPS_REG_AT = MIPS_REG_1,
|
||||
MIPS_REG_V0 = MIPS_REG_2,
|
||||
MIPS_REG_V1 = MIPS_REG_3,
|
||||
MIPS_REG_A0 = MIPS_REG_4,
|
||||
MIPS_REG_A1 = MIPS_REG_5,
|
||||
MIPS_REG_A2 = MIPS_REG_6,
|
||||
MIPS_REG_A3 = MIPS_REG_7,
|
||||
MIPS_REG_T0 = MIPS_REG_8,
|
||||
MIPS_REG_T1 = MIPS_REG_9,
|
||||
MIPS_REG_T2 = MIPS_REG_10,
|
||||
MIPS_REG_T3 = MIPS_REG_11,
|
||||
MIPS_REG_T4 = MIPS_REG_12,
|
||||
MIPS_REG_T5 = MIPS_REG_13,
|
||||
MIPS_REG_T6 = MIPS_REG_14,
|
||||
MIPS_REG_T7 = MIPS_REG_15,
|
||||
MIPS_REG_S0 = MIPS_REG_16,
|
||||
MIPS_REG_S1 = MIPS_REG_17,
|
||||
MIPS_REG_S2 = MIPS_REG_18,
|
||||
MIPS_REG_S3 = MIPS_REG_19,
|
||||
MIPS_REG_S4 = MIPS_REG_20,
|
||||
MIPS_REG_S5 = MIPS_REG_21,
|
||||
MIPS_REG_S6 = MIPS_REG_22,
|
||||
MIPS_REG_S7 = MIPS_REG_23,
|
||||
MIPS_REG_T8 = MIPS_REG_24,
|
||||
MIPS_REG_T9 = MIPS_REG_25,
|
||||
MIPS_REG_K0 = MIPS_REG_26,
|
||||
MIPS_REG_K1 = MIPS_REG_27,
|
||||
MIPS_REG_GP = MIPS_REG_28,
|
||||
MIPS_REG_SP = MIPS_REG_29,
|
||||
MIPS_REG_FP = MIPS_REG_30, MIPS_REG_S8 = MIPS_REG_30,
|
||||
MIPS_REG_RA = MIPS_REG_31,
|
||||
UC_MIPS_REG_ZERO = UC_MIPS_REG_0,
|
||||
UC_MIPS_REG_AT = UC_MIPS_REG_1,
|
||||
UC_MIPS_REG_V0 = UC_MIPS_REG_2,
|
||||
UC_MIPS_REG_V1 = UC_MIPS_REG_3,
|
||||
UC_MIPS_REG_A0 = UC_MIPS_REG_4,
|
||||
UC_MIPS_REG_A1 = UC_MIPS_REG_5,
|
||||
UC_MIPS_REG_A2 = UC_MIPS_REG_6,
|
||||
UC_MIPS_REG_A3 = UC_MIPS_REG_7,
|
||||
UC_MIPS_REG_T0 = UC_MIPS_REG_8,
|
||||
UC_MIPS_REG_T1 = UC_MIPS_REG_9,
|
||||
UC_MIPS_REG_T2 = UC_MIPS_REG_10,
|
||||
UC_MIPS_REG_T3 = UC_MIPS_REG_11,
|
||||
UC_MIPS_REG_T4 = UC_MIPS_REG_12,
|
||||
UC_MIPS_REG_T5 = UC_MIPS_REG_13,
|
||||
UC_MIPS_REG_T6 = UC_MIPS_REG_14,
|
||||
UC_MIPS_REG_T7 = UC_MIPS_REG_15,
|
||||
UC_MIPS_REG_S0 = UC_MIPS_REG_16,
|
||||
UC_MIPS_REG_S1 = UC_MIPS_REG_17,
|
||||
UC_MIPS_REG_S2 = UC_MIPS_REG_18,
|
||||
UC_MIPS_REG_S3 = UC_MIPS_REG_19,
|
||||
UC_MIPS_REG_S4 = UC_MIPS_REG_20,
|
||||
UC_MIPS_REG_S5 = UC_MIPS_REG_21,
|
||||
UC_MIPS_REG_S6 = UC_MIPS_REG_22,
|
||||
UC_MIPS_REG_S7 = UC_MIPS_REG_23,
|
||||
UC_MIPS_REG_T8 = UC_MIPS_REG_24,
|
||||
UC_MIPS_REG_T9 = UC_MIPS_REG_25,
|
||||
UC_MIPS_REG_K0 = UC_MIPS_REG_26,
|
||||
UC_MIPS_REG_K1 = UC_MIPS_REG_27,
|
||||
UC_MIPS_REG_GP = UC_MIPS_REG_28,
|
||||
UC_MIPS_REG_SP = UC_MIPS_REG_29,
|
||||
UC_MIPS_REG_FP = UC_MIPS_REG_30, UC_MIPS_REG_S8 = UC_MIPS_REG_30,
|
||||
UC_MIPS_REG_RA = UC_MIPS_REG_31,
|
||||
|
||||
MIPS_REG_HI0 = MIPS_REG_AC0,
|
||||
MIPS_REG_HI1 = MIPS_REG_AC1,
|
||||
MIPS_REG_HI2 = MIPS_REG_AC2,
|
||||
MIPS_REG_HI3 = MIPS_REG_AC3,
|
||||
UC_MIPS_REG_HI0 = UC_MIPS_REG_AC0,
|
||||
UC_MIPS_REG_HI1 = UC_MIPS_REG_AC1,
|
||||
UC_MIPS_REG_HI2 = UC_MIPS_REG_AC2,
|
||||
UC_MIPS_REG_HI3 = UC_MIPS_REG_AC3,
|
||||
|
||||
MIPS_REG_LO0 = MIPS_REG_HI0,
|
||||
MIPS_REG_LO1 = MIPS_REG_HI1,
|
||||
MIPS_REG_LO2 = MIPS_REG_HI2,
|
||||
MIPS_REG_LO3 = MIPS_REG_HI3,
|
||||
} mips_reg;
|
||||
UC_MIPS_REG_LO0 = UC_MIPS_REG_HI0,
|
||||
UC_MIPS_REG_LO1 = UC_MIPS_REG_HI1,
|
||||
UC_MIPS_REG_LO2 = UC_MIPS_REG_HI2,
|
||||
UC_MIPS_REG_LO3 = UC_MIPS_REG_HI3,
|
||||
} UC_MIPS_REG;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -20,108 +20,108 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
//> SPARC registers
|
||||
typedef enum sparc_reg {
|
||||
SPARC_REG_INVALID = 0,
|
||||
typedef enum uc_sparc_reg {
|
||||
UC_SPARC_REG_INVALID = 0,
|
||||
|
||||
SPARC_REG_F0,
|
||||
SPARC_REG_F1,
|
||||
SPARC_REG_F2,
|
||||
SPARC_REG_F3,
|
||||
SPARC_REG_F4,
|
||||
SPARC_REG_F5,
|
||||
SPARC_REG_F6,
|
||||
SPARC_REG_F7,
|
||||
SPARC_REG_F8,
|
||||
SPARC_REG_F9,
|
||||
SPARC_REG_F10,
|
||||
SPARC_REG_F11,
|
||||
SPARC_REG_F12,
|
||||
SPARC_REG_F13,
|
||||
SPARC_REG_F14,
|
||||
SPARC_REG_F15,
|
||||
SPARC_REG_F16,
|
||||
SPARC_REG_F17,
|
||||
SPARC_REG_F18,
|
||||
SPARC_REG_F19,
|
||||
SPARC_REG_F20,
|
||||
SPARC_REG_F21,
|
||||
SPARC_REG_F22,
|
||||
SPARC_REG_F23,
|
||||
SPARC_REG_F24,
|
||||
SPARC_REG_F25,
|
||||
SPARC_REG_F26,
|
||||
SPARC_REG_F27,
|
||||
SPARC_REG_F28,
|
||||
SPARC_REG_F29,
|
||||
SPARC_REG_F30,
|
||||
SPARC_REG_F31,
|
||||
SPARC_REG_F32,
|
||||
SPARC_REG_F34,
|
||||
SPARC_REG_F36,
|
||||
SPARC_REG_F38,
|
||||
SPARC_REG_F40,
|
||||
SPARC_REG_F42,
|
||||
SPARC_REG_F44,
|
||||
SPARC_REG_F46,
|
||||
SPARC_REG_F48,
|
||||
SPARC_REG_F50,
|
||||
SPARC_REG_F52,
|
||||
SPARC_REG_F54,
|
||||
SPARC_REG_F56,
|
||||
SPARC_REG_F58,
|
||||
SPARC_REG_F60,
|
||||
SPARC_REG_F62,
|
||||
SPARC_REG_FCC0, // Floating condition codes
|
||||
SPARC_REG_FCC1,
|
||||
SPARC_REG_FCC2,
|
||||
SPARC_REG_FCC3,
|
||||
SPARC_REG_FP,
|
||||
SPARC_REG_G0,
|
||||
SPARC_REG_G1,
|
||||
SPARC_REG_G2,
|
||||
SPARC_REG_G3,
|
||||
SPARC_REG_G4,
|
||||
SPARC_REG_G5,
|
||||
SPARC_REG_G6,
|
||||
SPARC_REG_G7,
|
||||
SPARC_REG_I0,
|
||||
SPARC_REG_I1,
|
||||
SPARC_REG_I2,
|
||||
SPARC_REG_I3,
|
||||
SPARC_REG_I4,
|
||||
SPARC_REG_I5,
|
||||
SPARC_REG_I7,
|
||||
SPARC_REG_ICC, // Integer condition codes
|
||||
SPARC_REG_L0,
|
||||
SPARC_REG_L1,
|
||||
SPARC_REG_L2,
|
||||
SPARC_REG_L3,
|
||||
SPARC_REG_L4,
|
||||
SPARC_REG_L5,
|
||||
SPARC_REG_L6,
|
||||
SPARC_REG_L7,
|
||||
SPARC_REG_O0,
|
||||
SPARC_REG_O1,
|
||||
SPARC_REG_O2,
|
||||
SPARC_REG_O3,
|
||||
SPARC_REG_O4,
|
||||
SPARC_REG_O5,
|
||||
SPARC_REG_O7,
|
||||
SPARC_REG_SP,
|
||||
SPARC_REG_Y,
|
||||
UC_SPARC_REG_F0,
|
||||
UC_SPARC_REG_F1,
|
||||
UC_SPARC_REG_F2,
|
||||
UC_SPARC_REG_F3,
|
||||
UC_SPARC_REG_F4,
|
||||
UC_SPARC_REG_F5,
|
||||
UC_SPARC_REG_F6,
|
||||
UC_SPARC_REG_F7,
|
||||
UC_SPARC_REG_F8,
|
||||
UC_SPARC_REG_F9,
|
||||
UC_SPARC_REG_F10,
|
||||
UC_SPARC_REG_F11,
|
||||
UC_SPARC_REG_F12,
|
||||
UC_SPARC_REG_F13,
|
||||
UC_SPARC_REG_F14,
|
||||
UC_SPARC_REG_F15,
|
||||
UC_SPARC_REG_F16,
|
||||
UC_SPARC_REG_F17,
|
||||
UC_SPARC_REG_F18,
|
||||
UC_SPARC_REG_F19,
|
||||
UC_SPARC_REG_F20,
|
||||
UC_SPARC_REG_F21,
|
||||
UC_SPARC_REG_F22,
|
||||
UC_SPARC_REG_F23,
|
||||
UC_SPARC_REG_F24,
|
||||
UC_SPARC_REG_F25,
|
||||
UC_SPARC_REG_F26,
|
||||
UC_SPARC_REG_F27,
|
||||
UC_SPARC_REG_F28,
|
||||
UC_SPARC_REG_F29,
|
||||
UC_SPARC_REG_F30,
|
||||
UC_SPARC_REG_F31,
|
||||
UC_SPARC_REG_F32,
|
||||
UC_SPARC_REG_F34,
|
||||
UC_SPARC_REG_F36,
|
||||
UC_SPARC_REG_F38,
|
||||
UC_SPARC_REG_F40,
|
||||
UC_SPARC_REG_F42,
|
||||
UC_SPARC_REG_F44,
|
||||
UC_SPARC_REG_F46,
|
||||
UC_SPARC_REG_F48,
|
||||
UC_SPARC_REG_F50,
|
||||
UC_SPARC_REG_F52,
|
||||
UC_SPARC_REG_F54,
|
||||
UC_SPARC_REG_F56,
|
||||
UC_SPARC_REG_F58,
|
||||
UC_SPARC_REG_F60,
|
||||
UC_SPARC_REG_F62,
|
||||
UC_SPARC_REG_FCC0, // Floating condition codes
|
||||
UC_SPARC_REG_FCC1,
|
||||
UC_SPARC_REG_FCC2,
|
||||
UC_SPARC_REG_FCC3,
|
||||
UC_SPARC_REG_FP,
|
||||
UC_SPARC_REG_G0,
|
||||
UC_SPARC_REG_G1,
|
||||
UC_SPARC_REG_G2,
|
||||
UC_SPARC_REG_G3,
|
||||
UC_SPARC_REG_G4,
|
||||
UC_SPARC_REG_G5,
|
||||
UC_SPARC_REG_G6,
|
||||
UC_SPARC_REG_G7,
|
||||
UC_SPARC_REG_I0,
|
||||
UC_SPARC_REG_I1,
|
||||
UC_SPARC_REG_I2,
|
||||
UC_SPARC_REG_I3,
|
||||
UC_SPARC_REG_I4,
|
||||
UC_SPARC_REG_I5,
|
||||
UC_SPARC_REG_I7,
|
||||
UC_SPARC_REG_ICC, // Integer condition codes
|
||||
UC_SPARC_REG_L0,
|
||||
UC_SPARC_REG_L1,
|
||||
UC_SPARC_REG_L2,
|
||||
UC_SPARC_REG_L3,
|
||||
UC_SPARC_REG_L4,
|
||||
UC_SPARC_REG_L5,
|
||||
UC_SPARC_REG_L6,
|
||||
UC_SPARC_REG_L7,
|
||||
UC_SPARC_REG_O0,
|
||||
UC_SPARC_REG_O1,
|
||||
UC_SPARC_REG_O2,
|
||||
UC_SPARC_REG_O3,
|
||||
UC_SPARC_REG_O4,
|
||||
UC_SPARC_REG_O5,
|
||||
UC_SPARC_REG_O7,
|
||||
UC_SPARC_REG_SP,
|
||||
UC_SPARC_REG_Y,
|
||||
|
||||
// special register
|
||||
SPARC_REG_XCC,
|
||||
UC_SPARC_REG_XCC,
|
||||
|
||||
// pseudo register
|
||||
SPARC_REG_PC, // program counter register
|
||||
UC_SPARC_REG_PC, // program counter register
|
||||
|
||||
SPARC_REG_ENDING, // <-- mark the end of the list of registers
|
||||
UC_SPARC_REG_ENDING, // <-- mark the end of the list of registers
|
||||
|
||||
// extras
|
||||
SPARC_REG_O6 = SPARC_REG_SP,
|
||||
SPARC_REG_I6 = SPARC_REG_FP,
|
||||
} sparc_reg;
|
||||
UC_SPARC_REG_O6 = UC_SPARC_REG_SP,
|
||||
UC_SPARC_REG_I6 = UC_SPARC_REG_FP,
|
||||
} uc_sparc_reg;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -19,6 +19,9 @@ extern "C" {
|
|||
|
||||
#include "platform.h"
|
||||
|
||||
// Handle to use with all APIs
|
||||
typedef size_t uch;
|
||||
|
||||
#include "m68k.h"
|
||||
#include "x86.h"
|
||||
#include "arm.h"
|
||||
|
@ -65,9 +68,6 @@ extern "C" {
|
|||
// 1 milisecond = 1000 nanoseconds
|
||||
#define UC_MILISECOND_SCALE 1000
|
||||
|
||||
// Handle using with all API
|
||||
typedef size_t uch;
|
||||
|
||||
// Architecture type
|
||||
typedef enum uc_arch {
|
||||
UC_ARCH_ARM = 1, // ARM architecture (including Thumb, Thumb-2)
|
||||
|
@ -78,7 +78,6 @@ typedef enum uc_arch {
|
|||
UC_ARCH_SPARC, // Sparc architecture
|
||||
UC_ARCH_M68K, // M68K architecture
|
||||
UC_ARCH_MAX,
|
||||
UC_ARCH_ALL = 0xFFFF, // All architectures - for uc_support()
|
||||
} uc_arch;
|
||||
|
||||
// Mode type
|
||||
|
@ -116,6 +115,7 @@ typedef enum uc_err {
|
|||
UC_ERR_CODE_INVALID, // Quit emulation due to invalid code address: uc_emu_start()
|
||||
UC_ERR_HOOK, // Invalid hook type: uc_hook_add()
|
||||
UC_ERR_INSN_INVALID, // Quit emulation due to invalid instruction: uc_emu_start()
|
||||
UC_ERR_MAP, // Invalid memory mapping: uc_mem_map()
|
||||
} uc_err;
|
||||
|
||||
|
||||
|
@ -203,16 +203,14 @@ unsigned int uc_version(unsigned int *major, unsigned int *minor);
|
|||
|
||||
|
||||
/*
|
||||
This API can be used to either ask for archs supported by this library.
|
||||
Determine if the given architecture is supported by this library.
|
||||
|
||||
To check if a particular arch is supported by this library, set @query to
|
||||
arch mode (UC_ARCH_* value).
|
||||
To verify if this library supports all the archs, use UC_ARCH_ALL.
|
||||
@arch: architecture type (UC_ARCH_*)
|
||||
|
||||
@return True if this library supports the given arch.
|
||||
*/
|
||||
UNICORN_EXPORT
|
||||
bool uc_support(int query);
|
||||
bool uc_arch_supported(uc_arch arch);
|
||||
|
||||
|
||||
/*
|
||||
|
@ -392,6 +390,7 @@ uc_err uc_hook_del(uch handle, uch *h2);
|
|||
|
||||
@handle: handle returned by uc_open()
|
||||
@address: starting address of the new memory region to be mapped in.
|
||||
This address will be round down to 8KB boundary
|
||||
@size: size of the new memory region to be mapped in. This will be round up to
|
||||
the next 8KB boundary.
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
2
make.sh
2
make.sh
|
@ -54,7 +54,7 @@ install() {
|
|||
PREFIX=/usr/local
|
||||
${MAKE} install
|
||||
else # not OSX
|
||||
test -d /usr/lib64 && ${MAKE} LIBDIRARCH=lib64
|
||||
test -d /usr/lib64 && LIBDIRARCH=lib64
|
||||
${MAKE} install
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -43,18 +43,18 @@ int arm64_reg_read(uch handle, unsigned int regid, void *value)
|
|||
|
||||
mycpu = first_cpu;
|
||||
|
||||
if (regid >= ARM64_REG_X0 && regid <= ARM64_REG_X28)
|
||||
*(int64_t *)value = ARM_CPU(uc, mycpu)->env.xregs[regid - ARM64_REG_X0];
|
||||
if (regid >= UC_ARM64_REG_X0 && regid <= UC_ARM64_REG_X28)
|
||||
*(int64_t *)value = ARM_CPU(uc, mycpu)->env.xregs[regid - UC_ARM64_REG_X0];
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case ARM64_REG_X29:
|
||||
case UC_ARM64_REG_X29:
|
||||
*(int64_t *)value = ARM_CPU(uc, mycpu)->env.xregs[29];
|
||||
break;
|
||||
case ARM64_REG_X30:
|
||||
case UC_ARM64_REG_X30:
|
||||
*(int64_t *)value = ARM_CPU(uc, mycpu)->env.xregs[30];
|
||||
break;
|
||||
case ARM64_REG_PC:
|
||||
case UC_ARM64_REG_PC:
|
||||
*(uint64_t *)value = ARM_CPU(uc, mycpu)->env.pc;
|
||||
break;
|
||||
}
|
||||
|
@ -75,18 +75,18 @@ int arm64_reg_write(uch handle, unsigned int regid, void *value)
|
|||
|
||||
mycpu = first_cpu;
|
||||
|
||||
if (regid >= ARM64_REG_X0 && regid <= ARM64_REG_X28)
|
||||
ARM_CPU(uc, mycpu)->env.xregs[regid - ARM64_REG_X0] = *(int64_t *)value;
|
||||
if (regid >= UC_ARM64_REG_X0 && regid <= UC_ARM64_REG_X28)
|
||||
ARM_CPU(uc, mycpu)->env.xregs[regid - UC_ARM64_REG_X0] = *(int64_t *)value;
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case ARM64_REG_X29:
|
||||
case UC_ARM64_REG_X29:
|
||||
ARM_CPU(uc, mycpu)->env.xregs[29] = *(int64_t *)value;
|
||||
break;
|
||||
case ARM64_REG_X30:
|
||||
case UC_ARM64_REG_X30:
|
||||
ARM_CPU(uc, mycpu)->env.xregs[30] = *(int64_t *)value;
|
||||
break;
|
||||
case ARM64_REG_PC:
|
||||
case UC_ARM64_REG_PC:
|
||||
ARM_CPU(uc, mycpu)->env.pc = *(uint64_t *)value;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -48,20 +48,20 @@ int arm_reg_read(uch handle, unsigned int regid, void *value)
|
|||
break;
|
||||
case UC_MODE_ARM:
|
||||
case UC_MODE_THUMB:
|
||||
if (regid >= ARM_REG_R0 && regid <= ARM_REG_R12)
|
||||
*(int32_t *)value = ARM_CPU(uc, mycpu)->env.regs[regid - ARM_REG_R0];
|
||||
if (regid >= UC_ARM_REG_R0 && regid <= UC_ARM_REG_R12)
|
||||
*(int32_t *)value = ARM_CPU(uc, mycpu)->env.regs[regid - UC_ARM_REG_R0];
|
||||
else {
|
||||
switch(regid) {
|
||||
//case ARM_REG_SP:
|
||||
case ARM_REG_R13:
|
||||
//case UC_ARM_REG_SP:
|
||||
case UC_ARM_REG_R13:
|
||||
*(int32_t *)value = ARM_CPU(uc, mycpu)->env.regs[13];
|
||||
break;
|
||||
//case ARM_REG_LR:
|
||||
case ARM_REG_R14:
|
||||
//case UC_ARM_REG_LR:
|
||||
case UC_ARM_REG_R14:
|
||||
*(int32_t *)value = ARM_CPU(uc, mycpu)->env.regs[14];
|
||||
break;
|
||||
//case ARM_REG_PC:
|
||||
case ARM_REG_R15:
|
||||
//case UC_ARM_REG_PC:
|
||||
case UC_ARM_REG_R15:
|
||||
*(int32_t *)value = ARM_CPU(uc, mycpu)->env.regs[15];
|
||||
break;
|
||||
}
|
||||
|
@ -91,20 +91,20 @@ int arm_reg_write(uch handle, unsigned int regid, void *value)
|
|||
|
||||
case UC_MODE_ARM:
|
||||
case UC_MODE_THUMB:
|
||||
if (regid >= ARM_REG_R0 && regid <= ARM_REG_R12)
|
||||
ARM_CPU(uc, mycpu)->env.regs[regid - ARM_REG_R0] = *(int32_t *)value;
|
||||
if (regid >= UC_ARM_REG_R0 && regid <= UC_ARM_REG_R12)
|
||||
ARM_CPU(uc, mycpu)->env.regs[regid - UC_ARM_REG_R0] = *(int32_t *)value;
|
||||
else {
|
||||
switch(regid) {
|
||||
//case ARM_REG_SP:
|
||||
case ARM_REG_R13:
|
||||
//case UC_ARM_REG_SP:
|
||||
case UC_ARM_REG_R13:
|
||||
ARM_CPU(uc, mycpu)->env.regs[13] = *(int32_t *)value;
|
||||
break;
|
||||
//case ARM_REG_LR:
|
||||
case ARM_REG_R14:
|
||||
//case UC_ARM_REG_LR:
|
||||
case UC_ARM_REG_R14:
|
||||
ARM_CPU(uc, mycpu)->env.regs[14] = *(int32_t *)value;
|
||||
break;
|
||||
//case ARM_REG_PC:
|
||||
case ARM_REG_R15:
|
||||
//case UC_ARM_REG_PC:
|
||||
case UC_ARM_REG_R15:
|
||||
ARM_CPU(uc, mycpu)->env.regs[15] = *(int32_t *)value;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "qemu/log.h"
|
||||
#include "exec/helper-proto.h"
|
||||
#include "exec/cpu_ldst.h"
|
||||
#include "uc_priv.h"
|
||||
|
||||
//#define DEBUG_PCALL
|
||||
|
||||
|
@ -944,6 +945,16 @@ void helper_syscall(CPUX86State *env, int next_eip_addend)
|
|||
#else
|
||||
void helper_syscall(CPUX86State *env, int next_eip_addend)
|
||||
{
|
||||
// Unicorn: call interrupt callback if registered
|
||||
struct uc_struct *uc = env->uc;
|
||||
if (uc->hook_syscall_idx) {
|
||||
((uc_cb_insn_syscall_t)uc->hook_callbacks[uc->hook_syscall_idx].callback)(
|
||||
(uch)uc, uc->hook_callbacks[uc->hook_syscall_idx].user_data);
|
||||
env->eip += next_eip_addend;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
int selector;
|
||||
|
||||
if (!(env->efer & MSR_EFER_SCE)) {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -38,14 +38,14 @@ int m68k_reg_read(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *)handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= M68K_REG_A0 && regid <= M68K_REG_A7)
|
||||
*(int32_t *)value = M68K_CPU(uc, mycpu)->env.aregs[regid - M68K_REG_A0];
|
||||
else if (regid >= M68K_REG_D0 && regid <= M68K_REG_D7)
|
||||
*(int32_t *)value = M68K_CPU(uc, mycpu)->env.dregs[regid - M68K_REG_D0];
|
||||
if (regid >= UC_M68K_REG_A0 && regid <= UC_M68K_REG_A7)
|
||||
*(int32_t *)value = M68K_CPU(uc, mycpu)->env.aregs[regid - UC_M68K_REG_A0];
|
||||
else if (regid >= UC_M68K_REG_D0 && regid <= UC_M68K_REG_D7)
|
||||
*(int32_t *)value = M68K_CPU(uc, mycpu)->env.dregs[regid - UC_M68K_REG_D0];
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case M68K_REG_PC:
|
||||
case UC_M68K_REG_PC:
|
||||
*(int32_t *)value = M68K_CPU(uc, mycpu)->env.pc;
|
||||
break;
|
||||
}
|
||||
|
@ -65,14 +65,14 @@ int m68k_reg_write(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *) handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= M68K_REG_A0 && regid <= M68K_REG_A7)
|
||||
M68K_CPU(uc, mycpu)->env.aregs[regid - M68K_REG_A0] = *(int32_t *)value;
|
||||
else if (regid >= M68K_REG_D0 && regid <= M68K_REG_D7)
|
||||
M68K_CPU(uc, mycpu)->env.dregs[regid - M68K_REG_D0] = *(int32_t *)value;
|
||||
if (regid >= UC_M68K_REG_A0 && regid <= UC_M68K_REG_A7)
|
||||
M68K_CPU(uc, mycpu)->env.aregs[regid - UC_M68K_REG_A0] = *(int32_t *)value;
|
||||
else if (regid >= UC_M68K_REG_D0 && regid <= UC_M68K_REG_D7)
|
||||
M68K_CPU(uc, mycpu)->env.dregs[regid - UC_M68K_REG_D0] = *(int32_t *)value;
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case M68K_REG_PC:
|
||||
case UC_M68K_REG_PC:
|
||||
M68K_CPU(uc, mycpu)->env.pc = *(uint32_t *)value;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -37,12 +37,12 @@ int mips_reg_read(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *) handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= MIPS_REG_0 && regid <= MIPS_REG_31)
|
||||
*(int32_t *)value = MIPS_CPU(uc, mycpu)->env.active_tc.gpr[regid - MIPS_REG_0];
|
||||
if (regid >= UC_MIPS_REG_0 && regid <= UC_MIPS_REG_31)
|
||||
*(int32_t *)value = MIPS_CPU(uc, mycpu)->env.active_tc.gpr[regid - UC_MIPS_REG_0];
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case MIPS_REG_PC:
|
||||
case UC_MIPS_REG_PC:
|
||||
*(int32_t *)value = MIPS_CPU(uc, mycpu)->env.active_tc.PC;
|
||||
break;
|
||||
}
|
||||
|
@ -62,12 +62,12 @@ int mips_reg_write(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *) handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= MIPS_REG_0 && regid <= MIPS_REG_31)
|
||||
MIPS_CPU(uc, mycpu)->env.active_tc.gpr[regid - MIPS_REG_0] = *(int32_t *)value;
|
||||
if (regid >= UC_MIPS_REG_0 && regid <= UC_MIPS_REG_31)
|
||||
MIPS_CPU(uc, mycpu)->env.active_tc.gpr[regid - UC_MIPS_REG_0] = *(int32_t *)value;
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case MIPS_REG_PC:
|
||||
case UC_MIPS_REG_PC:
|
||||
MIPS_CPU(uc, mycpu)->env.active_tc.PC = *(int32_t *)value;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -51,12 +51,12 @@ int sparc_reg_read(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *) handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= SPARC_REG_G0 && regid <= SPARC_REG_G7)
|
||||
*(int32_t *)value = SPARC_CPU(uc, mycpu)->env.gregs[regid - SPARC_REG_G0];
|
||||
if (regid >= UC_SPARC_REG_G0 && regid <= UC_SPARC_REG_G7)
|
||||
*(int32_t *)value = SPARC_CPU(uc, mycpu)->env.gregs[regid - UC_SPARC_REG_G0];
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case SPARC_REG_PC:
|
||||
case UC_SPARC_REG_PC:
|
||||
*(int32_t *)value = SPARC_CPU(uc, mycpu)->env.pc;
|
||||
break;
|
||||
}
|
||||
|
@ -76,12 +76,12 @@ int sparc_reg_write(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *) handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= SPARC_REG_G0 && regid <= SPARC_REG_G7)
|
||||
SPARC_CPU(uc, mycpu)->env.gregs[regid - SPARC_REG_G0] = *(int32_t *)value;
|
||||
if (regid >= UC_SPARC_REG_G0 && regid <= UC_SPARC_REG_G7)
|
||||
SPARC_CPU(uc, mycpu)->env.gregs[regid - UC_SPARC_REG_G0] = *(int32_t *)value;
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case SPARC_REG_PC:
|
||||
case UC_SPARC_REG_PC:
|
||||
SPARC_CPU(uc, mycpu)->env.pc = *(uint32_t *)value;
|
||||
SPARC_CPU(uc, mycpu)->env.npc = *(uint32_t *)value + 4;
|
||||
break;
|
||||
|
|
|
@ -34,12 +34,12 @@ int sparc_reg_read(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *) handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= SPARC_REG_G0 && regid <= SPARC_REG_G7)
|
||||
*(int32_t *)value = SPARC_CPU(uc, mycpu)->env.gregs[regid - SPARC_REG_G0];
|
||||
if (regid >= UC_SPARC_REG_G0 && regid <= UC_SPARC_REG_G7)
|
||||
*(int32_t *)value = SPARC_CPU(uc, mycpu)->env.gregs[regid - UC_SPARC_REG_G0];
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case SPARC_REG_PC:
|
||||
case UC_SPARC_REG_PC:
|
||||
*(int32_t *)value = SPARC_CPU(uc, mycpu)->env.pc;
|
||||
break;
|
||||
}
|
||||
|
@ -59,12 +59,12 @@ int sparc_reg_write(uch handle, unsigned int regid, void *value)
|
|||
struct uc_struct *uc = (struct uc_struct *) handle;
|
||||
CPUState *mycpu = first_cpu;
|
||||
|
||||
if (regid >= SPARC_REG_G0 && regid <= SPARC_REG_G7)
|
||||
SPARC_CPU(uc, mycpu)->env.gregs[regid - SPARC_REG_G0] = *(int32_t *)value;
|
||||
if (regid >= UC_SPARC_REG_G0 && regid <= UC_SPARC_REG_G7)
|
||||
SPARC_CPU(uc, mycpu)->env.gregs[regid - UC_SPARC_REG_G0] = *(int32_t *)value;
|
||||
else {
|
||||
switch(regid) {
|
||||
default: break;
|
||||
case SPARC_REG_PC:
|
||||
case UC_SPARC_REG_PC:
|
||||
SPARC_CPU(uc, mycpu)->env.pc = *(uint32_t *)value;
|
||||
SPARC_CPU(uc, mycpu)->env.npc = *(uint32_t *)value + 4;
|
||||
break;
|
||||
|
|
56
regress/callback-pc.py
Executable file
56
regress/callback-pc.py
Executable file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# reg_write() can't modify PC from within trace callbacks
|
||||
|
||||
from __future__ import print_function
|
||||
from unicorn import *
|
||||
from unicorn.arm_const import *
|
||||
|
||||
BASE_ADDRESS = 0x10000000
|
||||
|
||||
# sub sp, #0xc
|
||||
THUMB_CODE = "\x83\xb0" * 5
|
||||
|
||||
# callback for tracing instructions
|
||||
def hook_code(uc, address, size, user_data):
|
||||
print(">>> Tracing instruction at 0x%x, instruction size = %u" % (address, size))
|
||||
mu = user_data
|
||||
print(">>> Setting PC to 0xffffffff")
|
||||
mu.reg_write(ARM_REG_PC, 0xffffffff)
|
||||
|
||||
# callback for tracing basic blocks
|
||||
def hook_block(uc, address, size, user_data):
|
||||
print(">>> Tracing basic block at 0x%x, block size = 0x%x" %(address, size))
|
||||
mu = user_data
|
||||
print(">>> Setting PC to 0xffffffff")
|
||||
mu.reg_write(ARM_REG_PC, 0xffffffff)
|
||||
|
||||
# set up emulation
|
||||
def instruction_trace_test():
|
||||
try:
|
||||
# initialize emulator in ARM's Thumb mode
|
||||
mu = Uc(UC_ARCH_ARM, UC_MODE_THUMB)
|
||||
|
||||
# map some memory
|
||||
mu.mem_map(BASE_ADDRESS, 2 * 1024 * 1024)
|
||||
|
||||
# write machine code to be emulated to memory
|
||||
mu.mem_write(BASE_ADDRESS, THUMB_CODE)
|
||||
|
||||
# setup stack
|
||||
mu.reg_write(UC_ARM_REG_SP, BASE_ADDRESS + 2 * 1024 * 1024)
|
||||
|
||||
# tracing all instructions with customized callback
|
||||
mu.hook_add(UC_HOOK_CODE, hook_code, user_data=mu)
|
||||
|
||||
# tracing all basic blocks with customized callback
|
||||
mu.hook_add(UC_HOOK_BLOCK, hook_block, user_data=mu)
|
||||
|
||||
# emulate machine code in infinite time
|
||||
mu.emu_start(BASE_ADDRESS, BASE_ADDRESS + len(THUMB_CODE))
|
||||
|
||||
except UcError as e:
|
||||
print("ERROR: %s" % e)
|
||||
|
||||
if __name__ == '__main__':
|
||||
instruction_trace_test()
|
|
@ -20,7 +20,7 @@ mu.mem_write(CODE_ADDR, binary1)
|
|||
# emu for maximum 1 sec.
|
||||
mu.emu_start(CODE_ADDR, len(binary1), UC_SECOND_SCALE)
|
||||
|
||||
print("RAX = %x" %mu.reg_read(X86_REG_RAX))
|
||||
print("RAX = %x" %mu.reg_read(UC_X86_REG_RAX))
|
||||
|
||||
# write machine code to be emulated to memory
|
||||
mu.mem_write(CODE_ADDR, binary2)
|
||||
|
@ -28,5 +28,5 @@ mu.mem_write(CODE_ADDR, binary2)
|
|||
# emu for maximum 1 sec.
|
||||
mu.emu_start(CODE_ADDR, len(binary2), UC_SECOND_SCALE)
|
||||
|
||||
print("RAX = %x" %mu.reg_read(X86_REG_RAX))
|
||||
print("RAX = %x" %mu.reg_read(UC_X86_REG_RAX))
|
||||
|
||||
|
|
11
regress/deadlock_1.py
Executable file
11
regress/deadlock_1.py
Executable file
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/python
|
||||
# From issue #1 of Ryan Hileman
|
||||
|
||||
from unicorn import *
|
||||
|
||||
CODE = b"\x90\x91\x92"
|
||||
|
||||
mu = Uc(UC_ARCH_X86, UC_MODE_64)
|
||||
mu.mem_map(0x100000, 4 * 1024)
|
||||
mu.mem_write(0x100000, CODE)
|
||||
mu.emu_start(0x100000, 0x1000 + len(CODE))
|
|
@ -17,13 +17,13 @@ def hook_code(uc, address, size, user_data):
|
|||
# callback for tracing Linux interrupt
|
||||
def hook_intr(uc, intno, user_data):
|
||||
# only handle Linux syscall
|
||||
rip = uc.reg_read(X86_REG_RIP)
|
||||
rip = uc.reg_read(UC_X86_REG_RIP)
|
||||
if intno != 0x80:
|
||||
print("=== 0x%x: got interrupt %x, quit" %(rip, intno));
|
||||
uc.emu_stop()
|
||||
return
|
||||
|
||||
eax = uc.reg_read(X86_REG_EAX)
|
||||
eax = uc.reg_read(UC_X86_REG_EAX)
|
||||
print(">>> 0x%x: interrupt 0x%x, EAX = 0x%x" %(rip, intno, eax))
|
||||
|
||||
|
||||
|
@ -40,7 +40,7 @@ mu.hook_add(UC_HOOK_CODE, hook_code)
|
|||
mu.hook_add(UC_HOOK_INTR, hook_intr)
|
||||
|
||||
# setup stack
|
||||
mu.reg_write(X86_REG_RSP, 1024 * 1024)
|
||||
mu.reg_write(UC_X86_REG_RSP, 1024 * 1024)
|
||||
|
||||
# fill in memory with 0xCC (software breakpoint int 3)
|
||||
for i in xrange(1 * 1024):
|
||||
|
|
14
regress/memmap.py
Executable file
14
regress/memmap.py
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
# By Ryan Hileman, issue #9
|
||||
|
||||
# this prints out 2 lines and the contents must be the same
|
||||
|
||||
from unicorn import *
|
||||
uc = Uc(UC_ARCH_X86, UC_MODE_64)
|
||||
|
||||
uc.mem_map(0x8048000, 0x2000)
|
||||
uc.mem_write(0x8048000, 'test')
|
||||
print 1, str(uc.mem_read(0x8048000, 4)).encode('hex')
|
||||
|
||||
uc.mem_map(0x804a000, 0x8000)
|
||||
print 2, str(uc.mem_read(0x8048000, 4)).encode('hex')
|
8
regress/memmap_assert.py
Executable file
8
regress/memmap_assert.py
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import unicorn
|
||||
|
||||
u = unicorn.Uc(unicorn.UC_ARCH_X86, unicorn.UC_MODE_32)
|
||||
u.mem_map(0x2000, 0)
|
||||
u.mem_map(0x4000, 1)
|
||||
print "I am never reached"
|
25
regress/memmap_segfault.py
Executable file
25
regress/memmap_segfault.py
Executable file
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import unicorn
|
||||
|
||||
u = unicorn.Uc(unicorn.UC_ARCH_X86, unicorn.UC_MODE_32)
|
||||
u.mem_map(0x2000, 0x1000)
|
||||
u.mem_read(0x2000, 1)
|
||||
|
||||
for i in range(20):
|
||||
try:
|
||||
u = unicorn.Uc(unicorn.UC_ARCH_X86, unicorn.UC_MODE_32)
|
||||
u.mem_map(i*0x1000, 5)
|
||||
u.mem_read(i*0x1000, 1)
|
||||
print hex(i*0x1000) + " succeeeded"
|
||||
except unicorn.UcError:
|
||||
print hex(i*0x1000) + " failed"
|
||||
|
||||
for i in range(20):
|
||||
try:
|
||||
u = unicorn.Uc(unicorn.UC_ARCH_X86, unicorn.UC_MODE_32)
|
||||
u.mem_map(i*0x1000, 5)
|
||||
u.mem_read(i*0x1000, 1)
|
||||
print hex(i*0x1000) + " succeeeded"
|
||||
except unicorn.UcError:
|
||||
print hex(i*0x1000) + " failed"
|
12
regress/memmap_weirdness.py
Executable file
12
regress/memmap_weirdness.py
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import unicorn
|
||||
|
||||
for i in range(20):
|
||||
#try:
|
||||
u = unicorn.Uc(unicorn.UC_ARCH_X86, unicorn.UC_MODE_32)
|
||||
u.mem_map(i*0x1000, 5)
|
||||
u.mem_read(i*0x1000+6, 1)
|
||||
print hex(i*0x1000) + " succeeeded"
|
||||
#except unicorn.UcError as e:
|
||||
# print hex(i*0x1000) + " failed:",e
|
28
regress/movsd.py
Executable file
28
regress/movsd.py
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/python
|
||||
# By Ryan Hileman, issue #3
|
||||
|
||||
from capstone import *
|
||||
from unicorn import *
|
||||
from unicorn.x86_const import *
|
||||
|
||||
code = 'f20f1005aa120000'.decode('hex')
|
||||
|
||||
def dis(mem, addr):
|
||||
md = Cs(CS_ARCH_X86, CS_MODE_64)
|
||||
return '\n'.join([
|
||||
'%s %s' % (i.mnemonic, i.op_str)
|
||||
for i in md.disasm(str(mem), addr)
|
||||
])
|
||||
|
||||
def hook_code(uc, addr, size, user_data):
|
||||
mem = uc.mem_read(addr, size)
|
||||
print 'instruction size:', size
|
||||
print 'instruction:', str(mem).encode('hex'), dis(mem, addr)
|
||||
print 'reference: ', code.encode('hex'), dis(code, addr)
|
||||
|
||||
addr = 0x400000
|
||||
mu = Uc(UC_ARCH_X86, UC_MODE_64)
|
||||
mu.hook_add(UC_HOOK_CODE, hook_code)
|
||||
mu.mem_map(addr, 8 * 1024 * 1024)
|
||||
mu.mem_write(addr, code)
|
||||
mu.emu_start(addr, addr + len(code))
|
|
@ -16,17 +16,17 @@ mu.mem_write(0, binary1 + binary2)
|
|||
# emu for maximum 1 instruction.
|
||||
mu.emu_start(0, 5, 0, 1)
|
||||
|
||||
print("RAX = %u" %mu.reg_read(X86_REG_RAX))
|
||||
print("RAX = %u" %mu.reg_read(UC_X86_REG_RAX))
|
||||
|
||||
pos = mu.reg_read(X86_REG_RIP)
|
||||
pos = mu.reg_read(UC_X86_REG_RIP)
|
||||
|
||||
print("RIP = %x" %pos)
|
||||
|
||||
mu.emu_start(5, 10, 0, 1)
|
||||
|
||||
pos = mu.reg_read(X86_REG_RIP)
|
||||
pos = mu.reg_read(UC_X86_REG_RIP)
|
||||
|
||||
print("RIP = %x" %pos)
|
||||
|
||||
print("RAX = %u" %mu.reg_read(X86_REG_RAX))
|
||||
print("RAX = %u" %mu.reg_read(UC_X86_REG_RAX))
|
||||
|
||||
|
|
|
@ -16,17 +16,17 @@ mu.mem_write(0, binary1 + binary2)
|
|||
# emu for maximum 1 instruction.
|
||||
mu.emu_start(0, 10, 0, 1)
|
||||
|
||||
print("RAX = %u" %mu.reg_read(X86_REG_RAX))
|
||||
print("RAX = %u" %mu.reg_read(UC_X86_REG_RAX))
|
||||
|
||||
pos = mu.reg_read(X86_REG_RIP)
|
||||
pos = mu.reg_read(UC_X86_REG_RIP)
|
||||
|
||||
print("RIP = %x" %pos)
|
||||
|
||||
mu.emu_start(5, 10, 0, 1)
|
||||
|
||||
pos = mu.reg_read(X86_REG_RIP)
|
||||
pos = mu.reg_read(UC_X86_REG_RIP)
|
||||
|
||||
print("RIP = %x" %pos)
|
||||
|
||||
print("RAX = %u" %mu.reg_read(X86_REG_RAX))
|
||||
print("RAX = %u" %mu.reg_read(UC_X86_REG_RAX))
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ mu.mem_write(0, binary1)
|
|||
# emu for maximum 1 instruction.
|
||||
mu.emu_start(0, 10, 0, 1)
|
||||
|
||||
print("EAX = %u" %mu.reg_read(X86_REG_EAX))
|
||||
print("EAX = %u" %mu.reg_read(UC_X86_REG_EAX))
|
||||
|
||||
pos = mu.reg_read(X86_REG_EIP)
|
||||
pos = mu.reg_read(UC_X86_REG_EIP)
|
||||
|
||||
print("EIP = %x" %pos)
|
||||
|
||||
|
|
|
@ -16,17 +16,17 @@ pos = 0
|
|||
# emu for maximum 1 instruction.
|
||||
mu.emu_start(pos, len(binary1), 0, 1)
|
||||
|
||||
print("EAX = %u" %mu.reg_read(X86_REG_EAX))
|
||||
print("EAX = %u" %mu.reg_read(UC_X86_REG_EAX))
|
||||
|
||||
pos = mu.reg_read(X86_REG_EIP)
|
||||
pos = mu.reg_read(UC_X86_REG_EIP)
|
||||
|
||||
print("EIP = %x" %pos)
|
||||
|
||||
# emu to the end
|
||||
mu.emu_start(pos, len(binary1))
|
||||
|
||||
print("EAX = %u" %mu.reg_read(X86_REG_EAX))
|
||||
print("EAX = %u" %mu.reg_read(UC_X86_REG_EAX))
|
||||
|
||||
pos = mu.reg_read(X86_REG_EIP)
|
||||
pos = mu.reg_read(UC_X86_REG_EIP)
|
||||
|
||||
print("EIP = %x" %pos)
|
||||
|
|
22
regress/wrong_sp_arm.py
Executable file
22
regress/wrong_sp_arm.py
Executable file
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/python
|
||||
# By Ryan Hileman, issue #16
|
||||
|
||||
from unicorn import *
|
||||
from unicorn.arm_const import *
|
||||
|
||||
try:
|
||||
uc = Uc(UC_ARCH_ARM, UC_MODE_32)
|
||||
uc.reg_write(UC_ARM_REG_SP, 4)
|
||||
print 'Writing 4 to SP'
|
||||
print 'SP =', uc.reg_read(UC_ARM_REG_SP)
|
||||
except UcError as e:
|
||||
print("ERROR: %s" % e)
|
||||
|
||||
try:
|
||||
print "==========="
|
||||
uc = Uc(UC_ARCH_ARM, UC_MODE_ARM)
|
||||
uc.reg_write(UC_ARM_REG_SP, 4)
|
||||
print 'Writing 4 to SP'
|
||||
print 'SP =', uc.reg_read(UC_ARM_REG_SP)
|
||||
except UcError as e:
|
||||
print("ERROR: %s" % e)
|
|
@ -53,9 +53,9 @@ static void test_arm(void)
|
|||
uc_mem_write(handle, ADDRESS, (uint8_t *)ARM_CODE, sizeof(ARM_CODE) - 1);
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, ARM_REG_R0, &r0);
|
||||
uc_reg_write(handle, ARM_REG_R2, &r2);
|
||||
uc_reg_write(handle, ARM_REG_R3, &r3);
|
||||
uc_reg_write(handle, UC_ARM_REG_R0, &r0);
|
||||
uc_reg_write(handle, UC_ARM_REG_R2, &r2);
|
||||
uc_reg_write(handle, UC_ARM_REG_R3, &r3);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -73,8 +73,8 @@ static void test_arm(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, ARM_REG_R0, &r0);
|
||||
uc_reg_read(handle, ARM_REG_R1, &r1);
|
||||
uc_reg_read(handle, UC_ARM_REG_R0, &r0);
|
||||
uc_reg_read(handle, UC_ARM_REG_R1, &r1);
|
||||
printf(">>> R0 = 0x%x\n", r0);
|
||||
printf(">>> R1 = 0x%x\n", r1);
|
||||
|
||||
|
@ -106,7 +106,7 @@ static void test_thumb(void)
|
|||
uc_mem_write(handle, ADDRESS, (uint8_t *)THUMB_CODE, sizeof(THUMB_CODE) - 1);
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, ARM_REG_SP, &sp);
|
||||
uc_reg_write(handle, UC_ARM_REG_SP, &sp);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -124,7 +124,7 @@ static void test_thumb(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, ARM_REG_SP, &sp);
|
||||
uc_reg_read(handle, UC_ARM_REG_SP, &sp);
|
||||
printf(">>> SP = 0x%x\n", sp);
|
||||
|
||||
uc_close(&handle);
|
||||
|
|
|
@ -51,9 +51,9 @@ static void test_arm64(void)
|
|||
uc_mem_write(handle, ADDRESS, (uint8_t *)ARM_CODE, sizeof(ARM_CODE) - 1);
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, ARM64_REG_X11, &x11);
|
||||
uc_reg_write(handle, ARM64_REG_X13, &x13);
|
||||
uc_reg_write(handle, ARM64_REG_X15, &x15);
|
||||
uc_reg_write(handle, UC_ARM64_REG_X11, &x11);
|
||||
uc_reg_write(handle, UC_ARM64_REG_X13, &x13);
|
||||
uc_reg_write(handle, UC_ARM64_REG_X15, &x15);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -71,7 +71,7 @@ static void test_arm64(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, ARM64_REG_X11, &x11);
|
||||
uc_reg_read(handle, UC_ARM64_REG_X11, &x11);
|
||||
printf(">>> X11 = 0x%" PRIx64 "\n", x11);
|
||||
|
||||
uc_close(&handle);
|
||||
|
|
|
@ -66,26 +66,26 @@ static void test_m68k(void)
|
|||
uc_mem_write(handle, ADDRESS, (uint8_t *)M68K_CODE, sizeof(M68K_CODE) - 1);
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, M68K_REG_D0, &d0);
|
||||
uc_reg_write(handle, M68K_REG_D1, &d1);
|
||||
uc_reg_write(handle, M68K_REG_D2, &d2);
|
||||
uc_reg_write(handle, M68K_REG_D3, &d3);
|
||||
uc_reg_write(handle, M68K_REG_D4, &d4);
|
||||
uc_reg_write(handle, M68K_REG_D5, &d5);
|
||||
uc_reg_write(handle, M68K_REG_D6, &d6);
|
||||
uc_reg_write(handle, M68K_REG_D7, &d7);
|
||||
uc_reg_write(handle, UC_M68K_REG_D0, &d0);
|
||||
uc_reg_write(handle, UC_M68K_REG_D1, &d1);
|
||||
uc_reg_write(handle, UC_M68K_REG_D2, &d2);
|
||||
uc_reg_write(handle, UC_M68K_REG_D3, &d3);
|
||||
uc_reg_write(handle, UC_M68K_REG_D4, &d4);
|
||||
uc_reg_write(handle, UC_M68K_REG_D5, &d5);
|
||||
uc_reg_write(handle, UC_M68K_REG_D6, &d6);
|
||||
uc_reg_write(handle, UC_M68K_REG_D7, &d7);
|
||||
|
||||
uc_reg_write(handle, M68K_REG_A0, &a0);
|
||||
uc_reg_write(handle, M68K_REG_A1, &a1);
|
||||
uc_reg_write(handle, M68K_REG_A2, &a2);
|
||||
uc_reg_write(handle, M68K_REG_A3, &a3);
|
||||
uc_reg_write(handle, M68K_REG_A4, &a4);
|
||||
uc_reg_write(handle, M68K_REG_A5, &a5);
|
||||
uc_reg_write(handle, M68K_REG_A6, &a6);
|
||||
uc_reg_write(handle, M68K_REG_A7, &a7);
|
||||
uc_reg_write(handle, UC_M68K_REG_A0, &a0);
|
||||
uc_reg_write(handle, UC_M68K_REG_A1, &a1);
|
||||
uc_reg_write(handle, UC_M68K_REG_A2, &a2);
|
||||
uc_reg_write(handle, UC_M68K_REG_A3, &a3);
|
||||
uc_reg_write(handle, UC_M68K_REG_A4, &a4);
|
||||
uc_reg_write(handle, UC_M68K_REG_A5, &a5);
|
||||
uc_reg_write(handle, UC_M68K_REG_A6, &a6);
|
||||
uc_reg_write(handle, UC_M68K_REG_A7, &a7);
|
||||
|
||||
uc_reg_write(handle, M68K_REG_PC, &pc);
|
||||
uc_reg_write(handle, M68K_REG_SR, &sr);
|
||||
uc_reg_write(handle, UC_M68K_REG_PC, &pc);
|
||||
uc_reg_write(handle, UC_M68K_REG_SR, &sr);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -103,26 +103,26 @@ static void test_m68k(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, M68K_REG_D0, &d0);
|
||||
uc_reg_read(handle, M68K_REG_D1, &d1);
|
||||
uc_reg_read(handle, M68K_REG_D2, &d2);
|
||||
uc_reg_read(handle, M68K_REG_D3, &d3);
|
||||
uc_reg_read(handle, M68K_REG_D4, &d4);
|
||||
uc_reg_read(handle, M68K_REG_D5, &d5);
|
||||
uc_reg_read(handle, M68K_REG_D6, &d6);
|
||||
uc_reg_read(handle, M68K_REG_D7, &d7);
|
||||
uc_reg_read(handle, UC_M68K_REG_D0, &d0);
|
||||
uc_reg_read(handle, UC_M68K_REG_D1, &d1);
|
||||
uc_reg_read(handle, UC_M68K_REG_D2, &d2);
|
||||
uc_reg_read(handle, UC_M68K_REG_D3, &d3);
|
||||
uc_reg_read(handle, UC_M68K_REG_D4, &d4);
|
||||
uc_reg_read(handle, UC_M68K_REG_D5, &d5);
|
||||
uc_reg_read(handle, UC_M68K_REG_D6, &d6);
|
||||
uc_reg_read(handle, UC_M68K_REG_D7, &d7);
|
||||
|
||||
uc_reg_read(handle, M68K_REG_A0, &a0);
|
||||
uc_reg_read(handle, M68K_REG_A1, &a1);
|
||||
uc_reg_read(handle, M68K_REG_A2, &a2);
|
||||
uc_reg_read(handle, M68K_REG_A3, &a3);
|
||||
uc_reg_read(handle, M68K_REG_A4, &a4);
|
||||
uc_reg_read(handle, M68K_REG_A5, &a5);
|
||||
uc_reg_read(handle, M68K_REG_A6, &a6);
|
||||
uc_reg_read(handle, M68K_REG_A7, &a7);
|
||||
uc_reg_read(handle, UC_M68K_REG_A0, &a0);
|
||||
uc_reg_read(handle, UC_M68K_REG_A1, &a1);
|
||||
uc_reg_read(handle, UC_M68K_REG_A2, &a2);
|
||||
uc_reg_read(handle, UC_M68K_REG_A3, &a3);
|
||||
uc_reg_read(handle, UC_M68K_REG_A4, &a4);
|
||||
uc_reg_read(handle, UC_M68K_REG_A5, &a5);
|
||||
uc_reg_read(handle, UC_M68K_REG_A6, &a6);
|
||||
uc_reg_read(handle, UC_M68K_REG_A7, &a7);
|
||||
|
||||
uc_reg_read(handle, M68K_REG_PC, &pc);
|
||||
uc_reg_read(handle, M68K_REG_SR, &sr);
|
||||
uc_reg_read(handle, UC_M68K_REG_PC, &pc);
|
||||
uc_reg_read(handle, UC_M68K_REG_SR, &sr);
|
||||
|
||||
printf(">>> A0 = 0x%x\t\t>>> D0 = 0x%x\n", a0, d0);
|
||||
printf(">>> A1 = 0x%x\t\t>>> D1 = 0x%x\n", a1, d1);
|
||||
|
|
|
@ -50,7 +50,7 @@ static void test_mips_eb(void)
|
|||
uc_mem_write(handle, ADDRESS, (uint8_t *)MIPS_CODE_EB, sizeof(MIPS_CODE_EB) - 1);
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, MIPS_REG_1, &r1);
|
||||
uc_reg_write(handle, UC_MIPS_REG_1, &r1);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -68,7 +68,7 @@ static void test_mips_eb(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, MIPS_REG_1, &r1);
|
||||
uc_reg_read(handle, UC_MIPS_REG_1, &r1);
|
||||
printf(">>> R1 = 0x%x\n", r1);
|
||||
|
||||
uc_close(&handle);
|
||||
|
@ -100,7 +100,7 @@ static void test_mips_el(void)
|
|||
uc_mem_write(handle, ADDRESS, (uint8_t *)MIPS_CODE_EL, sizeof(MIPS_CODE_EL) - 1);
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, MIPS_REG_1, &r1);
|
||||
uc_reg_write(handle, UC_MIPS_REG_1, &r1);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -118,7 +118,7 @@ static void test_mips_el(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, MIPS_REG_1, &r1);
|
||||
uc_reg_read(handle, UC_MIPS_REG_1, &r1);
|
||||
printf(">>> R1 = 0x%x\n", r1);
|
||||
|
||||
uc_close(&handle);
|
||||
|
|
|
@ -52,9 +52,9 @@ static void test_sparc(void)
|
|||
uc_mem_write(handle, ADDRESS, (uint8_t *)SPARC_CODE, sizeof(SPARC_CODE) - 1);
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, SPARC_REG_G1, &g1);
|
||||
uc_reg_write(handle, SPARC_REG_G2, &g2);
|
||||
uc_reg_write(handle, SPARC_REG_G3, &g3);
|
||||
uc_reg_write(handle, UC_SPARC_REG_G1, &g1);
|
||||
uc_reg_write(handle, UC_SPARC_REG_G2, &g2);
|
||||
uc_reg_write(handle, UC_SPARC_REG_G3, &g3);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -73,7 +73,7 @@ static void test_sparc(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, SPARC_REG_G3, &g3);
|
||||
uc_reg_read(handle, UC_SPARC_REG_G3, &g3);
|
||||
printf(">>> G3 = 0x%x\n", g3);
|
||||
|
||||
uc_close(&handle);
|
||||
|
|
|
@ -41,7 +41,7 @@ static void hook_code(uch handle, uint64_t address, uint32_t size, void *user_da
|
|||
int eflags;
|
||||
printf(">>> Tracing instruction at 0x%"PRIx64 ", instruction size = 0x%x\n", address, size);
|
||||
|
||||
uc_reg_read(handle, X86_REG_EFLAGS, &eflags);
|
||||
uc_reg_read(handle, UC_X86_REG_EFLAGS, &eflags);
|
||||
printf(">>> --- EFLAGS is 0x%x\n", eflags);
|
||||
|
||||
// Uncomment below code to stop the emulation using uc_emu_stop()
|
||||
|
@ -54,7 +54,7 @@ static void hook_code64(uch handle, uint64_t address, uint32_t size, void *user_
|
|||
{
|
||||
uint64_t rip;
|
||||
|
||||
uc_reg_read(handle, X86_REG_RIP, &rip);
|
||||
uc_reg_read(handle, UC_X86_REG_RIP, &rip);
|
||||
printf(">>> Tracing instruction at 0x%"PRIx64 ", instruction size = 0x%x\n", address, size);
|
||||
printf(">>> RIP is 0x%"PRIx64 "\n", rip);
|
||||
|
||||
|
@ -103,7 +103,7 @@ static uint32_t hook_in(uch handle, uint32_t port, int size, void *user_data)
|
|||
{
|
||||
uint32_t eip;
|
||||
|
||||
uc_reg_read(handle, X86_REG_EIP, &eip);
|
||||
uc_reg_read(handle, UC_X86_REG_EIP, &eip);
|
||||
|
||||
printf("--- reading from port 0x%x, size: %u, address: 0x%x\n", port, size, eip);
|
||||
|
||||
|
@ -129,7 +129,7 @@ static void hook_out(uch handle, uint32_t port, int size, uint32_t value, void *
|
|||
uint32_t tmp;
|
||||
uint32_t eip;
|
||||
|
||||
uc_reg_read(handle, X86_REG_EIP, &eip);
|
||||
uc_reg_read(handle, UC_X86_REG_EIP, &eip);
|
||||
|
||||
printf("--- writing to port 0x%x, size: %u, value: 0x%x, address: 0x%x\n", port, size, value, eip);
|
||||
|
||||
|
@ -138,13 +138,13 @@ static void hook_out(uch handle, uint32_t port, int size, uint32_t value, void *
|
|||
default:
|
||||
return; // should never reach this
|
||||
case 1:
|
||||
uc_reg_read(handle, X86_REG_AL, &tmp);
|
||||
uc_reg_read(handle, UC_X86_REG_AL, &tmp);
|
||||
break;
|
||||
case 2:
|
||||
uc_reg_read(handle, X86_REG_AX, &tmp);
|
||||
uc_reg_read(handle, UC_X86_REG_AX, &tmp);
|
||||
break;
|
||||
case 4:
|
||||
uc_reg_read(handle, X86_REG_EAX, &tmp);
|
||||
uc_reg_read(handle, UC_X86_REG_EAX, &tmp);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -180,8 +180,8 @@ static void test_i386(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_write(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, UC_X86_REG_EDX, &r_edx);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -199,8 +199,8 @@ static void test_i386(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_read(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, UC_X86_REG_EDX, &r_edx);
|
||||
printf(">>> ECX = 0x%x\n", r_ecx);
|
||||
printf(">>> EDX = 0x%x\n", r_edx);
|
||||
|
||||
|
@ -286,8 +286,8 @@ static void test_i386_loop(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_write(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, UC_X86_REG_EDX, &r_edx);
|
||||
|
||||
// emulate machine code in 2 seconds, so we can quit even
|
||||
// if the code loops
|
||||
|
@ -300,8 +300,8 @@ static void test_i386_loop(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_read(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, UC_X86_REG_EDX, &r_edx);
|
||||
printf(">>> ECX = 0x%x\n", r_ecx);
|
||||
printf(">>> EDX = 0x%x\n", r_edx);
|
||||
|
||||
|
@ -338,8 +338,8 @@ static void test_i386_invalid_mem_read(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_write(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, UC_X86_REG_EDX, &r_edx);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -357,8 +357,8 @@ static void test_i386_invalid_mem_read(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_read(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, UC_X86_REG_EDX, &r_edx);
|
||||
printf(">>> ECX = 0x%x\n", r_ecx);
|
||||
printf(">>> EDX = 0x%x\n", r_edx);
|
||||
|
||||
|
@ -396,8 +396,8 @@ static void test_i386_invalid_mem_write(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_write(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, UC_X86_REG_EDX, &r_edx);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -418,8 +418,8 @@ static void test_i386_invalid_mem_write(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_read(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, UC_X86_REG_EDX, &r_edx);
|
||||
printf(">>> ECX = 0x%x\n", r_ecx);
|
||||
printf(">>> EDX = 0x%x\n", r_edx);
|
||||
|
||||
|
@ -467,8 +467,8 @@ static void test_i386_jump_invalid(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_write(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, UC_X86_REG_EDX, &r_edx);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -486,8 +486,8 @@ static void test_i386_jump_invalid(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_read(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, UC_X86_REG_EDX, &r_edx);
|
||||
printf(">>> ECX = 0x%x\n", r_ecx);
|
||||
printf(">>> EDX = 0x%x\n", r_edx);
|
||||
|
||||
|
@ -524,8 +524,8 @@ static void test_i386_inout(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_EAX, &r_eax);
|
||||
uc_reg_write(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_write(handle, UC_X86_REG_EAX, &r_eax);
|
||||
uc_reg_write(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -534,9 +534,9 @@ static void test_i386_inout(void)
|
|||
uc_hook_add(handle, &trace2, UC_HOOK_CODE, hook_code, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
||||
// handle IN instruction
|
||||
uc_hook_add(handle, &trace3, UC_HOOK_INSN, hook_in, NULL, X86_INS_IN);
|
||||
uc_hook_add(handle, &trace3, UC_HOOK_INSN, hook_in, NULL, UC_X86_INS_IN);
|
||||
// handle OUT instruction
|
||||
uc_hook_add(handle, &trace4, UC_HOOK_INSN, hook_out, NULL, X86_INS_OUT);
|
||||
uc_hook_add(handle, &trace4, UC_HOOK_INSN, hook_out, NULL, UC_X86_INS_OUT);
|
||||
|
||||
// emulate machine code in infinite time
|
||||
err = uc_emu_start(handle, ADDRESS, ADDRESS + sizeof(X86_CODE32_INOUT) - 1, 0, 0);
|
||||
|
@ -548,8 +548,8 @@ static void test_i386_inout(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, X86_REG_EAX, &r_eax);
|
||||
uc_reg_read(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, UC_X86_REG_EAX, &r_eax);
|
||||
uc_reg_read(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
printf(">>> EAX = 0x%x\n", r_eax);
|
||||
printf(">>> ECX = 0x%x\n", r_ecx);
|
||||
|
||||
|
@ -599,22 +599,22 @@ static void test_x86_64(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_RSP, &rsp);
|
||||
uc_reg_write(handle, UC_X86_REG_RSP, &rsp);
|
||||
|
||||
uc_reg_write(handle, X86_REG_RAX, &rax);
|
||||
uc_reg_write(handle, X86_REG_RBX, &rbx);
|
||||
uc_reg_write(handle, X86_REG_RCX, &rcx);
|
||||
uc_reg_write(handle, X86_REG_RDX, &rdx);
|
||||
uc_reg_write(handle, X86_REG_RSI, &rsi);
|
||||
uc_reg_write(handle, X86_REG_RDI, &rdi);
|
||||
uc_reg_write(handle, X86_REG_R8, &r8);
|
||||
uc_reg_write(handle, X86_REG_R9, &r9);
|
||||
uc_reg_write(handle, X86_REG_R10, &r10);
|
||||
uc_reg_write(handle, X86_REG_R11, &r11);
|
||||
uc_reg_write(handle, X86_REG_R12, &r12);
|
||||
uc_reg_write(handle, X86_REG_R13, &r13);
|
||||
uc_reg_write(handle, X86_REG_R14, &r14);
|
||||
uc_reg_write(handle, X86_REG_R15, &r15);
|
||||
uc_reg_write(handle, UC_X86_REG_RAX, &rax);
|
||||
uc_reg_write(handle, UC_X86_REG_RBX, &rbx);
|
||||
uc_reg_write(handle, UC_X86_REG_RCX, &rcx);
|
||||
uc_reg_write(handle, UC_X86_REG_RDX, &rdx);
|
||||
uc_reg_write(handle, UC_X86_REG_RSI, &rsi);
|
||||
uc_reg_write(handle, UC_X86_REG_RDI, &rdi);
|
||||
uc_reg_write(handle, UC_X86_REG_R8, &r8);
|
||||
uc_reg_write(handle, UC_X86_REG_R9, &r9);
|
||||
uc_reg_write(handle, UC_X86_REG_R10, &r10);
|
||||
uc_reg_write(handle, UC_X86_REG_R11, &r11);
|
||||
uc_reg_write(handle, UC_X86_REG_R12, &r12);
|
||||
uc_reg_write(handle, UC_X86_REG_R13, &r13);
|
||||
uc_reg_write(handle, UC_X86_REG_R14, &r14);
|
||||
uc_reg_write(handle, UC_X86_REG_R15, &r15);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_BLOCK, hook_block, NULL, (uint64_t)1, (uint64_t)0);
|
||||
|
@ -639,20 +639,20 @@ static void test_x86_64(void)
|
|||
// now print out some registers
|
||||
printf(">>> Emulation done. Below is the CPU context\n");
|
||||
|
||||
uc_reg_read(handle, X86_REG_RAX, &rax);
|
||||
uc_reg_read(handle, X86_REG_RBX, &rbx);
|
||||
uc_reg_read(handle, X86_REG_RCX, &rcx);
|
||||
uc_reg_read(handle, X86_REG_RDX, &rdx);
|
||||
uc_reg_read(handle, X86_REG_RSI, &rsi);
|
||||
uc_reg_read(handle, X86_REG_RDI, &rdi);
|
||||
uc_reg_read(handle, X86_REG_R8, &r8);
|
||||
uc_reg_read(handle, X86_REG_R9, &r9);
|
||||
uc_reg_read(handle, X86_REG_R10, &r10);
|
||||
uc_reg_read(handle, X86_REG_R11, &r11);
|
||||
uc_reg_read(handle, X86_REG_R12, &r12);
|
||||
uc_reg_read(handle, X86_REG_R13, &r13);
|
||||
uc_reg_read(handle, X86_REG_R14, &r14);
|
||||
uc_reg_read(handle, X86_REG_R15, &r15);
|
||||
uc_reg_read(handle, UC_X86_REG_RAX, &rax);
|
||||
uc_reg_read(handle, UC_X86_REG_RBX, &rbx);
|
||||
uc_reg_read(handle, UC_X86_REG_RCX, &rcx);
|
||||
uc_reg_read(handle, UC_X86_REG_RDX, &rdx);
|
||||
uc_reg_read(handle, UC_X86_REG_RSI, &rsi);
|
||||
uc_reg_read(handle, UC_X86_REG_RDI, &rdi);
|
||||
uc_reg_read(handle, UC_X86_REG_R8, &r8);
|
||||
uc_reg_read(handle, UC_X86_REG_R9, &r9);
|
||||
uc_reg_read(handle, UC_X86_REG_R10, &r10);
|
||||
uc_reg_read(handle, UC_X86_REG_R11, &r11);
|
||||
uc_reg_read(handle, UC_X86_REG_R12, &r12);
|
||||
uc_reg_read(handle, UC_X86_REG_R13, &r13);
|
||||
uc_reg_read(handle, UC_X86_REG_R14, &r14);
|
||||
uc_reg_read(handle, UC_X86_REG_R15, &r15);
|
||||
|
||||
printf(">>> RAX = 0x%" PRIx64 "\n", rax);
|
||||
printf(">>> RBX = 0x%" PRIx64 "\n", rbx);
|
||||
|
|
|
@ -27,7 +27,7 @@ static void hook_code(uch handle, uint64_t address, uint32_t size, void *user_da
|
|||
|
||||
printf("Tracing instruction at 0x%"PRIx64 ", instruction size = 0x%x\n", address, size);
|
||||
|
||||
uc_reg_read(handle, X86_REG_EIP, &r_eip);
|
||||
uc_reg_read(handle, UC_X86_REG_EIP, &r_eip);
|
||||
printf("*** EIP = %x ***: ", r_eip);
|
||||
|
||||
size = MIN(sizeof(tmp), size);
|
||||
|
@ -53,8 +53,8 @@ static void hook_intr(uch handle, uint32_t intno, void *user_data)
|
|||
if (intno != 0x80)
|
||||
return;
|
||||
|
||||
uc_reg_read(handle, X86_REG_EAX, &r_eax);
|
||||
uc_reg_read(handle, X86_REG_EIP, &r_eip);
|
||||
uc_reg_read(handle, UC_X86_REG_EAX, &r_eax);
|
||||
uc_reg_read(handle, UC_X86_REG_EIP, &r_eip);
|
||||
|
||||
switch(r_eax) {
|
||||
default:
|
||||
|
@ -66,10 +66,10 @@ static void hook_intr(uch handle, uint32_t intno, void *user_data)
|
|||
break;
|
||||
case 4: // sys_write
|
||||
// ECX = buffer address
|
||||
uc_reg_read(handle, X86_REG_ECX, &r_ecx);
|
||||
uc_reg_read(handle, UC_X86_REG_ECX, &r_ecx);
|
||||
|
||||
// EDX = buffer size
|
||||
uc_reg_read(handle, X86_REG_EDX, &r_edx);
|
||||
uc_reg_read(handle, UC_X86_REG_EDX, &r_edx);
|
||||
|
||||
// read the buffer in
|
||||
size = MIN(sizeof(buffer)-1, r_edx);
|
||||
|
@ -113,7 +113,7 @@ static void test_i386(void)
|
|||
}
|
||||
|
||||
// initialize machine registers
|
||||
uc_reg_write(handle, X86_REG_ESP, &r_esp);
|
||||
uc_reg_write(handle, UC_X86_REG_ESP, &r_esp);
|
||||
|
||||
// tracing all instructions by having @begin > @end
|
||||
uc_hook_add(handle, &trace1, UC_HOOK_CODE, hook_code, NULL, 1, 0);
|
||||
|
|
120
uc.c
120
uc.c
|
@ -36,43 +36,9 @@ static uint64_t map_begin[32], map_end[32];
|
|||
static int map_count = 0;
|
||||
|
||||
|
||||
static unsigned int all_arch = 0;
|
||||
|
||||
static void archs_enable(void)
|
||||
{
|
||||
static bool initialized = false;
|
||||
|
||||
if (initialized)
|
||||
return;
|
||||
|
||||
#ifdef UNICORN_HAS_ARM
|
||||
all_arch = all_arch + (1 << UC_ARCH_ARM);
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_ARM64
|
||||
all_arch = all_arch + (1 << UC_ARCH_ARM64);
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_MIPS
|
||||
all_arch = all_arch + (1 << UC_ARCH_MIPS);
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_SPARC
|
||||
all_arch = all_arch + (1 << UC_ARCH_SPARC);
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_M68K
|
||||
all_arch = all_arch + (1 << UC_ARCH_M68K);
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_X86
|
||||
all_arch = all_arch + (1 << UC_ARCH_X86);
|
||||
#endif
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
|
||||
UNICORN_EXPORT
|
||||
unsigned int uc_version(unsigned int *major, unsigned int *minor)
|
||||
{
|
||||
archs_enable();
|
||||
|
||||
if (major != NULL && minor != NULL) {
|
||||
*major = UC_API_MAJOR;
|
||||
*minor = UC_API_MINOR;
|
||||
|
@ -126,25 +92,41 @@ const char *uc_strerror(uc_err code)
|
|||
return "Invalid instruction (UC_ERR_INSN_INVALID)";
|
||||
case UC_ERR_HOOK:
|
||||
return "Invalid hook type (UC_ERR_HOOK)";
|
||||
case UC_ERR_MAP:
|
||||
return "Invalid memory mapping (UC_ERR_MAP)";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UNICORN_EXPORT
|
||||
bool uc_support(int query)
|
||||
bool uc_arch_supported(uc_arch arch)
|
||||
{
|
||||
archs_enable();
|
||||
switch (arch) {
|
||||
#ifdef UNICORN_HAS_ARM
|
||||
case UC_ARCH_ARM: return true;
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_ARM64
|
||||
case UC_ARCH_ARM64: return true;
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_M68K
|
||||
case UC_ARCH_M68K: return true;
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_MIPS
|
||||
case UC_ARCH_MIPS: return true;
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_PPC
|
||||
case UC_ARCH_PPC: return true;
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_SPARC
|
||||
case UC_ARCH_SPARC: return true;
|
||||
#endif
|
||||
#ifdef UNICORN_HAS_X86
|
||||
case UC_ARCH_X86: return true;
|
||||
#endif
|
||||
|
||||
if (query == UC_ARCH_ALL)
|
||||
return all_arch == ((1 << UC_ARCH_ARM) | (1 << UC_ARCH_ARM64) |
|
||||
(1 << UC_ARCH_MIPS) | (1 << UC_ARCH_X86) |
|
||||
(1 << UC_ARCH_M68K) | (1 << UC_ARCH_SPARC));
|
||||
|
||||
if ((unsigned int)query < UC_ARCH_MAX)
|
||||
return ((all_arch & (1 << query)) != 0);
|
||||
|
||||
// unsupported query
|
||||
return false;
|
||||
/* Invalid or disabled arch */
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -153,8 +135,6 @@ uc_err uc_open(uc_arch arch, uc_mode mode, uch *handle)
|
|||
{
|
||||
struct uc_struct *uc;
|
||||
|
||||
archs_enable();
|
||||
|
||||
if (arch < UC_ARCH_MAX) {
|
||||
uc = calloc(1, sizeof(*uc));
|
||||
if (!uc) {
|
||||
|
@ -197,6 +177,14 @@ uc_err uc_open(uc_arch arch, uc_mode mode, uch *handle)
|
|||
#ifdef UNICORN_HAS_ARM
|
||||
case UC_ARCH_ARM:
|
||||
uc->init_arch = arm_uc_init;
|
||||
|
||||
// verify mode
|
||||
if (mode != UC_MODE_ARM && mode != UC_MODE_THUMB) {
|
||||
*handle = 0;
|
||||
free(uc);
|
||||
return UC_ERR_MODE;
|
||||
}
|
||||
|
||||
if (mode == UC_MODE_THUMB)
|
||||
uc->thumb = 1;
|
||||
break;
|
||||
|
@ -427,7 +415,7 @@ uc_err uc_emu_start(uch handle, uint64_t begin, uint64_t until, uint64_t timeout
|
|||
break;
|
||||
|
||||
case UC_ARCH_M68K:
|
||||
uc_reg_write(handle, M68K_REG_PC, &begin);
|
||||
uc_reg_write(handle, UC_M68K_REG_PC, &begin);
|
||||
break;
|
||||
|
||||
case UC_ARCH_X86:
|
||||
|
@ -435,13 +423,13 @@ uc_err uc_emu_start(uch handle, uint64_t begin, uint64_t until, uint64_t timeout
|
|||
default:
|
||||
break;
|
||||
case UC_MODE_16:
|
||||
uc_reg_write(handle, X86_REG_IP, &begin);
|
||||
uc_reg_write(handle, UC_X86_REG_IP, &begin);
|
||||
break;
|
||||
case UC_MODE_32:
|
||||
uc_reg_write(handle, X86_REG_EIP, &begin);
|
||||
uc_reg_write(handle, UC_X86_REG_EIP, &begin);
|
||||
break;
|
||||
case UC_MODE_64:
|
||||
uc_reg_write(handle, X86_REG_RIP, &begin);
|
||||
uc_reg_write(handle, UC_X86_REG_RIP, &begin);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -452,23 +440,23 @@ uc_err uc_emu_start(uch handle, uint64_t begin, uint64_t until, uint64_t timeout
|
|||
break;
|
||||
case UC_MODE_THUMB:
|
||||
case UC_MODE_ARM:
|
||||
uc_reg_write(handle, ARM_REG_R15, &begin);
|
||||
uc_reg_write(handle, UC_ARM_REG_R15, &begin);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case UC_ARCH_ARM64:
|
||||
uc_reg_write(handle, ARM64_REG_PC, &begin);
|
||||
uc_reg_write(handle, UC_ARM64_REG_PC, &begin);
|
||||
break;
|
||||
|
||||
case UC_ARCH_MIPS:
|
||||
// TODO: MIPS32/MIPS64/BIGENDIAN etc
|
||||
uc_reg_write(handle, MIPS_REG_PC, &begin);
|
||||
uc_reg_write(handle, UC_MIPS_REG_PC, &begin);
|
||||
break;
|
||||
|
||||
case UC_ARCH_SPARC:
|
||||
// TODO: Sparc/Sparc64
|
||||
uc_reg_write(handle, SPARC_REG_PC, &begin);
|
||||
uc_reg_write(handle, UC_SPARC_REG_PC, &begin);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -552,6 +540,10 @@ uc_err uc_mem_map(uch handle, uint64_t address, size_t size)
|
|||
// invalid handle
|
||||
return UC_ERR_UCH;
|
||||
|
||||
if (size == 0)
|
||||
// invalid memory mapping
|
||||
return UC_ERR_MAP;
|
||||
|
||||
// align to 8KB boundary
|
||||
map_begin[map_count] = address & (~ (8*1024 - 1));
|
||||
s = (size + 8*1024 - 1) & (~ (8*1024 - 1));
|
||||
|
@ -623,7 +615,7 @@ static uc_err _hook_insn(struct uc_struct *uc, unsigned int insn_id, void *callb
|
|||
case UC_ARCH_X86:
|
||||
switch(insn_id) {
|
||||
default: break;
|
||||
case X86_INS_OUT:
|
||||
case UC_X86_INS_OUT:
|
||||
// FIXME: only one event handler at the same time
|
||||
i = hook_find_new(uc);
|
||||
if (i) {
|
||||
|
@ -634,7 +626,7 @@ static uc_err _hook_insn(struct uc_struct *uc, unsigned int insn_id, void *callb
|
|||
return UC_ERR_OK;
|
||||
} else
|
||||
return UC_ERR_OOM;
|
||||
case X86_INS_IN:
|
||||
case UC_X86_INS_IN:
|
||||
// FIXME: only one event handler at the same time
|
||||
i = hook_find_new(uc);
|
||||
if (i) {
|
||||
|
@ -645,6 +637,18 @@ static uc_err _hook_insn(struct uc_struct *uc, unsigned int insn_id, void *callb
|
|||
return UC_ERR_OK;
|
||||
} else
|
||||
return UC_ERR_OOM;
|
||||
case UC_X86_INS_SYSCALL:
|
||||
case UC_X86_INS_SYSENTER:
|
||||
// FIXME: only one event handler at the same time
|
||||
i = hook_find_new(uc);
|
||||
if (i) {
|
||||
uc->hook_callbacks[i].callback = callback;
|
||||
uc->hook_callbacks[i].user_data = user_data;
|
||||
*evh = i;
|
||||
uc->hook_syscall_idx = i;
|
||||
return UC_ERR_OK;
|
||||
} else
|
||||
return UC_ERR_OOM;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue