unicorn编译安装:
https://github.com/unicorn-engine/unicorn
(./make.sh之后./make.sh install)
unicorn简介:
应用场景:
python模拟X86_32:
更多的python使用unicorn的实例请参考:https://github.com/unicorn-engine/unicorn/tree/master/bindings/python
C语言模拟X86_32:
更多的C语言使用unicorn的实例请参考:
https://github.com/unicorn-engine/unicorn/tree/master/samples
bindiff安装地址和安装教程:https://www.cnblogs.com/lsdb/p/10543411.html
IDA7.5我装过bindiff5和bindiff6,bindiff7装的时候没识别到我的ida路径,不知为何
先不使用bindiff的ida插件模式,就普通使用方法,先创建一个workspace之后,将两个i64文件导入即可
这里可以看出相似度
但是一个一个导入还是比较麻烦
在安装bindiff的时候,选择你的IDA的路径,就可以顺手将bindiff插件安装到ida中
先将那份so文件libunicorn.so(在./make.sh和./make.sh install之后会在文件夹中生成)拖入对应版本IDA进行分析之后,保存i64文件
然后使用IDA载入要分析的文件,然后ctrl+6,点击Diff Database
将那个i64文件载入,载入之后,再次ctrl+6,点击
函数声明:
uc_arch和uc_mode的枚举值:
然后在程序中是uc_open(4u, 8, &uc);
即uc_open(UC_ARCH_X86, UC_MODE_64, &uc);
最后一个参数是uc_prot的枚举值:
例如程序中:
uc_mem_map(uc, 0x1000LL, 0x2000LL, 7u);
说明这个是从0x1000开始映射了0x2000大小的内存,最后一个参数是权限,uc_prot值为7代表UC_PROT_ALL
函数声明:
例程序中:
uc_mem_write(uc, 0x1000LL, &code, 0x1027LL);
从0x1000开始写入我们的X86_CODE64,最后一个参数是0x1027,这个是说明code的最小大小的,查看内存可知,code共0x104F,大于0x1027字节
函数声明:
第二个值是unicorn规定的x86寄存器的枚举值:
uc_hook_add函数声明:
uc_hook_add的第三个参数的值是2,即(uc_hook_type)UC_HOOK_INSN, 钩住一个特定的指令——这里只支持非常小的指令子集
如果第三个参数的值是0x400,说明这是钩取的内存读 // Hook memory read events.
反正这个函数的关键就在第三个参数
最后一个参数,就像函数声明中说的一样,如果@type = UC_HOOK_INSN,这是指令ID(例如:UC_X86_INS_OUT,就是一些X86的指令,枚举值如下:
分析程序中的函数:
由参数三为2可知,钩取的是指令,查询最后一个参数指令的枚举值,得到钩取的指令是UC_X86_INS_IN
同理,得到钩取的指令是:UC_X86_INS_OUT
钩取指令为:UC_X86_INS_SYSCALL
fs内存访问处理,改变 fs:0 的值,关键算法部分很重要
第三个参数的值为8:
即
// Hook basic blocks
UC_HOOK_BLOCK = 1 << 3,
钩取了基本块,代码解密回调
第三个参数的值为0x4000,即UC_HOOK_INSN_INVALID
钩取了非法指令,执行的回调函数是ControlFlow1
代码控制流控制回调1
代码控制流控制回调2
以第一块和第二块为例:
最开始给了一个user_data,然后开始执行,最开始执行第一个块会触发块回调函数decrypt,然后里面先判断这个块是否被执行,显然第一次是没有的,然后就会使用这个初值和当前入口块的RIP调用函数miniDec计算出这个区块解密的key,然后调用crypt和key进行异或解密之后,设置了RIP执行这个区块,到后面会有读取内存fs,然后cmp的指令,当读取内存的时候,就会触发内存回调函数,用(0x756E69636F726E03LL * temp[0] + 0xBADC0DEC001CAFELL)重新更改那个地址的值,所以cmp得的值就会不同,ZF就为0,之后又执行0x3F0F指令(代码块结束的标志),会触发非法指令回调ControlFlow1,在这个回调里面先判断rip是否是0x3F0F,然后通过key和当前rip的0x3F0F值,计算出一个key2,然后for循环得到flowInfo表中的i下标,然后读取EFLAGS的ZF标志位来判断如何读取下一个标准块的信息(key+=,rip+=),然后就执行rip所指向的第二个块,又会触发回调函数decrypt,将之前的块重新加密,并利用变化后的rip(即第二个代码块的入口rip)和之前的key计算出下一个代码块的key,然后对下一个区块进行异或解密,并设置好rip......以此类推下去
在decrypt函数最开始下断点,然后单步
发现那个加密代码没有被执行,说明那个if条件就是判断代码有没有被执行
然后继续执行,就会发现下方代码在解密代码块
在write函数写回去之前,查看tmp变量(注意tmp是地址,引用过去)即可得到解密后的代码
如图:
然后这段解密后的代码会被执行,触发之前我们uc_hook_add设置的回调函数(syscall,mov r15, fs:0x100,以及3F0F触发非法指令回调)
syscall的回调
mov r15, fs:0x100的回调
改变了内存,然后之后cmp比较的值就不同了,然后ZF标志位就不会被置为1
所以说下面其实每次都是执行的else,即ZF标志位为0执行的那个条件
3F0F非法指令的回调:(控制执行流程的)
在最后设置了rip
之后便会开始准备执行第二个块,但是此时又会触发代码块回调函数decrypt
发现这次会执行if条件里面的内容,其实就是重新将代码块加密回去,我们将断点设置到crypt函数,然后查看ptr地址指向的值
可以看到就是我们之前解密出来的代码,说明这里就是将代码进行了重新加密
然后下方又通过上一次的key和即将要执行的代码块的入口RIP,通过函数miniDec得到下一个key
然后下方又进行解密即将要执行的代码块
以此类推.......跟着执行下去
在一些地址会触发特定的回调,ControlFlow2就是执行到0x10A3-0x10A4地址的时候调用的
然后这个函数内,调整了控制流并更改 key
重建思路:
以 bfs 遍历顺序,每一个块当成一个节点,从入口基本块开始解密,解密后再查询分支信息表获取后继基本块的相对偏移与key,最后将新基本块的信息加入到队列,等待分析。遍历时注意维护路径上的 key 累计值。
所有基本块解密完成后,可以得到每个基本块的后继基本块的相对偏移。
要在基本块的结尾插入跳转指令,这将改变代码布局,使得原始相对偏移不可用,所以我采取重编译来解决这个问题,重编译之前将原始基本块的入口地址作为基本的符号名,基本块结尾用 jmp/jz 等指令连接。
关键:
这里是对生成的随机数然后/ 0xE10ui64进行检验
这里等价于printf("input flag:\n");
这里等价于scanf("%s",flag);
这里通过先设置一个值,然后每次读取都会触发内存读的回调函数(changeKey),temp[0] = 0x756E69636F726E03LL * temp[0] + 0xBADC0DEC001CAFELL,最后和flag进行第一次异或
之后就是四个字节的取,_mm_crc32_u32之后加上一个from_t0值,这个值就是from_t0 = time0_1 / 0xE10;
最后再将flag和一些值进行异或,之后比较
爆破思路:
①v28 = from_t0 + _mm_crc32_u32(0, v28); // 关键步骤
生成的v28就是最后会和那些已知的值进行异或的,from_to是随机数/0xE10生成的,_mm_crc32_u32里的v28是之前flag在上面进行的②((_BYTE *)flag_ptr + i_0) ^= (_BYTE)data1 + (_BYTE)v35;得到的,而(_BYTE)data1 + (_BYTE)v35这些我们可以通过它本身的代码运算得到。
假如现在我们有flag的前四个字节,有已知的四种格式:qwb{,QWB{,flag{,FLAG{
倒推的话,我们将最后比较的值和那些已知的值再次异或,即可得到①式生成的v28,然后现在我们正向推导过去,我们先计算出第一次和flag进行异或的那些值,即(_BYTE)data1 + (_BYTE)v35,可以通过它给的代码和changekey这个读内存的回调函数计算出来,之后将我们猜测的几种flag的前四个字节和这些值异或,异或之后传入_mm_crc32_u32函数即可,那么现在显然我们就只有from_t0一个未知量,可以计算得出它的四种可能,然后前面不是有个对生成的随机数进行了验证的代码片段 ,可以通过那个判断出哪个是正确的,然后我们便可以逆推回去了。
参考:
https://panda0s.top/2021/06/14/%E5%BC%BA%E7%BD%91%E6%9D%AF-unicorn-like-a-pro/#强网杯-unicorn-like-a-pro
使用 C 和 Python 语言编程的教程。
http:
/
/
unicorn
-
engine.org
/
docs
/
tutorial.html
比较 Unicorn 和 QEMU
http:
/
/
unicorn
-
engine.org
/
docs
/
beyond_qemu.html
Micro Uncorn
-
Engine API 中文文档
https:
/
/
github.com
/
kabeor
/
Micro
-
Unicorn
-
Engine
-
API
-
Documentation
使用 C 和 Python 语言编程的教程。
http:
/
/
unicorn
-
engine.org
/
docs
/
tutorial.html
比较 Unicorn 和 QEMU
http:
/
/
unicorn
-
engine.org
/
docs
/
beyond_qemu.html
Micro Uncorn
-
Engine API 中文文档
https:
/
/
github.com
/
kabeor
/
Micro
-
Unicorn
-
Engine
-
API
-
Documentation
Unicorn 是一个轻量级, 多平台, 多架构的 CPU 模拟器框架.
我们可以更好地关注 CPU 操作, 忽略机器设备的差异. 想象一下, 我们可以将其应用于这些情景:
比如我们单纯只是需要模拟代码的执行而非需要一个真的 CPU 去完成那些操作, 又或者想要更安全地
分析恶意代码, 检测病毒特征, 或者想要在逆向过程中验证某些代码的含义. 使用 CPU 模拟器可以很好
地帮助我们提供便捷.
它的亮点 (这也归功于 Unicorn 是基于 qemu 而开发的) 包括:
支持多种架构: Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64).
对 Windows 和 nix 系统 (已确认包含 Mac OSX, Linux, BSD & Solaris) 的原生支持
具有平台独立且简洁易于使用的 API
使用 JIT 编译技术, 性能表现优异
Unicorn 是一个轻量级, 多平台, 多架构的 CPU 模拟器框架.
我们可以更好地关注 CPU 操作, 忽略机器设备的差异. 想象一下, 我们可以将其应用于这些情景:
比如我们单纯只是需要模拟代码的执行而非需要一个真的 CPU 去完成那些操作, 又或者想要更安全地
分析恶意代码, 检测病毒特征, 或者想要在逆向过程中验证某些代码的含义. 使用 CPU 模拟器可以很好
地帮助我们提供便捷.
它的亮点 (这也归功于 Unicorn 是基于 qemu 而开发的) 包括:
支持多种架构: Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64).
对 Windows 和 nix 系统 (已确认包含 Mac OSX, Linux, BSD & Solaris) 的原生支持
具有平台独立且简洁易于使用的 API
使用 JIT 编译技术, 性能表现优异
• 你可以调用恶意软件中一些有趣的函数, 而不用创建一个有害的进程.
• 用于 CTF 竞赛
• 用于模糊测试
• 用于 gdb 插件, 基于代码模拟执行的插件
• 模拟执行一些混淆代码
• 你可以调用恶意软件中一些有趣的函数, 而不用创建一个有害的进程.
• 用于 CTF 竞赛
• 用于模糊测试
• 用于 gdb 插件, 基于代码模拟执行的插件
• 模拟执行一些混淆代码
from
unicorn
import
*
from
unicorn.x86_const
import
*
X86_CODE32
=
b
"\x41\x4a"
Address
=
0x1000000
mu
=
Uc(UC_ARCH_X86, UC_MODE_32)
mu.mem_map(Address,
2
*
1024
*
1024
)
mu.mem_write(Address, X86_CODE32)
mu.reg_write(UC_X86_REG_ECX,
0X1234
)
mu.reg_write(UC_X86_REG_EDX,
0X7890
)
mu.emu_start(Address, Address
+
len
(X86_CODE32))
r_ecx
=
mu.reg_read(UC_X86_REG_ECX)
r_edx
=
mu.reg_read(UC_X86_REG_EDX)
print
(
">> ecx = 0x%x"
%
r_ecx)
print
(
">> edx = 0x%x"
%
r_edx)
from
unicorn
import
*
from
unicorn.x86_const
import
*
X86_CODE32
=
b
"\x41\x4a"
Address
=
0x1000000
mu
=
Uc(UC_ARCH_X86, UC_MODE_32)
mu.mem_map(Address,
2
*
1024
*
1024
)
mu.mem_write(Address, X86_CODE32)
mu.reg_write(UC_X86_REG_ECX,
0X1234
)
mu.reg_write(UC_X86_REG_EDX,
0X7890
)
mu.emu_start(Address, Address
+
len
(X86_CODE32))
r_ecx
=
mu.reg_read(UC_X86_REG_ECX)
r_edx
=
mu.reg_read(UC_X86_REG_EDX)
print
(
">> ecx = 0x%x"
%
r_ecx)
print
(
">> edx = 0x%x"
%
r_edx)
/
/
memory address where emulation starts
int
main(
int
argc, char
*
*
argv, char
*
*
envp)
{
uc_engine
*
uc;
uc_err err;
int
r_ecx
=
0x1234
;
/
/
ECX register
int
r_edx
=
0x7890
;
/
/
EDX register
printf(
"Emulate i386 code\n"
);
err
=
uc_open(UC_ARCH_X86, UC_MODE_32, &uc);
/
/
以X86_32的模式初始化
if
(err !
=
UC_ERR_OK)
{
printf(
"Failed on uc_open() with error returned: %u\n"
, err);
return
-
1
;
}
c_mem_map(uc, ADDRESS,
2
*
1024
*
1024
, UC_PROT_ALL);
/
/
在对应地址出映射
2M
的内存
/
/
write machine code to be emulated to memory
if
(uc_mem_write(uc, ADDRESS, X86_CODE32, sizeof(X86_CODE32)
-
1
)){
printf(
"Failed to write emulation code to memory, quit!\n"
);
return
-
1
;
}
uc_reg_write(uc, UC_X86_REG_ECX, &r_ecx);
uc_reg_write(uc, UC_X86_REG_EDX, &r_edx);
/
/
初始话寄存器的值
/
/
最后两个参数没有指定,在无限时间和无限指令中模拟代码
err
=
uc_emu_start(uc, ADDRESS, ADDRESS
+
sizeof(X86_CODE32)
-
1
,
0
,
0
);
if
(err){
printf(
"Failed on uc_emu_start() with error returned %u: %s\n"
,
err, uc_strerror(err));
}
/
/
now
print
out some registers
printf(
"Emulation done. Below is the CPU context\n"
);
uc_reg_read(uc, UC_X86_REG_ECX, &r_ecx);
uc_reg_read(uc, UC_X86_REG_EDX, &r_edx);
printf(
">>> ECX = 0x%x\n"
, r_ecx);
printf(
">>> EDX = 0x%x\n"
, r_edx);
uc_close(uc);
return
0
;
}
/
/
memory address where emulation starts
int
main(
int
argc, char
*
*
argv, char
*
*
envp)
{
uc_engine
*
uc;
uc_err err;
int
r_ecx
=
0x1234
;
/
/
ECX register
int
r_edx
=
0x7890
;
/
/
EDX register
printf(
"Emulate i386 code\n"
);
err
=
uc_open(UC_ARCH_X86, UC_MODE_32, &uc);
/
/
以X86_32的模式初始化
if
(err !
=
UC_ERR_OK)
{
printf(
"Failed on uc_open() with error returned: %u\n"
, err);
return
-
1
;
}
c_mem_map(uc, ADDRESS,
2
*
1024
*
1024
, UC_PROT_ALL);
/
/
在对应地址出映射
2M
的内存
/
/
write machine code to be emulated to memory
if
(uc_mem_write(uc, ADDRESS, X86_CODE32, sizeof(X86_CODE32)
-
1
)){
printf(
"Failed to write emulation code to memory, quit!\n"
);
return
-
1
;
}
uc_reg_write(uc, UC_X86_REG_ECX, &r_ecx);
uc_reg_write(uc, UC_X86_REG_EDX, &r_edx);
/
/
初始话寄存器的值
/
/
最后两个参数没有指定,在无限时间和无限指令中模拟代码
err
=
uc_emu_start(uc, ADDRESS, ADDRESS
+
sizeof(X86_CODE32)
-
1
,
0
,
0
);
if
(err){
printf(
"Failed on uc_emu_start() with error returned %u: %s\n"
,
err, uc_strerror(err));
}
/
/
now
print
out some registers
printf(
"Emulation done. Below is the CPU context\n"
);
uc_reg_read(uc, UC_X86_REG_ECX, &r_ecx);
uc_reg_read(uc, UC_X86_REG_EDX, &r_edx);
printf(
">>> ECX = 0x%x\n"
, r_ecx);
printf(
">>> EDX = 0x%x\n"
, r_edx);
uc_close(uc);
return
0
;
}
/
*
Create new instance of unicorn engine.
@arch
: architecture
type
(UC_ARCH_
*
)
@mode
: hardware mode. This
is
combined of UC_MODE_
*
@uc
: pointer to uc_engine, which will be updated at
return
time
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_open(uc_arch arch, uc_mode mode, uc_engine
*
*
uc);
/
*
Create new instance of unicorn engine.
@arch
: architecture
type
(UC_ARCH_
*
)
@mode
: hardware mode. This
is
combined of UC_MODE_
*
@uc
: pointer to uc_engine, which will be updated at
return
time
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_open(uc_arch arch, uc_mode mode, uc_engine
*
*
uc);
@arch
:架构类型(UC_ARCH_
*
)
@mode
:硬件模式。 这是结合 UC_MODE_
*
@uc
:指向uc_engine的指针,返回时会更新
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
@arch
:架构类型(UC_ARCH_
*
)
@mode
:硬件模式。 这是结合 UC_MODE_
*
@uc
:指向uc_engine的指针,返回时会更新
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
typedef enum uc_arch {
UC_ARCH_ARM
=
1
,
/
/
ARM architecture (including Thumb, Thumb
-
2
)
UC_ARCH_ARM64,
/
/
ARM
-
64
, also called AArch64
UC_ARCH_MIPS,
/
/
Mips architecture
UC_ARCH_X86,
/
/
X86 architecture (including x86 & x86
-
64
)
UC_ARCH_PPC,
/
/
PowerPC architecture (currently unsupported)
UC_ARCH_SPARC,
/
/
Sparc architecture
UC_ARCH_M68K,
/
/
M68K architecture
UC_ARCH_MAX,
} uc_arch;
typedef enum uc_arch {
UC_ARCH_ARM
=
1
,
/
/
ARM architecture (including Thumb, Thumb
-
2
)
UC_ARCH_ARM64,
/
/
ARM
-
64
, also called AArch64
UC_ARCH_MIPS,
/
/
Mips architecture
UC_ARCH_X86,
/
/
X86 architecture (including x86 & x86
-
64
)
UC_ARCH_PPC,
/
/
PowerPC architecture (currently unsupported)
UC_ARCH_SPARC,
/
/
Sparc architecture
UC_ARCH_M68K,
/
/
M68K architecture
UC_ARCH_MAX,
} uc_arch;
/
/
Mode
type
typedef enum uc_mode {
UC_MODE_LITTLE_ENDIAN
=
0
,
/
/
little
-
endian mode (default mode)
UC_MODE_BIG_ENDIAN
=
1
<<
30
,
/
/
big
-
endian mode
/
/
arm
/
arm64
UC_MODE_ARM
=
0
,
/
/
ARM mode
UC_MODE_THUMB
=
1
<<
4
,
/
/
THUMB mode (including Thumb
-
2
)
UC_MODE_MCLASS
=
1
<<
5
,
/
/
ARM's Cortex
-
M series (currently unsupported)
UC_MODE_V8
=
1
<<
6
,
/
/
ARMv8 A32 encodings
for
ARM (currently unsupported)
/
/
arm (
32bit
) cpu types
UC_MODE_ARM926
=
1
<<
7
,
/
/
ARM926 CPU
type
UC_MODE_ARM946
=
1
<<
8
,
/
/
ARM946 CPU
type
UC_MODE_ARM1176
=
1
<<
9
,
/
/
ARM1176 CPU
type
/
/
ARM BE8
UC_MODE_ARMBE8
=
1
<<
10
,
/
/
Big
-
endian data
and
Little
-
endian code
/
/
mips
UC_MODE_MICRO
=
1
<<
4
,
/
/
MicroMips mode (currently unsupported)
UC_MODE_MIPS3
=
1
<<
5
,
/
/
Mips III ISA (currently unsupported)
UC_MODE_MIPS32R6
=
1
<<
6
,
/
/
Mips32r6 ISA (currently unsupported)
UC_MODE_MIPS32
=
1
<<
2
,
/
/
Mips32 ISA
UC_MODE_MIPS64
=
1
<<
3
,
/
/
Mips64 ISA
/
/
x86
/
x64
UC_MODE_16
=
1
<<
1
,
/
/
16
-
bit mode
UC_MODE_32
=
1
<<
2
,
/
/
32
-
bit mode
UC_MODE_64
=
1
<<
3
,
/
/
64
-
bit mode
/
/
ppc
UC_MODE_PPC32
=
1
<<
2
,
/
/
32
-
bit mode (currently unsupported)
UC_MODE_PPC64
=
1
<<
3
,
/
/
64
-
bit mode (currently unsupported)
UC_MODE_QPX
=
1
<<
4
,
/
/
Quad Processing eXtensions mode (currently unsupported)
/
/
sparc
UC_MODE_SPARC32
=
1
<<
2
,
/
/
32
-
bit mode
UC_MODE_SPARC64
=
1
<<
3
,
/
/
64
-
bit mode
UC_MODE_V9
=
1
<<
4
,
/
/
SparcV9 mode (currently unsupported)
/
/
m68k
} uc_mode;
/
/
Mode
type
typedef enum uc_mode {
UC_MODE_LITTLE_ENDIAN
=
0
,
/
/
little
-
endian mode (default mode)
UC_MODE_BIG_ENDIAN
=
1
<<
30
,
/
/
big
-
endian mode
/
/
arm
/
arm64
UC_MODE_ARM
=
0
,
/
/
ARM mode
UC_MODE_THUMB
=
1
<<
4
,
/
/
THUMB mode (including Thumb
-
2
)
UC_MODE_MCLASS
=
1
<<
5
,
/
/
ARM's Cortex
-
M series (currently unsupported)
UC_MODE_V8
=
1
<<
6
,
/
/
ARMv8 A32 encodings
for
ARM (currently unsupported)
/
/
arm (
32bit
) cpu types
UC_MODE_ARM926
=
1
<<
7
,
/
/
ARM926 CPU
type
UC_MODE_ARM946
=
1
<<
8
,
/
/
ARM946 CPU
type
UC_MODE_ARM1176
=
1
<<
9
,
/
/
ARM1176 CPU
type
/
/
ARM BE8
UC_MODE_ARMBE8
=
1
<<
10
,
/
/
Big
-
endian data
and
Little
-
endian code
/
/
mips
UC_MODE_MICRO
=
1
<<
4
,
/
/
MicroMips mode (currently unsupported)
UC_MODE_MIPS3
=
1
<<
5
,
/
/
Mips III ISA (currently unsupported)
UC_MODE_MIPS32R6
=
1
<<
6
,
/
/
Mips32r6 ISA (currently unsupported)
UC_MODE_MIPS32
=
1
<<
2
,
/
/
Mips32 ISA
UC_MODE_MIPS64
=
1
<<
3
,
/
/
Mips64 ISA
/
/
x86
/
x64
UC_MODE_16
=
1
<<
1
,
/
/
16
-
bit mode
UC_MODE_32
=
1
<<
2
,
/
/
32
-
bit mode
UC_MODE_64
=
1
<<
3
,
/
/
64
-
bit mode
/
/
ppc
UC_MODE_PPC32
=
1
<<
2
,
/
/
32
-
bit mode (currently unsupported)
UC_MODE_PPC64
=
1
<<
3
,
/
/
64
-
bit mode (currently unsupported)
UC_MODE_QPX
=
1
<<
4
,
/
/
Quad Processing eXtensions mode (currently unsupported)
/
/
sparc
UC_MODE_SPARC32
=
1
<<
2
,
/
/
32
-
bit mode
UC_MODE_SPARC64
=
1
<<
3
,
/
/
64
-
bit mode
UC_MODE_V9
=
1
<<
4
,
/
/
SparcV9 mode (currently unsupported)
/
/
m68k
} uc_mode;
/
*
Map
memory
in
for
emulation.
This API adds a memory region that can be used by emulation.
@uc
: handle returned by uc_open()
@address
: starting address of the new memory region to be mapped
in
.
This address must be aligned to
4KB
,
or
this will
return
with UC_ERR_ARG error.
@size
: size of the new memory region to be mapped
in
.
This size must be a multiple of
4KB
,
or
this will
return
with UC_ERR_ARG error.
@perms
: Permissions
for
the newly mapped region.
This must be some combination of UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC,
or
this will
return
with UC_ERR_ARG error.
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_mem_map(uc_engine
*
uc, uint64_t address, size_t size, uint32_t perms);
/
*
Map
memory
in
for
emulation.
This API adds a memory region that can be used by emulation.
@uc
: handle returned by uc_open()
@address
: starting address of the new memory region to be mapped
in
.
This address must be aligned to
4KB
,
or
this will
return
with UC_ERR_ARG error.
@size
: size of the new memory region to be mapped
in
.
This size must be a multiple of
4KB
,
or
this will
return
with UC_ERR_ARG error.
@perms
: Permissions
for
the newly mapped region.
This must be some combination of UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC,
or
this will
return
with UC_ERR_ARG error.
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_mem_map(uc_engine
*
uc, uint64_t address, size_t size, uint32_t perms);
映射内存以进行仿真。
该API添加了一个可供仿真使用的内存区域。
参数:
@uc
: uc_open() 返回的句柄
@address
:要映射到的新内存区域的起始地址。
该地址必须与
4KB
对齐,否则将返回 UC_ERR_ARG 错误。
@size
:要映射到的新内存区域的大小。
此大小必须是
4KB
的倍数,否则将返回 UC_ERR_ARG 错误。
@perms
:新映射区域的权限。
这必须是 UC_PROT_READ | 的某种组合。 UC_PROT_WRITE | UC_PROT_EXEC,
否则这将返回 UC_ERR_ARG 错误。
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
映射内存以进行仿真。
该API添加了一个可供仿真使用的内存区域。
参数:
@uc
: uc_open() 返回的句柄
@address
:要映射到的新内存区域的起始地址。
该地址必须与
4KB
对齐,否则将返回 UC_ERR_ARG 错误。
@size
:要映射到的新内存区域的大小。
此大小必须是
4KB
的倍数,否则将返回 UC_ERR_ARG 错误。
@perms
:新映射区域的权限。
这必须是 UC_PROT_READ | 的某种组合。 UC_PROT_WRITE | UC_PROT_EXEC,
否则这将返回 UC_ERR_ARG 错误。
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
typedef enum uc_prot {
UC_PROT_NONE
=
0
,
UC_PROT_READ
=
1
,
UC_PROT_WRITE
=
2
,
UC_PROT_EXEC
=
4
,
UC_PROT_ALL
=
7
,
} uc_prot;
typedef enum uc_prot {
UC_PROT_NONE
=
0
,
UC_PROT_READ
=
1
,
UC_PROT_WRITE
=
2
,
UC_PROT_EXEC
=
4
,
UC_PROT_ALL
=
7
,
} uc_prot;
/
*
Write to a
range
of bytes
in
memory.
@uc
: handle returned by uc_open()
@address
: starting memory address of bytes to
set
.
@bytes
: pointer to a variable containing data to be written to memory.
@size
: size of memory to write to.
NOTE: @bytes must be big enough to contain @size bytes.
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_mem_write(uc_engine
*
uc, uint64_t address, const void
*
bytes, size_t size);
/
*
Write to a
range
of bytes
in
memory.
@uc
: handle returned by uc_open()
@address
: starting memory address of bytes to
set
.
@bytes
: pointer to a variable containing data to be written to memory.
@size
: size of memory to write to.
NOTE: @bytes must be big enough to contain @size bytes.
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_mem_write(uc_engine
*
uc, uint64_t address, const void
*
bytes, size_t size);
写入内存中的字节范围。
@uc
: uc_open() 返回的句柄
@address
:要设置的字节的起始内存地址。
@bytes
:指向包含要写入内存的数据的变量的指针。
@size
:要写入的内存大小。
注意:@bytes 必须足够大以包含 @size 字节。
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)
写入内存中的字节范围。
@uc
: uc_open() 返回的句柄
@address
:要设置的字节的起始内存地址。
@bytes
:指向包含要写入内存的数据的变量的指针。
@size
:要写入的内存大小。
注意:@bytes 必须足够大以包含 @size 字节。
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)
/
*
Write to register.
@uc
: handle returned by uc_open()
@regid
: register
ID
that
is
to be modified.
@value
: pointer to the value that will
set
to register @regid
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_reg_write(uc_engine
*
uc,
int
regid, const void
*
value);
/
*
Write to register.
@uc
: handle returned by uc_open()
@regid
: register
ID
that
is
to be modified.
@value
: pointer to the value that will
set
to register @regid
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_reg_write(uc_engine
*
uc,
int
regid, const void
*
value);
@uc
: uc_open() 返回的句柄
@regid
:要修改的注册
ID
。
@value
:指向将设置为注册@regid 的值的指针
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
@uc
: uc_open() 返回的句柄
@regid
:要修改的注册
ID
。
@value
:指向将设置为注册@regid 的值的指针
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
/
/
> X86 registers
typedef enum uc_x86_reg {
UC_X86_REG_INVALID
=
0
,
UC_X86_REG_AH, UC_X86_REG_AL, UC_X86_REG_AX, UC_X86_REG_BH, UC_X86_REG_BL,
UC_X86_REG_BP, UC_X86_REG_BPL, UC_X86_REG_BX, UC_X86_REG_CH, UC_X86_REG_CL,
UC_X86_REG_CS, UC_X86_REG_CX, UC_X86_REG_DH, UC_X86_REG_DI, UC_X86_REG_DIL,
UC_X86_REG_DL, UC_X86_REG_DS, UC_X86_REG_DX, UC_X86_REG_EAX, UC_X86_REG_EBP,
UC_X86_REG_EBX, UC_X86_REG_ECX, UC_X86_REG_EDI, UC_X86_REG_EDX, UC_X86_REG_EFLAGS,
UC_X86_REG_EIP, UC_X86_REG_EIZ, UC_X86_REG_ES, UC_X86_REG_ESI, UC_X86_REG_ESP,
UC_X86_REG_FPSW, UC_X86_REG_FS, UC_X86_REG_GS, UC_X86_REG_IP, UC_X86_REG_RAX,
UC_X86_REG_RBP, UC_X86_REG_RBX, UC_X86_REG_RCX, UC_X86_REG_RDI, UC_X86_REG_RDX,
UC_X86_REG_RIP, UC_X86_REG_RIZ, UC_X86_REG_RSI, UC_X86_REG_RSP, UC_X86_REG_SI,
UC_X86_REG_SIL, UC_X86_REG_SP, UC_X86_REG_SPL, UC_X86_REG_SS, UC_X86_REG_CR0,
UC_X86_REG_CR1, UC_X86_REG_CR2, UC_X86_REG_CR3, UC_X86_REG_CR4, UC_X86_REG_CR5,
UC_X86_REG_CR6, UC_X86_REG_CR7, UC_X86_REG_CR8, UC_X86_REG_CR9, UC_X86_REG_CR10,
UC_X86_REG_CR11, UC_X86_REG_CR12, UC_X86_REG_CR13, UC_X86_REG_CR14, UC_X86_REG_CR15,
UC_X86_REG_DR0, UC_X86_REG_DR1, UC_X86_REG_DR2, UC_X86_REG_DR3, UC_X86_REG_DR4,
UC_X86_REG_DR5, UC_X86_REG_DR6, UC_X86_REG_DR7, UC_X86_REG_DR8, UC_X86_REG_DR9,
UC_X86_REG_DR10, UC_X86_REG_DR11, UC_X86_REG_DR12, UC_X86_REG_DR13, UC_X86_REG_DR14,
UC_X86_REG_DR15, UC_X86_REG_FP0, UC_X86_REG_FP1, UC_X86_REG_FP2, UC_X86_REG_FP3,
UC_X86_REG_FP4, UC_X86_REG_FP5, UC_X86_REG_FP6, UC_X86_REG_FP7,
UC_X86_REG_K0, UC_X86_REG_K1, UC_X86_REG_K2, UC_X86_REG_K3, UC_X86_REG_K4,
UC_X86_REG_K5, UC_X86_REG_K6, UC_X86_REG_K7, UC_X86_REG_MM0, UC_X86_REG_MM1,
UC_X86_REG_MM2, UC_X86_REG_MM3, UC_X86_REG_MM4, UC_X86_REG_MM5, UC_X86_REG_MM6,
UC_X86_REG_MM7, UC_X86_REG_R8, UC_X86_REG_R9, UC_X86_REG_R10, UC_X86_REG_R11,
UC_X86_REG_R12, UC_X86_REG_R13, UC_X86_REG_R14, UC_X86_REG_R15,
UC_X86_REG_ST0, UC_X86_REG_ST1, UC_X86_REG_ST2, UC_X86_REG_ST3,
UC_X86_REG_ST4, UC_X86_REG_ST5, UC_X86_REG_ST6, UC_X86_REG_ST7,
UC_X86_REG_XMM0, UC_X86_REG_XMM1, UC_X86_REG_XMM2, UC_X86_REG_XMM3, UC_X86_REG_XMM4,
UC_X86_REG_XMM5, UC_X86_REG_XMM6, UC_X86_REG_XMM7, UC_X86_REG_XMM8, UC_X86_REG_XMM9,
UC_X86_REG_XMM10, UC_X86_REG_XMM11, UC_X86_REG_XMM12, UC_X86_REG_XMM13, UC_X86_REG_XMM14,
UC_X86_REG_XMM15, UC_X86_REG_XMM16, UC_X86_REG_XMM17, UC_X86_REG_XMM18, UC_X86_REG_XMM19,
UC_X86_REG_XMM20, UC_X86_REG_XMM21, UC_X86_REG_XMM22, UC_X86_REG_XMM23, UC_X86_REG_XMM24,
UC_X86_REG_XMM25, UC_X86_REG_XMM26, UC_X86_REG_XMM27, UC_X86_REG_XMM28, UC_X86_REG_XMM29,
UC_X86_REG_XMM30, UC_X86_REG_XMM31, UC_X86_REG_YMM0, UC_X86_REG_YMM1, UC_X86_REG_YMM2,
UC_X86_REG_YMM3, UC_X86_REG_YMM4, UC_X86_REG_YMM5, UC_X86_REG_YMM6, UC_X86_REG_YMM7,
UC_X86_REG_YMM8, UC_X86_REG_YMM9, UC_X86_REG_YMM10, UC_X86_REG_YMM11, UC_X86_REG_YMM12,
UC_X86_REG_YMM13, UC_X86_REG_YMM14, UC_X86_REG_YMM15, UC_X86_REG_YMM16, UC_X86_REG_YMM17,
UC_X86_REG_YMM18, UC_X86_REG_YMM19, UC_X86_REG_YMM20, UC_X86_REG_YMM21, UC_X86_REG_YMM22,
UC_X86_REG_YMM23, UC_X86_REG_YMM24, UC_X86_REG_YMM25, UC_X86_REG_YMM26, UC_X86_REG_YMM27,
UC_X86_REG_YMM28, UC_X86_REG_YMM29, UC_X86_REG_YMM30, UC_X86_REG_YMM31, UC_X86_REG_ZMM0,
UC_X86_REG_ZMM1, UC_X86_REG_ZMM2, UC_X86_REG_ZMM3, UC_X86_REG_ZMM4, UC_X86_REG_ZMM5,
UC_X86_REG_ZMM6, UC_X86_REG_ZMM7, UC_X86_REG_ZMM8, UC_X86_REG_ZMM9, UC_X86_REG_ZMM10,
UC_X86_REG_ZMM11, UC_X86_REG_ZMM12, UC_X86_REG_ZMM13, UC_X86_REG_ZMM14, UC_X86_REG_ZMM15,
UC_X86_REG_ZMM16, UC_X86_REG_ZMM17, UC_X86_REG_ZMM18, UC_X86_REG_ZMM19, UC_X86_REG_ZMM20,
UC_X86_REG_ZMM21, UC_X86_REG_ZMM22, UC_X86_REG_ZMM23, UC_X86_REG_ZMM24, UC_X86_REG_ZMM25,
UC_X86_REG_ZMM26, UC_X86_REG_ZMM27, UC_X86_REG_ZMM28, UC_X86_REG_ZMM29, UC_X86_REG_ZMM30,
UC_X86_REG_ZMM31, UC_X86_REG_R8B, UC_X86_REG_R9B, UC_X86_REG_R10B, UC_X86_REG_R11B,
UC_X86_REG_R12B, UC_X86_REG_R13B, UC_X86_REG_R14B, UC_X86_REG_R15B, UC_X86_REG_R8D,
UC_X86_REG_R9D, UC_X86_REG_R10D, UC_X86_REG_R11D, UC_X86_REG_R12D, UC_X86_REG_R13D,
UC_X86_REG_R14D, UC_X86_REG_R15D, UC_X86_REG_R8W, UC_X86_REG_R9W, UC_X86_REG_R10W,
UC_X86_REG_R11W, UC_X86_REG_R12W, UC_X86_REG_R13W, UC_X86_REG_R14W, UC_X86_REG_R15W,
UC_X86_REG_IDTR, UC_X86_REG_GDTR, UC_X86_REG_LDTR, UC_X86_REG_TR, UC_X86_REG_FPCW,
UC_X86_REG_FPTAG,
UC_X86_REG_MSR,
/
/
Model
-
Specific Register
UC_X86_REG_MXCSR,
UC_X86_REG_FS_BASE,
/
/
Base regs
for
x86_64
UC_X86_REG_GS_BASE,
UC_X86_REG_ENDING
/
/
<
-
-
mark the end of the
list
of registers
} uc_x86_reg;
/
/
> X86 registers
typedef enum uc_x86_reg {
UC_X86_REG_INVALID
=
0
,
UC_X86_REG_AH, UC_X86_REG_AL, UC_X86_REG_AX, UC_X86_REG_BH, UC_X86_REG_BL,
UC_X86_REG_BP, UC_X86_REG_BPL, UC_X86_REG_BX, UC_X86_REG_CH, UC_X86_REG_CL,
UC_X86_REG_CS, UC_X86_REG_CX, UC_X86_REG_DH, UC_X86_REG_DI, UC_X86_REG_DIL,
UC_X86_REG_DL, UC_X86_REG_DS, UC_X86_REG_DX, UC_X86_REG_EAX, UC_X86_REG_EBP,
UC_X86_REG_EBX, UC_X86_REG_ECX, UC_X86_REG_EDI, UC_X86_REG_EDX, UC_X86_REG_EFLAGS,
UC_X86_REG_EIP, UC_X86_REG_EIZ, UC_X86_REG_ES, UC_X86_REG_ESI, UC_X86_REG_ESP,
UC_X86_REG_FPSW, UC_X86_REG_FS, UC_X86_REG_GS, UC_X86_REG_IP, UC_X86_REG_RAX,
UC_X86_REG_RBP, UC_X86_REG_RBX, UC_X86_REG_RCX, UC_X86_REG_RDI, UC_X86_REG_RDX,
UC_X86_REG_RIP, UC_X86_REG_RIZ, UC_X86_REG_RSI, UC_X86_REG_RSP, UC_X86_REG_SI,
UC_X86_REG_SIL, UC_X86_REG_SP, UC_X86_REG_SPL, UC_X86_REG_SS, UC_X86_REG_CR0,
UC_X86_REG_CR1, UC_X86_REG_CR2, UC_X86_REG_CR3, UC_X86_REG_CR4, UC_X86_REG_CR5,
UC_X86_REG_CR6, UC_X86_REG_CR7, UC_X86_REG_CR8, UC_X86_REG_CR9, UC_X86_REG_CR10,
UC_X86_REG_CR11, UC_X86_REG_CR12, UC_X86_REG_CR13, UC_X86_REG_CR14, UC_X86_REG_CR15,
UC_X86_REG_DR0, UC_X86_REG_DR1, UC_X86_REG_DR2, UC_X86_REG_DR3, UC_X86_REG_DR4,
UC_X86_REG_DR5, UC_X86_REG_DR6, UC_X86_REG_DR7, UC_X86_REG_DR8, UC_X86_REG_DR9,
UC_X86_REG_DR10, UC_X86_REG_DR11, UC_X86_REG_DR12, UC_X86_REG_DR13, UC_X86_REG_DR14,
UC_X86_REG_DR15, UC_X86_REG_FP0, UC_X86_REG_FP1, UC_X86_REG_FP2, UC_X86_REG_FP3,
UC_X86_REG_FP4, UC_X86_REG_FP5, UC_X86_REG_FP6, UC_X86_REG_FP7,
UC_X86_REG_K0, UC_X86_REG_K1, UC_X86_REG_K2, UC_X86_REG_K3, UC_X86_REG_K4,
UC_X86_REG_K5, UC_X86_REG_K6, UC_X86_REG_K7, UC_X86_REG_MM0, UC_X86_REG_MM1,
UC_X86_REG_MM2, UC_X86_REG_MM3, UC_X86_REG_MM4, UC_X86_REG_MM5, UC_X86_REG_MM6,
UC_X86_REG_MM7, UC_X86_REG_R8, UC_X86_REG_R9, UC_X86_REG_R10, UC_X86_REG_R11,
UC_X86_REG_R12, UC_X86_REG_R13, UC_X86_REG_R14, UC_X86_REG_R15,
UC_X86_REG_ST0, UC_X86_REG_ST1, UC_X86_REG_ST2, UC_X86_REG_ST3,
UC_X86_REG_ST4, UC_X86_REG_ST5, UC_X86_REG_ST6, UC_X86_REG_ST7,
UC_X86_REG_XMM0, UC_X86_REG_XMM1, UC_X86_REG_XMM2, UC_X86_REG_XMM3, UC_X86_REG_XMM4,
UC_X86_REG_XMM5, UC_X86_REG_XMM6, UC_X86_REG_XMM7, UC_X86_REG_XMM8, UC_X86_REG_XMM9,
UC_X86_REG_XMM10, UC_X86_REG_XMM11, UC_X86_REG_XMM12, UC_X86_REG_XMM13, UC_X86_REG_XMM14,
UC_X86_REG_XMM15, UC_X86_REG_XMM16, UC_X86_REG_XMM17, UC_X86_REG_XMM18, UC_X86_REG_XMM19,
UC_X86_REG_XMM20, UC_X86_REG_XMM21, UC_X86_REG_XMM22, UC_X86_REG_XMM23, UC_X86_REG_XMM24,
UC_X86_REG_XMM25, UC_X86_REG_XMM26, UC_X86_REG_XMM27, UC_X86_REG_XMM28, UC_X86_REG_XMM29,
UC_X86_REG_XMM30, UC_X86_REG_XMM31, UC_X86_REG_YMM0, UC_X86_REG_YMM1, UC_X86_REG_YMM2,
UC_X86_REG_YMM3, UC_X86_REG_YMM4, UC_X86_REG_YMM5, UC_X86_REG_YMM6, UC_X86_REG_YMM7,
UC_X86_REG_YMM8, UC_X86_REG_YMM9, UC_X86_REG_YMM10, UC_X86_REG_YMM11, UC_X86_REG_YMM12,
UC_X86_REG_YMM13, UC_X86_REG_YMM14, UC_X86_REG_YMM15, UC_X86_REG_YMM16, UC_X86_REG_YMM17,
UC_X86_REG_YMM18, UC_X86_REG_YMM19, UC_X86_REG_YMM20, UC_X86_REG_YMM21, UC_X86_REG_YMM22,
UC_X86_REG_YMM23, UC_X86_REG_YMM24, UC_X86_REG_YMM25, UC_X86_REG_YMM26, UC_X86_REG_YMM27,
UC_X86_REG_YMM28, UC_X86_REG_YMM29, UC_X86_REG_YMM30, UC_X86_REG_YMM31, UC_X86_REG_ZMM0,
UC_X86_REG_ZMM1, UC_X86_REG_ZMM2, UC_X86_REG_ZMM3, UC_X86_REG_ZMM4, UC_X86_REG_ZMM5,
UC_X86_REG_ZMM6, UC_X86_REG_ZMM7, UC_X86_REG_ZMM8, UC_X86_REG_ZMM9, UC_X86_REG_ZMM10,
UC_X86_REG_ZMM11, UC_X86_REG_ZMM12, UC_X86_REG_ZMM13, UC_X86_REG_ZMM14, UC_X86_REG_ZMM15,
UC_X86_REG_ZMM16, UC_X86_REG_ZMM17, UC_X86_REG_ZMM18, UC_X86_REG_ZMM19, UC_X86_REG_ZMM20,
UC_X86_REG_ZMM21, UC_X86_REG_ZMM22, UC_X86_REG_ZMM23, UC_X86_REG_ZMM24, UC_X86_REG_ZMM25,
UC_X86_REG_ZMM26, UC_X86_REG_ZMM27, UC_X86_REG_ZMM28, UC_X86_REG_ZMM29, UC_X86_REG_ZMM30,
UC_X86_REG_ZMM31, UC_X86_REG_R8B, UC_X86_REG_R9B, UC_X86_REG_R10B, UC_X86_REG_R11B,
UC_X86_REG_R12B, UC_X86_REG_R13B, UC_X86_REG_R14B, UC_X86_REG_R15B, UC_X86_REG_R8D,
UC_X86_REG_R9D, UC_X86_REG_R10D, UC_X86_REG_R11D, UC_X86_REG_R12D, UC_X86_REG_R13D,
UC_X86_REG_R14D, UC_X86_REG_R15D, UC_X86_REG_R8W, UC_X86_REG_R9W, UC_X86_REG_R10W,
UC_X86_REG_R11W, UC_X86_REG_R12W, UC_X86_REG_R13W, UC_X86_REG_R14W, UC_X86_REG_R15W,
UC_X86_REG_IDTR, UC_X86_REG_GDTR, UC_X86_REG_LDTR, UC_X86_REG_TR, UC_X86_REG_FPCW,
UC_X86_REG_FPTAG,
UC_X86_REG_MSR,
/
/
Model
-
Specific Register
UC_X86_REG_MXCSR,
UC_X86_REG_FS_BASE,
/
/
Base regs
for
x86_64
UC_X86_REG_GS_BASE,
UC_X86_REG_ENDING
/
/
<
-
-
mark the end of the
list
of registers
} uc_x86_reg;
/
*
Register callback
for
a hook event.
The callback will be run when the hook event
is
hit.
@uc
: handle returned by uc_open()
@hh
: hook handle returned
from
this registration. To be used
in
uc_hook_del() API
@type
: hook
type
, refer to uc_hook_type enum
@callback
: callback to be run when instruction
is
hit
@user_data
: user
-
defined data. This will be passed to callback function
in
its
last argument @user_data
@begin
: start address of the area where the callback
is
in
effect (inclusive)
@end
: end address of the area where the callback
is
in
effect (inclusive)
NOTE
1
: the callback
is
called only
if
related address
is
in
range
[@begin, @end]
NOTE
2
:
if
@begin > @end, callback
is
called whenever this hook
type
is
triggered
@...: variable arguments (depending on @
type
)
NOTE:
if
@
type
=
UC_HOOK_INSN, this
is
the instruction
ID
(ex: UC_X86_INS_OUT)
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_hook_add(uc_engine
*
uc, uc_hook
*
hh,
int
type
, void
*
callback,
void
*
user_data, uint64_t begin, uint64_t end, ...);
/
*
Register callback
for
a hook event.
The callback will be run when the hook event
is
hit.
@uc
: handle returned by uc_open()
@hh
: hook handle returned
from
this registration. To be used
in
uc_hook_del() API
@type
: hook
type
, refer to uc_hook_type enum
@callback
: callback to be run when instruction
is
hit
@user_data
: user
-
defined data. This will be passed to callback function
in
its
last argument @user_data
@begin
: start address of the area where the callback
is
in
effect (inclusive)
@end
: end address of the area where the callback
is
in
effect (inclusive)
NOTE
1
: the callback
is
called only
if
related address
is
in
range
[@begin, @end]
NOTE
2
:
if
@begin > @end, callback
is
called whenever this hook
type
is
triggered
@...: variable arguments (depending on @
type
)
NOTE:
if
@
type
=
UC_HOOK_INSN, this
is
the instruction
ID
(ex: UC_X86_INS_OUT)
@return
UC_ERR_OK on success,
or
other value on failure (refer to uc_err enum
for
detailed error).
*
/
UNICORN_EXPORT
uc_err uc_hook_add(uc_engine
*
uc, uc_hook
*
hh,
int
type
, void
*
callback,
void
*
user_data, uint64_t begin, uint64_t end, ...);
*
*
为钩子事件注册回调
当钩子事件被命中时,回调将运行
*
*
@uc
: uc_open() 返回的句柄
@hh
:
*
*
从这个注册函数返回的钩子句柄
*
*
。用于 uc_hook_del() API
*
*
@
type
:钩子类型,参考uc_hook_type枚举
*
*
*
*
@callback:当指令被命中时运行的回调
*
*
*
*
@user_data:用户定义的数据。这将传递给回调函数的最后一个参数@user_data
*
*
@begin
:回调生效区域的起始地址(含)
@end
:回调生效区域的结束地址(含)
注意
1
:仅当相关地址在 [@begin, @end] 范围内时才会调用回调
注意
2
:如果 @begin > @end,每当触发此钩子类型时都会调用回调
@...:可变参数(取决于@
type
)
*
*
注意:如果@
type
=
UC_HOOK_INSN,这是指令
ID
(例如:UC_X86_INS_OUT)
*
*
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
*
*
为钩子事件注册回调
当钩子事件被命中时,回调将运行
*
*
@uc
: uc_open() 返回的句柄
@hh
:
*
*
从这个注册函数返回的钩子句柄
*
*
。用于 uc_hook_del() API
*
*
@
type
:钩子类型,参考uc_hook_type枚举
*
*
*
*
@callback:当指令被命中时运行的回调
*
*
*
*
@user_data:用户定义的数据。这将传递给回调函数的最后一个参数@user_data
*
*
@begin
:回调生效区域的起始地址(含)
@end
:回调生效区域的结束地址(含)
注意
1
:仅当相关地址在 [@begin, @end] 范围内时才会调用回调
注意
2
:如果 @begin > @end,每当触发此钩子类型时都会调用回调
@...:可变参数(取决于@
type
)
*
*
注意:如果@
type
=
UC_HOOK_INSN,这是指令
ID
(例如:UC_X86_INS_OUT)
*
*
@return
UC_ERR_OK 成功,或其他值失败(参考 uc_err 枚举
详细错误)。
/
/
All
type
of hooks
for
uc_hook_add() API.
typedef enum uc_hook_type {
/
/
Hook
all
interrupt
/
syscall events
UC_HOOK_INTR
=
1
<<
0
,
*
*
/
/
Hook a particular instruction
-
only a very small subset of instructions supported here
UC_HOOK_INSN
=
1
<<
1
,
*
*
/
/
Hook a
range
of code
UC_HOOK_CODE
=
1
<<
2
,
/
/
Hook basic blocks
UC_HOOK_BLOCK
=
1
<<
3
,
/
/
Hook
for
memory read on unmapped memory
UC_HOOK_MEM_READ_UNMAPPED
=
1
<<
4
,
/
/
Hook
for
invalid memory write events
UC_HOOK_MEM_WRITE_UNMAPPED
=
1
<<
5
,
/
/
Hook
for
invalid memory fetch
for
execution events
UC_HOOK_MEM_FETCH_UNMAPPED
=
1
<<
6
,
/
/
Hook
for
memory read on read
-
protected memory
UC_HOOK_MEM_READ_PROT
=
1
<<
7
,
/
/
Hook
for
memory write on write
-
protected memory
UC_HOOK_MEM_WRITE_PROT
=
1
<<
8
,
/
/
Hook
for
memory fetch on non
-
executable memory
UC_HOOK_MEM_FETCH_PROT
=
1
<<
9
,
*
*
/
/
Hook memory read events.
UC_HOOK_MEM_READ
=
1
<<
10
,
*
*
/
/
Hook memory write events.
UC_HOOK_MEM_WRITE
=
1
<<
11
,
/
/
Hook memory fetch
for
execution events
UC_HOOK_MEM_FETCH
=
1
<<
12
,
/
/
Hook memory read events, but only successful access.
/
/
The callback will be triggered after successful read.
UC_HOOK_MEM_READ_AFTER
=
1
<<
13
,
/
/
Hook invalid instructions exceptions.
UC_HOOK_INSN_INVALID
=
1
<<
14
,
} uc_hook_type;
/
/
All
type
of hooks
for
uc_hook_add() API.
typedef enum uc_hook_type {
/
/
Hook
all
interrupt
/
syscall events
UC_HOOK_INTR
=
1
<<
0
,
*
*
/
/
Hook a particular instruction
-
only a very small subset of instructions supported here
UC_HOOK_INSN
=
1
<<
1
,
*
*
/
/
Hook a
range
of code
UC_HOOK_CODE
=
1
<<
2
,
/
/
Hook basic blocks
UC_HOOK_BLOCK
=
1
<<
3
,
/
/
Hook
for
memory read on unmapped memory
UC_HOOK_MEM_READ_UNMAPPED
=
1
<<
4
,
/
/
Hook
for
invalid memory write events
UC_HOOK_MEM_WRITE_UNMAPPED
=
1
<<
5
,
/
/
Hook
for
invalid memory fetch
for
execution events
UC_HOOK_MEM_FETCH_UNMAPPED
=
1
<<
6
,
/
/
Hook
for
memory read on read
-
protected memory
UC_HOOK_MEM_READ_PROT
=
1
<<
7
,
/
/
Hook
for
memory write on write
-
protected memory
UC_HOOK_MEM_WRITE_PROT
=
1
<<
8
,
/
/
Hook
for
memory fetch on non
-
executable memory
UC_HOOK_MEM_FETCH_PROT
=
1
<<
9
,
*
*
/
/
Hook memory read events.
UC_HOOK_MEM_READ
=
1
<<
10
,
*
*
/
/
Hook memory write events.
UC_HOOK_MEM_WRITE
=
1
<<
11
,
/
/
Hook memory fetch
for
execution events
UC_HOOK_MEM_FETCH
=
1
<<
12
,
/
/
Hook memory read events, but only successful access.
/
/
The callback will be triggered after successful read.
UC_HOOK_MEM_READ_AFTER
=
1
<<
13
,
/
/
Hook invalid instructions exceptions.
UC_HOOK_INSN_INVALID
=
1
<<
14
,
} uc_hook_type;
/
/
> X86 instructions
typedef enum uc_x86_insn {
UC_X86_INS_INVALID
=
0
,
UC_X86_INS_AAA,
UC_X86_INS_AAD,
UC_X86_INS_AAM,
UC_X86_INS_AAS,
UC_X86_INS_FABS,
UC_X86_INS_ADC,
UC_X86_INS_ADCX,
UC_X86_INS_ADD,
UC_X86_INS_ADDPD,
UC_X86_INS_ADDPS,
UC_X86_INS_ADDSD,
UC_X86_INS_ADDSS,
UC_X86_INS_ADDSUBPD,
UC_X86_INS_ADDSUBPS,
UC_X86_INS_FADD,
UC_X86_INS_FIADD,
UC_X86_INS_FADDP,
UC_X86_INS_ADOX,
UC_X86_INS_AESDECLAST,
UC_X86_INS_AESDEC,
UC_X86_INS_AESENCLAST,
UC_X86_INS_AESENC,
UC_X86_INS_AESIMC,
UC_X86_INS_AESKEYGENASSIST,
UC_X86_INS_AND,
UC_X86_INS_ANDN,
UC_X86_INS_ANDNPD,
UC_X86_INS_ANDNPS,
UC_X86_INS_ANDPD,
UC_X86_INS_ANDPS,
UC_X86_INS_ARPL,
UC_X86_INS_BEXTR,
UC_X86_INS_BLCFILL,
UC_X86_INS_BLCI,
UC_X86_INS_BLCIC,
UC_X86_INS_BLCMSK,
UC_X86_INS_BLCS,
UC_X86_INS_BLENDPD,
UC_X86_INS_BLENDPS,
UC_X86_INS_BLENDVPD,
UC_X86_INS_BLENDVPS,
UC_X86_INS_BLSFILL,
UC_X86_INS_BLSI,
UC_X86_INS_BLSIC,
UC_X86_INS_BLSMSK,
UC_X86_INS_BLSR,
UC_X86_INS_BOUND,
UC_X86_INS_BSF,
UC_X86_INS_BSR,
UC_X86_INS_BSWAP,
UC_X86_INS_BT,
UC_X86_INS_BTC,
UC_X86_INS_BTR,
UC_X86_INS_BTS,
UC_X86_INS_BZHI,
UC_X86_INS_CALL,
UC_X86_INS_CBW,
UC_X86_INS_CDQ,
UC_X86_INS_CDQE,
UC_X86_INS_FCHS,
UC_X86_INS_CLAC,
UC_X86_INS_CLC,
UC_X86_INS_CLD,
UC_X86_INS_CLFLUSH,
UC_X86_INS_CLFLUSHOPT,
UC_X86_INS_CLGI,
UC_X86_INS_CLI,
UC_X86_INS_CLTS,
UC_X86_INS_CLWB,
UC_X86_INS_CMC,
UC_X86_INS_CMOVA,
UC_X86_INS_CMOVAE,
UC_X86_INS_CMOVB,
UC_X86_INS_CMOVBE,
UC_X86_INS_FCMOVBE,
UC_X86_INS_FCMOVB,
UC_X86_INS_CMOVE,
UC_X86_INS_FCMOVE,
UC_X86_INS_CMOVG,
UC_X86_INS_CMOVGE,
UC_X86_INS_CMOVL,
UC_X86_INS_CMOVLE,
UC_X86_INS_FCMOVNBE,
UC_X86_INS_FCMOVNB,
UC_X86_INS_CMOVNE,
UC_X86_INS_FCMOVNE,
UC_X86_INS_CMOVNO,
UC_X86_INS_CMOVNP,
UC_X86_INS_FCMOVNU,
UC_X86_INS_CMOVNS,
UC_X86_INS_CMOVO,
UC_X86_INS_CMOVP,
UC_X86_INS_FCMOVU,
UC_X86_INS_CMOVS,
UC_X86_INS_CMP,
UC_X86_INS_CMPPD,
UC_X86_INS_CMPPS,
UC_X86_INS_CMPSB,
UC_X86_INS_CMPSD,
UC_X86_INS_CMPSQ,
UC_X86_INS_CMPSS,
UC_X86_INS_CMPSW,
UC_X86_INS_CMPXCHG16B,
UC_X86_INS_CMPXCHG,
UC_X86_INS_CMPXCHG8B,
UC_X86_INS_COMISD,
UC_X86_INS_COMISS,
UC_X86_INS_FCOMP,
UC_X86_INS_FCOMPI,
UC_X86_INS_FCOMI,
UC_X86_INS_FCOM,
UC_X86_INS_FCOS,
UC_X86_INS_CPUID,
UC_X86_INS_CQO,
UC_X86_INS_CRC32,
UC_X86_INS_CVTDQ2PD,
UC_X86_INS_CVTDQ2PS,
UC_X86_INS_CVTPD2DQ,
UC_X86_INS_CVTPD2PS,
UC_X86_INS_CVTPS2DQ,
UC_X86_INS_CVTPS2PD,
UC_X86_INS_CVTSD2SI,
UC_X86_INS_CVTSD2SS,
UC_X86_INS_CVTSI2SD,
UC_X86_INS_CVTSI2SS,
UC_X86_INS_CVTSS2SD,
UC_X86_INS_CVTSS2SI,
UC_X86_INS_CVTTPD2DQ,
UC_X86_INS_CVTTPS2DQ,
UC_X86_INS_CVTTSD2SI,
UC_X86_INS_CVTTSS2SI,
UC_X86_INS_CWD,
UC_X86_INS_CWDE,
UC_X86_INS_DAA,
UC_X86_INS_DAS,
UC_X86_INS_DATA16,
UC_X86_INS_DEC,
UC_X86_INS_DIV,
UC_X86_INS_DIVPD,
UC_X86_INS_DIVPS,
UC_X86_INS_FDIVR,
UC_X86_INS_FIDIVR,
UC_X86_INS_FDIVRP,
UC_X86_INS_DIVSD,
UC_X86_INS_DIVSS,
UC_X86_INS_FDIV,
UC_X86_INS_FIDIV,
UC_X86_INS_FDIVP,
UC_X86_INS_DPPD,
UC_X86_INS_DPPS,
UC_X86_INS_RET,
UC_X86_INS_ENCLS,
UC_X86_INS_ENCLU,
UC_X86_INS_ENTER,
UC_X86_INS_EXTRACTPS,
UC_X86_INS_EXTRQ,
UC_X86_INS_F2XM1,
UC_X86_INS_LCALL,
UC_X86_INS_LJMP,
UC_X86_INS_FBLD,
UC_X86_INS_FBSTP,
UC_X86_INS_FCOMPP,
UC_X86_INS_FDECSTP,
UC_X86_INS_FEMMS,
UC_X86_INS_FFREE,
UC_X86_INS_FICOM,
UC_X86_INS_FICOMP,
UC_X86_INS_FINCSTP,
UC_X86_INS_FLDCW,
UC_X86_INS_FLDENV,
UC_X86_INS_FLDL2E,
UC_X86_INS_FLDL2T,
UC_X86_INS_FLDLG2,
UC_X86_INS_FLDLN2,
UC_X86_INS_FLDPI,
UC_X86_INS_FNCLEX,
UC_X86_INS_FNINIT,
UC_X86_INS_FNOP,
UC_X86_INS_FNSTCW,
UC_X86_INS_FNSTSW,
UC_X86_INS_FPATAN,
UC_X86_INS_FPREM,
UC_X86_INS_FPREM1,
UC_X86_INS_FPTAN,
UC_X86_INS_FFREEP,
UC_X86_INS_FRNDINT,
UC_X86_INS_FRSTOR,
UC_X86_INS_FNSAVE,
UC_X86_INS_FSCALE,
UC_X86_INS_FSETPM,
UC_X86_INS_FSINCOS,
UC_X86_INS_FNSTENV,
UC_X86_INS_FXAM,
UC_X86_INS_FXRSTOR,
UC_X86_INS_FXRSTOR64,
UC_X86_INS_FXSAVE,
UC_X86_INS_FXSAVE64,
UC_X86_INS_FXTRACT,
UC_X86_INS_FYL2X,
UC_X86_INS_FYL2XP1,
UC_X86_INS_MOVAPD,
UC_X86_INS_MOVAPS,
UC_X86_INS_ORPD,
UC_X86_INS_ORPS,
UC_X86_INS_VMOVAPD,
UC_X86_INS_VMOVAPS,
UC_X86_INS_XORPD,
UC_X86_INS_XORPS,
UC_X86_INS_GETSEC,
UC_X86_INS_HADDPD,
UC_X86_INS_HADDPS,
UC_X86_INS_HLT,
UC_X86_INS_HSUBPD,
UC_X86_INS_HSUBPS,
UC_X86_INS_IDIV,
UC_X86_INS_FILD,
UC_X86_INS_IMUL,
UC_X86_INS_IN,
UC_X86_INS_INC,
UC_X86_INS_INSB,
UC_X86_INS_INSERTPS,
UC_X86_INS_INSERTQ,
UC_X86_INS_INSD,
UC_X86_INS_INSW,
UC_X86_INS_INT,
UC_X86_INS_INT1,
UC_X86_INS_INT3,
UC_X86_INS_INTO,
UC_X86_INS_INVD,
UC_X86_INS_INVEPT,
UC_X86_INS_INVLPG,
UC_X86_INS_INVLPGA,
UC_X86_INS_INVPCID,
UC_X86_INS_INVVPID,
UC_X86_INS_IRET,
UC_X86_INS_IRETD,
UC_X86_INS_IRETQ,
UC_X86_INS_FISTTP,
UC_X86_INS_FIST,
UC_X86_INS_FISTP,
UC_X86_INS_UCOMISD,
UC_X86_INS_UCOMISS,
UC_X86_INS_VCOMISD,
UC_X86_INS_VCOMISS,
UC_X86_INS_VCVTSD2SS,
UC_X86_INS_VCVTSI2SD,
UC_X86_INS_VCVTSI2SS,
UC_X86_INS_VCVTSS2SD,
UC_X86_INS_VCVTTSD2SI,
UC_X86_INS_VCVTTSD2USI,
UC_X86_INS_VCVTTSS2SI,
UC_X86_INS_VCVTTSS2USI,
UC_X86_INS_VCVTUSI2SD,
UC_X86_INS_VCVTUSI2SS,
UC_X86_INS_VUCOMISD,
UC_X86_INS_VUCOMISS,
UC_X86_INS_JAE,
UC_X86_INS_JA,
UC_X86_INS_JBE,
UC_X86_INS_JB,
UC_X86_INS_JCXZ,
UC_X86_INS_JECXZ,
UC_X86_INS_JE,
UC_X86_INS_JGE,
UC_X86_INS_JG,
UC_X86_INS_JLE,
UC_X86_INS_JL,
UC_X86_INS_JMP,
UC_X86_INS_JNE,
UC_X86_INS_JNO,
UC_X86_INS_JNP,
UC_X86_INS_JNS,
UC_X86_INS_JO,
UC_X86_INS_JP,
UC_X86_INS_JRCXZ,
UC_X86_INS_JS,
UC_X86_INS_KANDB,
UC_X86_INS_KANDD,
UC_X86_INS_KANDNB,
UC_X86_INS_KANDND,
UC_X86_INS_KANDNQ,
UC_X86_INS_KANDNW,
UC_X86_INS_KANDQ,
UC_X86_INS_KANDW,
UC_X86_INS_KMOVB,
UC_X86_INS_KMOVD,
UC_X86_INS_KMOVQ,
UC_X86_INS_KMOVW,
UC_X86_INS_KNOTB,
UC_X86_INS_KNOTD,
UC_X86_INS_KNOTQ,
UC_X86_INS_KNOTW,
UC_X86_INS_KORB,
UC_X86_INS_KORD,
UC_X86_INS_KORQ,
UC_X86_INS_KORTESTB,
UC_X86_INS_KORTESTD,
UC_X86_INS_KORTESTQ,
UC_X86_INS_KORTESTW,
UC_X86_INS_KORW,
UC_X86_INS_KSHIFTLB,
UC_X86_INS_KSHIFTLD,
UC_X86_INS_KSHIFTLQ,
UC_X86_INS_KSHIFTLW,
UC_X86_INS_KSHIFTRB,
UC_X86_INS_KSHIFTRD,
UC_X86_INS_KSHIFTRQ,
UC_X86_INS_KSHIFTRW,
UC_X86_INS_KUNPCKBW,
UC_X86_INS_KXNORB,
UC_X86_INS_KXNORD,
UC_X86_INS_KXNORQ,
UC_X86_INS_KXNORW,
UC_X86_INS_KXORB,
UC_X86_INS_KXORD,
UC_X86_INS_KXORQ,
UC_X86_INS_KXORW,
UC_X86_INS_LAHF,
UC_X86_INS_LAR,
UC_X86_INS_LDDQU,
UC_X86_INS_LDMXCSR,
UC_X86_INS_LDS,
UC_X86_INS_FLDZ,
UC_X86_INS_FLD1,
UC_X86_INS_FLD,
UC_X86_INS_LEA,
UC_X86_INS_LEAVE,
UC_X86_INS_LES,
UC_X86_INS_LFENCE,
UC_X86_INS_LFS,
UC_X86_INS_LGDT,
UC_X86_INS_LGS,
UC_X86_INS_LIDT,
UC_X86_INS_LLDT,
UC_X86_INS_LMSW,
UC_X86_INS_OR,
UC_X86_INS_SUB,
UC_X86_INS_XOR,
UC_X86_INS_LODSB,
UC_X86_INS_LODSD,
UC_X86_INS_LODSQ,
UC_X86_INS_LODSW,
UC_X86_INS_LOOP,
UC_X86_INS_LOOPE,
UC_X86_INS_LOOPNE,
UC_X86_INS_RETF,
UC_X86_INS_RETFQ,
UC_X86_INS_LSL,
UC_X86_INS_LSS,
UC_X86_INS_LTR,
UC_X86_INS_XADD,
UC_X86_INS_LZCNT,
UC_X86_INS_MASKMOVDQU,
UC_X86_INS_MAXPD,
UC_X86_INS_MAXPS,
UC_X86_INS_MAXSD,
UC_X86_INS_MAXSS,
UC_X86_INS_MFENCE,
UC_X86_INS_MINPD,
UC_X86_INS_MINPS,
UC_X86_INS_MINSD,
UC_X86_INS_MINSS,
UC_X86_INS_CVTPD2PI,
UC_X86_INS_CVTPI2PD,
UC_X86_INS_CVTPI2PS,
UC_X86_INS_CVTPS2PI,
UC_X86_INS_CVTTPD2PI,
UC_X86_INS_CVTTPS2PI,
UC_X86_INS_EMMS,
UC_X86_INS_MASKMOVQ,
UC_X86_INS_MOVD,
UC_X86_INS_MOVDQ2Q,
UC_X86_INS_MOVNTQ,
UC_X86_INS_MOVQ2DQ,
UC_X86_INS_MOVQ,
UC_X86_INS_PABSB,
UC_X86_INS_PABSD,
UC_X86_INS_PABSW,
UC_X86_INS_PACKSSDW,
UC_X86_INS_PACKSSWB,
UC_X86_INS_PACKUSWB,
UC_X86_INS_PADDB,
UC_X86_INS_PADDD,
UC_X86_INS_PADDQ,
UC_X86_INS_PADDSB,
UC_X86_INS_PADDSW,
UC_X86_INS_PADDUSB,
UC_X86_INS_PADDUSW,
UC_X86_INS_PADDW,
UC_X86_INS_PALIGNR,
UC_X86_INS_PANDN,
UC_X86_INS_PAND,
UC_X86_INS_PAVGB,
UC_X86_INS_PAVGW,
UC_X86_INS_PCMPEQB,
UC_X86_INS_PCMPEQD,
UC_X86_INS_PCMPEQW,
UC_X86_INS_PCMPGTB,
UC_X86_INS_PCMPGTD,
UC_X86_INS_PCMPGTW,
UC_X86_INS_PEXTRW,
UC_X86_INS_PHADDSW,
UC_X86_INS_PHADDW,
UC_X86_INS_PHADDD,
UC_X86_INS_PHSUBD,
UC_X86_INS_PHSUBSW,
UC_X86_INS_PHSUBW,
UC_X86_INS_PINSRW,
UC_X86_INS_PMADDUBSW,
UC_X86_INS_PMADDWD,
UC_X86_INS_PMAXSW,
UC_X86_INS_PMAXUB,
UC_X86_INS_PMINSW,
UC_X86_INS_PMINUB,
UC_X86_INS_PMOVMSKB,
UC_X86_INS_PMULHRSW,
UC_X86_INS_PMULHUW,
UC_X86_INS_PMULHW,
UC_X86_INS_PMULLW,
UC_X86_INS_PMULUDQ,
UC_X86_INS_POR,
UC_X86_INS_PSADBW,
UC_X86_INS_PSHUFB,
UC_X86_INS_PSHUFW,
UC_X86_INS_PSIGNB,
UC_X86_INS_PSIGND,
UC_X86_INS_PSIGNW,
UC_X86_INS_PSLLD,
UC_X86_INS_PSLLQ,
UC_X86_INS_PSLLW,
UC_X86_INS_PSRAD,
UC_X86_INS_PSRAW,
UC_X86_INS_PSRLD,
UC_X86_INS_PSRLQ,
UC_X86_INS_PSRLW,
UC_X86_INS_PSUBB,
UC_X86_INS_PSUBD,
UC_X86_INS_PSUBQ,
UC_X86_INS_PSUBSB,
UC_X86_INS_PSUBSW,
UC_X86_INS_PSUBUSB,
UC_X86_INS_PSUBUSW,
UC_X86_INS_PSUBW,
UC_X86_INS_PUNPCKHBW,
UC_X86_INS_PUNPCKHDQ,
UC_X86_INS_PUNPCKHWD,
UC_X86_INS_PUNPCKLBW,
UC_X86_INS_PUNPCKLDQ,
UC_X86_INS_PUNPCKLWD,
UC_X86_INS_PXOR,
UC_X86_INS_MONITOR,
UC_X86_INS_MONTMUL,
UC_X86_INS_MOV,
UC_X86_INS_MOVABS,
UC_X86_INS_MOVBE,
UC_X86_INS_MOVDDUP,
UC_X86_INS_MOVDQA,
UC_X86_INS_MOVDQU,
UC_X86_INS_MOVHLPS,
UC_X86_INS_MOVHPD,
UC_X86_INS_MOVHPS,
UC_X86_INS_MOVLHPS,
UC_X86_INS_MOVLPD,
UC_X86_INS_MOVLPS,
UC_X86_INS_MOVMSKPD,
UC_X86_INS_MOVMSKPS,
UC_X86_INS_MOVNTDQA,
UC_X86_INS_MOVNTDQ,
UC_X86_INS_MOVNTI,
UC_X86_INS_MOVNTPD,
UC_X86_INS_MOVNTPS,
UC_X86_INS_MOVNTSD,
UC_X86_INS_MOVNTSS,
UC_X86_INS_MOVSB,
UC_X86_INS_MOVSD,
UC_X86_INS_MOVSHDUP,
UC_X86_INS_MOVSLDUP,
UC_X86_INS_MOVSQ,
UC_X86_INS_MOVSS,
UC_X86_INS_MOVSW,
UC_X86_INS_MOVSX,
UC_X86_INS_MOVSXD,
UC_X86_INS_MOVUPD,
UC_X86_INS_MOVUPS,
UC_X86_INS_MOVZX,
UC_X86_INS_MPSADBW,
UC_X86_INS_MUL,
UC_X86_INS_MULPD,
UC_X86_INS_MULPS,
UC_X86_INS_MULSD,
UC_X86_INS_MULSS,
UC_X86_INS_MULX,
UC_X86_INS_FMUL,
UC_X86_INS_FIMUL,
UC_X86_INS_FMULP,
UC_X86_INS_MWAIT,
UC_X86_INS_NEG,
UC_X86_INS_NOP,
UC_X86_INS_NOT,
UC_X86_INS_OUT,
UC_X86_INS_OUTSB,
UC_X86_INS_OUTSD,
UC_X86_INS_OUTSW,
UC_X86_INS_PACKUSDW,
UC_X86_INS_PAUSE,
UC_X86_INS_PAVGUSB,
UC_X86_INS_PBLENDVB,
UC_X86_INS_PBLENDW,
UC_X86_INS_PCLMULQDQ,
UC_X86_INS_PCMPEQQ,
UC_X86_INS_PCMPESTRI,
UC_X86_INS_PCMPESTRM,
UC_X86_INS_PCMPGTQ,
UC_X86_INS_PCMPISTRI,
UC_X86_INS_PCMPISTRM,
UC_X86_INS_PCOMMIT,
UC_X86_INS_PDEP,
UC_X86_INS_PEXT,
UC_X86_INS_PEXTRB,
UC_X86_INS_PEXTRD,
UC_X86_INS_PEXTRQ,
UC_X86_INS_PF2ID,
UC_X86_INS_PF2IW,
UC_X86_INS_PFACC,
UC_X86_INS_PFADD,
UC_X86_INS_PFCMPEQ,
UC_X86_INS_PFCMPGE,
UC_X86_INS_PFCMPGT,
UC_X86_INS_PFMAX,
UC_X86_INS_PFMIN,
UC_X86_INS_PFMUL,
UC_X86_INS_PFNACC,
UC_X86_INS_PFPNACC,
UC_X86_INS_PFRCPIT1,
UC_X86_INS_PFRCPIT2,
UC_X86_INS_PFRCP,
UC_X86_INS_PFRSQIT1,
UC_X86_INS_PFRSQRT,
UC_X86_INS_PFSUBR,
UC_X86_INS_PFSUB,
UC_X86_INS_PHMINPOSUW,
UC_X86_INS_PI2FD,
UC_X86_INS_PI2FW,
UC_X86_INS_PINSRB,
UC_X86_INS_PINSRD,
UC_X86_INS_PINSRQ,
UC_X86_INS_PMAXSB,
UC_X86_INS_PMAXSD,
UC_X86_INS_PMAXUD,
UC_X86_INS_PMAXUW,
UC_X86_INS_PMINSB,
UC_X86_INS_PMINSD,
UC_X86_INS_PMINUD,
UC_X86_INS_PMINUW,
UC_X86_INS_PMOVSXBD,
UC_X86_INS_PMOVSXBQ,
UC_X86_INS_PMOVSXBW,
UC_X86_INS_PMOVSXDQ,
UC_X86_INS_PMOVSXWD,
UC_X86_INS_PMOVSXWQ,
UC_X86_INS_PMOVZXBD,
UC_X86_INS_PMOVZXBQ,
UC_X86_INS_PMOVZXBW,
UC_X86_INS_PMOVZXDQ,
UC_X86_INS_PMOVZXWD,
UC_X86_INS_PMOVZXWQ,
UC_X86_INS_PMULDQ,
UC_X86_INS_PMULHRW,
UC_X86_INS_PMULLD,
UC_X86_INS_POP,
UC_X86_INS_POPAW,
UC_X86_INS_POPAL,
UC_X86_INS_POPCNT,
UC_X86_INS_POPF,
UC_X86_INS_POPFD,
UC_X86_INS_POPFQ,
UC_X86_INS_PREFETCH,
UC_X86_INS_PREFETCHNTA,
UC_X86_INS_PREFETCHT0,
UC_X86_INS_PREFETCHT1,
UC_X86_INS_PREFETCHT2,
UC_X86_INS_PREFETCHW,
UC_X86_INS_PSHUFD,
UC_X86_INS_PSHUFHW,
UC_X86_INS_PSHUFLW,
UC_X86_INS_PSLLDQ,
UC_X86_INS_PSRLDQ,
UC_X86_INS_PSWAPD,
UC_X86_INS_PTEST,
UC_X86_INS_PUNPCKHQDQ,
UC_X86_INS_PUNPCKLQDQ,
UC_X86_INS_PUSH,
UC_X86_INS_PUSHAW,
UC_X86_INS_PUSHAL,
UC_X86_INS_PUSHF,
UC_X86_INS_PUSHFD,
UC_X86_INS_PUSHFQ,
UC_X86_INS_RCL,
UC_X86_INS_RCPPS,
UC_X86_INS_RCPSS,
UC_X86_INS_RCR,
UC_X86_INS_RDFSBASE,
UC_X86_INS_RDGSBASE,
UC_X86_INS_RDMSR,
UC_X86_INS_RDPMC,
UC_X86_INS_RDRAND,
UC_X86_INS_RDSEED,
UC_X86_INS_RDTSC,
UC_X86_INS_RDTSCP,
UC_X86_INS_ROL,
UC_X86_INS_ROR,
UC_X86_INS_RORX,
UC_X86_INS_ROUNDPD,
UC_X86_INS_ROUNDPS,
UC_X86_INS_ROUNDSD,
UC_X86_INS_ROUNDSS,
UC_X86_INS_RSM,
UC_X86_INS_RSQRTPS,
UC_X86_INS_RSQRTSS,
UC_X86_INS_SAHF,
UC_X86_INS_SAL,
UC_X86_INS_SALC,
UC_X86_INS_SAR,
UC_X86_INS_SARX,
UC_X86_INS_SBB,
UC_X86_INS_SCASB,
UC_X86_INS_SCASD,
UC_X86_INS_SCASQ,
UC_X86_INS_SCASW,
UC_X86_INS_SETAE,
UC_X86_INS_SETA,
UC_X86_INS_SETBE,
UC_X86_INS_SETB,
UC_X86_INS_SETE,
UC_X86_INS_SETGE,
UC_X86_INS_SETG,
UC_X86_INS_SETLE,
UC_X86_INS_SETL,
UC_X86_INS_SETNE,
UC_X86_INS_SETNO,
UC_X86_INS_SETNP,
UC_X86_INS_SETNS,
UC_X86_INS_SETO,
UC_X86_INS_SETP,
UC_X86_INS_SETS,
UC_X86_INS_SFENCE,
UC_X86_INS_SGDT,
UC_X86_INS_SHA1MSG1,
UC_X86_INS_SHA1MSG2,
UC_X86_INS_SHA1NEXTE,
UC_X86_INS_SHA1RNDS4,
UC_X86_INS_SHA256MSG1,
UC_X86_INS_SHA256MSG2,
UC_X86_INS_SHA256RNDS2,
UC_X86_INS_SHL,
UC_X86_INS_SHLD,
UC_X86_INS_SHLX,
UC_X86_INS_SHR,
UC_X86_INS_SHRD,
UC_X86_INS_SHRX,
UC_X86_INS_SHUFPD,
UC_X86_INS_SHUFPS,
UC_X86_INS_SIDT,
UC_X86_INS_FSIN,
UC_X86_INS_SKINIT,
UC_X86_INS_SLDT,
UC_X86_INS_SMSW,
UC_X86_INS_SQRTPD,
UC_X86_INS_SQRTPS,
UC_X86_INS_SQRTSD,
UC_X86_INS_SQRTSS,
UC_X86_INS_FSQRT,
UC_X86_INS_STAC,
UC_X86_INS_STC,
UC_X86_INS_STD,
UC_X86_INS_STGI,
UC_X86_INS_STI,
UC_X86_INS_STMXCSR,
UC_X86_INS_STOSB,
UC_X86_INS_STOSD,
UC_X86_INS_STOSQ,
UC_X86_INS_STOSW,
UC_X86_INS_STR,
UC_X86_INS_FST,
UC_X86_INS_FSTP,
UC_X86_INS_FSTPNCE,
UC_X86_INS_FXCH,
UC_X86_INS_SUBPD,
UC_X86_INS_SUBPS,
UC_X86_INS_FSUBR,
UC_X86_INS_FISUBR,
UC_X86_INS_FSUBRP,
UC_X86_INS_SUBSD,
UC_X86_INS_SUBSS,
UC_X86_INS_FSUB,
UC_X86_INS_FISUB,
UC_X86_INS_FSUBP,
UC_X86_INS_SWAPGS,
UC_X86_INS_SYSCALL,
UC_X86_INS_SYSENTER,
UC_X86_INS_SYSEXIT,
UC_X86_INS_SYSRET,
UC_X86_INS_T1MSKC,
UC_X86_INS_TEST,
UC_X86_INS_UD2,
UC_X86_INS_FTST,
UC_X86_INS_TZCNT,
UC_X86_INS_TZMSK,
UC_X86_INS_FUCOMPI,
UC_X86_INS_FUCOMI,
UC_X86_INS_FUCOMPP,
UC_X86_INS_FUCOMP,
UC_X86_INS_FUCOM,
UC_X86_INS_UD2B,
UC_X86_INS_UNPCKHPD,
UC_X86_INS_UNPCKHPS,
UC_X86_INS_UNPCKLPD,
UC_X86_INS_UNPCKLPS,
UC_X86_INS_VADDPD,
UC_X86_INS_VADDPS,
UC_X86_INS_VADDSD,
UC_X86_INS_VADDSS,
UC_X86_INS_VADDSUBPD,
UC_X86_INS_VADDSUBPS,
UC_X86_INS_VAESDECLAST,
UC_X86_INS_VAESDEC,
UC_X86_INS_VAESENCLAST,
UC_X86_INS_VAESENC,
UC_X86_INS_VAESIMC,
UC_X86_INS_VAESKEYGENASSIST,
UC_X86_INS_VALIGND,
UC_X86_INS_VALIGNQ,
UC_X86_INS_VANDNPD,
UC_X86_INS_VANDNPS,
UC_X86_INS_VANDPD,
UC_X86_INS_VANDPS,
UC_X86_INS_VBLENDMPD,
UC_X86_INS_VBLENDMPS,
UC_X86_INS_VBLENDPD,
UC_X86_INS_VBLENDPS,
UC_X86_INS_VBLENDVPD,
UC_X86_INS_VBLENDVPS,
UC_X86_INS_VBROADCASTF128,
UC_X86_INS_VBROADCASTI32X4,
UC_X86_INS_VBROADCASTI64X4,
UC_X86_INS_VBROADCASTSD,
UC_X86_INS_VBROADCASTSS,
UC_X86_INS_VCMPPD,
UC_X86_INS_VCMPPS,
UC_X86_INS_VCMPSD,
UC_X86_INS_VCMPSS,
UC_X86_INS_VCOMPRESSPD,
UC_X86_INS_VCOMPRESSPS,
UC_X86_INS_VCVTDQ2PD,
UC_X86_INS_VCVTDQ2PS,
UC_X86_INS_VCVTPD2DQX,
UC_X86_INS_VCVTPD2DQ,
UC_X86_INS_VCVTPD2PSX,
UC_X86_INS_VCVTPD2PS,
UC_X86_INS_VCVTPD2UDQ,
UC_X86_INS_VCVTPH2PS,
UC_X86_INS_VCVTPS2DQ,
UC_X86_INS_VCVTPS2PD,
UC_X86_INS_VCVTPS2PH,
UC_X86_INS_VCVTPS2UDQ,
UC_X86_INS_VCVTSD2SI,
UC_X86_INS_VCVTSD2USI,
UC_X86_INS_VCVTSS2SI,
UC_X86_INS_VCVTSS2USI,
UC_X86_INS_VCVTTPD2DQX,
UC_X86_INS_VCVTTPD2DQ,
UC_X86_INS_VCVTTPD2UDQ,
UC_X86_INS_VCVTTPS2DQ,
UC_X86_INS_VCVTTPS2UDQ,
UC_X86_INS_VCVTUDQ2PD,
UC_X86_INS_VCVTUDQ2PS,
UC_X86_INS_VDIVPD,
UC_X86_INS_VDIVPS,
UC_X86_INS_VDIVSD,
UC_X86_INS_VDIVSS,
UC_X86_INS_VDPPD,
UC_X86_INS_VDPPS,
UC_X86_INS_VERR,
UC_X86_INS_VERW,
UC_X86_INS_VEXP2PD,
UC_X86_INS_VEXP2PS,
UC_X86_INS_VEXPANDPD,
UC_X86_INS_VEXPANDPS,
UC_X86_INS_VEXTRACTF128,
UC_X86_INS_VEXTRACTF32X4,
UC_X86_INS_VEXTRACTF64X4,
UC_X86_INS_VEXTRACTI128,
UC_X86_INS_VEXTRACTI32X4,
UC_X86_INS_VEXTRACTI64X4,
UC_X86_INS_VEXTRACTPS,
UC_X86_INS_VFMADD132PD,
UC_X86_INS_VFMADD132PS,
UC_X86_INS_VFMADDPD,
UC_X86_INS_VFMADD213PD,
UC_X86_INS_VFMADD231PD,
UC_X86_INS_VFMADDPS,
UC_X86_INS_VFMADD213PS,
UC_X86_INS_VFMADD231PS,
UC_X86_INS_VFMADDSD,
UC_X86_INS_VFMADD213SD,
UC_X86_INS_VFMADD132SD,
UC_X86_INS_VFMADD231SD,
UC_X86_INS_VFMADDSS,
UC_X86_INS_VFMADD213SS,
UC_X86_INS_VFMADD132SS,
UC_X86_INS_VFMADD231SS,
UC_X86_INS_VFMADDSUB132PD,
UC_X86_INS_VFMADDSUB132PS,
UC_X86_INS_VFMADDSUBPD,
UC_X86_INS_VFMADDSUB213PD,
UC_X86_INS_VFMADDSUB231PD,
UC_X86_INS_VFMADDSUBPS,
UC_X86_INS_VFMADDSUB213PS,
UC_X86_INS_VFMADDSUB231PS,
UC_X86_INS_VFMSUB132PD,
UC_X86_INS_VFMSUB132PS,
UC_X86_INS_VFMSUBADD132PD,
UC_X86_INS_VFMSUBADD132PS,
UC_X86_INS_VFMSUBADDPD,
UC_X86_INS_VFMSUBADD213PD,
UC_X86_INS_VFMSUBADD231PD,
UC_X86_INS_VFMSUBADDPS,
UC_X86_INS_VFMSUBADD213PS,
UC_X86_INS_VFMSUBADD231PS,
UC_X86_INS_VFMSUBPD,
UC_X86_INS_VFMSUB213PD,
UC_X86_INS_VFMSUB231PD,
UC_X86_INS_VFMSUBPS,
UC_X86_INS_VFMSUB213PS,
UC_X86_INS_VFMSUB231PS,
UC_X86_INS_VFMSUBSD,
UC_X86_INS_VFMSUB213SD,
UC_X86_INS_VFMSUB132SD,
UC_X86_INS_VFMSUB231SD,
UC_X86_INS_VFMSUBSS,
UC_X86_INS_VFMSUB213SS,
UC_X86_INS_VFMSUB132SS,
UC_X86_INS_VFMSUB231SS,
UC_X86_INS_VFNMADD132PD,
UC_X86_INS_VFNMADD132PS,
UC_X86_INS_VFNMADDPD,
UC_X86_INS_VFNMADD213PD,
UC_X86_INS_VFNMADD231PD,
UC_X86_INS_VFNMADDPS,
UC_X86_INS_VFNMADD213PS,
UC_X86_INS_VFNMADD231PS,
UC_X86_INS_VFNMADDSD,
UC_X86_INS_VFNMADD213SD,
UC_X86_INS_VFNMADD132SD,
UC_X86_INS_VFNMADD231SD,
UC_X86_INS_VFNMADDSS,
UC_X86_INS_VFNMADD213SS,
UC_X86_INS_VFNMADD132SS,
UC_X86_INS_VFNMADD231SS,
UC_X86_INS_VFNMSUB132PD,
UC_X86_INS_VFNMSUB132PS,
UC_X86_INS_VFNMSUBPD,
UC_X86_INS_VFNMSUB213PD,
UC_X86_INS_VFNMSUB231PD,
UC_X86_INS_VFNMSUBPS,
UC_X86_INS_VFNMSUB213PS,
UC_X86_INS_VFNMSUB231PS,
UC_X86_INS_VFNMSUBSD,
UC_X86_INS_VFNMSUB213SD,
UC_X86_INS_VFNMSUB132SD,
UC_X86_INS_VFNMSUB231SD,
UC_X86_INS_VFNMSUBSS,
UC_X86_INS_VFNMSUB213SS,
UC_X86_INS_VFNMSUB132SS,
UC_X86_INS_VFNMSUB231SS,
UC_X86_INS_VFRCZPD,
UC_X86_INS_VFRCZPS,
UC_X86_INS_VFRCZSD,
UC_X86_INS_VFRCZSS,
UC_X86_INS_VORPD,
UC_X86_INS_VORPS,
UC_X86_INS_VXORPD,
UC_X86_INS_VXORPS,
UC_X86_INS_VGATHERDPD,
UC_X86_INS_VGATHERDPS,
UC_X86_INS_VGATHERPF0DPD,
UC_X86_INS_VGATHERPF0DPS,
UC_X86_INS_VGATHERPF0QPD,
UC_X86_INS_VGATHERPF0QPS,
UC_X86_INS_VGATHERPF1DPD,
UC_X86_INS_VGATHERPF1DPS,
UC_X86_INS_VGATHERPF1QPD,
UC_X86_INS_VGATHERPF1QPS,
UC_X86_INS_VGATHERQPD,
UC_X86_INS_VGATHERQPS,
UC_X86_INS_VHADDPD,
UC_X86_INS_VHADDPS,
UC_X86_INS_VHSUBPD,
UC_X86_INS_VHSUBPS,
UC_X86_INS_VINSERTF128,
UC_X86_INS_VINSERTF32X4,
UC_X86_INS_VINSERTF32X8,
UC_X86_INS_VINSERTF64X2,
UC_X86_INS_VINSERTF64X4,
UC_X86_INS_VINSERTI128,
UC_X86_INS_VINSERTI32X4,
UC_X86_INS_VINSERTI32X8,
UC_X86_INS_VINSERTI64X2,
UC_X86_INS_VINSERTI64X4,
UC_X86_INS_VINSERTPS,
UC_X86_INS_VLDDQU,
UC_X86_INS_VLDMXCSR,
UC_X86_INS_VMASKMOVDQU,
UC_X86_INS_VMASKMOVPD,
UC_X86_INS_VMASKMOVPS,
UC_X86_INS_VMAXPD,
UC_X86_INS_VMAXPS,
UC_X86_INS_VMAXSD,
UC_X86_INS_VMAXSS,
UC_X86_INS_VMCALL,
UC_X86_INS_VMCLEAR,
UC_X86_INS_VMFUNC,
UC_X86_INS_VMINPD,
UC_X86_INS_VMINPS,
UC_X86_INS_VMINSD,
UC_X86_INS_VMINSS,
UC_X86_INS_VMLAUNCH,
UC_X86_INS_VMLOAD,
UC_X86_INS_VMMCALL,
UC_X86_INS_VMOVQ,
UC_X86_INS_VMOVDDUP,
UC_X86_INS_VMOVD,
UC_X86_INS_VMOVDQA32,
UC_X86_INS_VMOVDQA64,
UC_X86_INS_VMOVDQA,
UC_X86_INS_VMOVDQU16,
UC_X86_INS_VMOVDQU32,
UC_X86_INS_VMOVDQU64,
UC_X86_INS_VMOVDQU8,
UC_X86_INS_VMOVDQU,
UC_X86_INS_VMOVHLPS,
UC_X86_INS_VMOVHPD,
UC_X86_INS_VMOVHPS,
UC_X86_INS_VMOVLHPS,
UC_X86_INS_VMOVLPD,
UC_X86_INS_VMOVLPS,
UC_X86_INS_VMOVMSKPD,
UC_X86_INS_VMOVMSKPS,
UC_X86_INS_VMOVNTDQA,
UC_X86_INS_VMOVNTDQ,
UC_X86_INS_VMOVNTPD,
UC_X86_INS_VMOVNTPS,
UC_X86_INS_VMOVSD,
UC_X86_INS_VMOVSHDUP,
UC_X86_INS_VMOVSLDUP,
UC_X86_INS_VMOVSS,
UC_X86_INS_VMOVUPD,
UC_X86_INS_VMOVUPS,
UC_X86_INS_VMPSADBW,
UC_X86_INS_VMPTRLD,
UC_X86_INS_VMPTRST,
UC_X86_INS_VMREAD,
UC_X86_INS_VMRESUME,
UC_X86_INS_VMRUN,
UC_X86_INS_VMSAVE,
UC_X86_INS_VMULPD,
UC_X86_INS_VMULPS,
UC_X86_INS_VMULSD,
UC_X86_INS_VMULSS,
UC_X86_INS_VMWRITE,
UC_X86_INS_VMXOFF,
UC_X86_INS_VMXON,
UC_X86_INS_VPABSB,
UC_X86_INS_VPABSD,
UC_X86_INS_VPABSQ,
UC_X86_INS_VPABSW,
UC_X86_INS_VPACKSSDW,
UC_X86_INS_VPACKSSWB,
UC_X86_INS_VPACKUSDW,
UC_X86_INS_VPACKUSWB,
UC_X86_INS_VPADDB,
UC_X86_INS_VPADDD,
UC_X86_INS_VPADDQ,
UC_X86_INS_VPADDSB,
UC_X86_INS_VPADDSW,
UC_X86_INS_VPADDUSB,
UC_X86_INS_VPADDUSW,
UC_X86_INS_VPADDW,
UC_X86_INS_VPALIGNR,
UC_X86_INS_VPANDD,
UC_X86_INS_VPANDND,
UC_X86_INS_VPANDNQ,
UC_X86_INS_VPANDN,
UC_X86_INS_VPANDQ,
UC_X86_INS_VPAND,
UC_X86_INS_VPAVGB,
UC_X86_INS_VPAVGW,
UC_X86_INS_VPBLENDD,
UC_X86_INS_VPBLENDMB,
UC_X86_INS_VPBLENDMD,
UC_X86_INS_VPBLENDMQ,
UC_X86_INS_VPBLENDMW,
UC_X86_INS_VPBLENDVB,
UC_X86_INS_VPBLENDW,
UC_X86_INS_VPBROADCASTB,
UC_X86_INS_VPBROADCASTD,
UC_X86_INS_VPBROADCASTMB2Q,
UC_X86_INS_VPBROADCASTMW2D,
UC_X86_INS_VPBROADCASTQ,
UC_X86_INS_VPBROADCASTW,
UC_X86_INS_VPCLMULQDQ,
UC_X86_INS_VPCMOV,
UC_X86_INS_VPCMPB,
UC_X86_INS_VPCMPD,
UC_X86_INS_VPCMPEQB,
UC_X86_INS_VPCMPEQD,
UC_X86_INS_VPCMPEQQ,
UC_X86_INS_VPCMPEQW,
UC_X86_INS_VPCMPESTRI,
UC_X86_INS_VPCMPESTRM,
UC_X86_INS_VPCMPGTB,
UC_X86_INS_VPCMPGTD,
UC_X86_INS_VPCMPGTQ,
UC_X86_INS_VPCMPGTW,
UC_X86_INS_VPCMPISTRI,
UC_X86_INS_VPCMPISTRM,
UC_X86_INS_VPCMPQ,
UC_X86_INS_VPCMPUB,
UC_X86_INS_VPCMPUD,
UC_X86_INS_VPCMPUQ,
UC_X86_INS_VPCMPUW,
UC_X86_INS_VPCMPW,
UC_X86_INS_VPCOMB,
UC_X86_INS_VPCOMD,
UC_X86_INS_VPCOMPRESSD,
UC_X86_INS_VPCOMPRESSQ,
UC_X86_INS_VPCOMQ,
UC_X86_INS_VPCOMUB,
UC_X86_INS_VPCOMUD,
UC_X86_INS_VPCOMUQ,
UC_X86_INS_VPCOMUW,
UC_X86_INS_VPCOMW,
UC_X86_INS_VPCONFLICTD,
UC_X86_INS_VPCONFLICTQ,
UC_X86_INS_VPERM2F128,
UC_X86_INS_VPERM2I128,
UC_X86_INS_VPERMD,
UC_X86_INS_VPERMI2D,
UC_X86_INS_VPERMI2PD,
UC_X86_INS_VPERMI2PS,
UC_X86_INS_VPERMI2Q,
UC_X86_INS_VPERMIL2PD,
UC_X86_INS_VPERMIL2PS,
UC_X86_INS_VPERMILPD,
UC_X86_INS_VPERMILPS,
UC_X86_INS_VPERMPD,
UC_X86_INS_VPERMPS,
UC_X86_INS_VPERMQ,
UC_X86_INS_VPERMT2D,
UC_X86_INS_VPERMT2PD,
UC_X86_INS_VPERMT2PS,
UC_X86_INS_VPERMT2Q,
UC_X86_INS_VPEXPANDD,
UC_X86_INS_VPEXPANDQ,
UC_X86_INS_VPEXTRB,
UC_X86_INS_VPEXTRD,
UC_X86_INS_VPEXTRQ,
UC_X86_INS_VPEXTRW,
UC_X86_INS_VPGATHERDD,
UC_X86_INS_VPGATHERDQ,
UC_X86_INS_VPGATHERQD,
UC_X86_INS_VPGATHERQQ,
UC_X86_INS_VPHADDBD,
UC_X86_INS_VPHADDBQ,
UC_X86_INS_VPHADDBW,
UC_X86_INS_VPHADDDQ,
UC_X86_INS_VPHADDD,
UC_X86_INS_VPHADDSW,
UC_X86_INS_VPHADDUBD,
UC_X86_INS_VPHADDUBQ,
UC_X86_INS_VPHADDUBW,
UC_X86_INS_VPHADDUDQ,
UC_X86_INS_VPHADDUWD,
UC_X86_INS_VPHADDUWQ,
UC_X86_INS_VPHADDWD,
UC_X86_INS_VPHADDWQ,
UC_X86_INS_VPHADDW,
UC_X86_INS_VPHMINPOSUW,
UC_X86_INS_VPHSUBBW,
UC_X86_INS_VPHSUBDQ,
UC_X86_INS_VPHSUBD,
UC_X86_INS_VPHSUBSW,
UC_X86_INS_VPHSUBWD,
UC_X86_INS_VPHSUBW,
UC_X86_INS_VPINSRB,
UC_X86_INS_VPINSRD,
UC_X86_INS_VPINSRQ,
UC_X86_INS_VPINSRW,
UC_X86_INS_VPLZCNTD,
UC_X86_INS_VPLZCNTQ,
UC_X86_INS_VPMACSDD,
UC_X86_INS_VPMACSDQH,
UC_X86_INS_VPMACSDQL,
UC_X86_INS_VPMACSSDD,
UC_X86_INS_VPMACSSDQH,
UC_X86_INS_VPMACSSDQL,
UC_X86_INS_VPMACSSWD,
UC_X86_INS_VPMACSSWW,
UC_X86_INS_VPMACSWD,
UC_X86_INS_VPMACSWW,
UC_X86_INS_VPMADCSSWD,
UC_X86_INS_VPMADCSWD,
UC_X86_INS_VPMADDUBSW,
UC_X86_INS_VPMADDWD,
UC_X86_INS_VPMASKMOVD,
UC_X86_INS_VPMASKMOVQ,
UC_X86_INS_VPMAXSB,
UC_X86_INS_VPMAXSD,
UC_X86_INS_VPMAXSQ,
UC_X86_INS_VPMAXSW,
UC_X86_INS_VPMAXUB,
UC_X86_INS_VPMAXUD,
UC_X86_INS_VPMAXUQ,
UC_X86_INS_VPMAXUW,
UC_X86_INS_VPMINSB,
UC_X86_INS_VPMINSD,
UC_X86_INS_VPMINSQ,
UC_X86_INS_VPMINSW,
UC_X86_INS_VPMINUB,
UC_X86_INS_VPMINUD,
UC_X86_INS_VPMINUQ,
UC_X86_INS_VPMINUW,
UC_X86_INS_VPMOVDB,
UC_X86_INS_VPMOVDW,
UC_X86_INS_VPMOVM2B,
UC_X86_INS_VPMOVM2D,
UC_X86_INS_VPMOVM2Q,
UC_X86_INS_VPMOVM2W,
UC_X86_INS_VPMOVMSKB,
UC_X86_INS_VPMOVQB,
UC_X86_INS_VPMOVQD,
UC_X86_INS_VPMOVQW,
UC_X86_INS_VPMOVSDB,
UC_X86_INS_VPMOVSDW,
UC_X86_INS_VPMOVSQB,
UC_X86_INS_VPMOVSQD,
UC_X86_INS_VPMOVSQW,
UC_X86_INS_VPMOVSXBD,
UC_X86_INS_VPMOVSXBQ,
UC_X86_INS_VPMOVSXBW,
UC_X86_INS_VPMOVSXDQ,
UC_X86_INS_VPMOVSXWD,
UC_X86_INS_VPMOVSXWQ,
UC_X86_INS_VPMOVUSDB,
UC_X86_INS_VPMOVUSDW,
UC_X86_INS_VPMOVUSQB,
UC_X86_INS_VPMOVUSQD,
UC_X86_INS_VPMOVUSQW,
UC_X86_INS_VPMOVZXBD,
UC_X86_INS_VPMOVZXBQ,
UC_X86_INS_VPMOVZXBW,
UC_X86_INS_VPMOVZXDQ,
UC_X86_INS_VPMOVZXWD,
UC_X86_INS_VPMOVZXWQ,
UC_X86_INS_VPMULDQ,
UC_X86_INS_VPMULHRSW,
UC_X86_INS_VPMULHUW,
UC_X86_INS_VPMULHW,
UC_X86_INS_VPMULLD,
UC_X86_INS_VPMULLQ,
UC_X86_INS_VPMULLW,
UC_X86_INS_VPMULUDQ,
UC_X86_INS_VPORD,
UC_X86_INS_VPORQ,
UC_X86_INS_VPOR,
UC_X86_INS_VPPERM,
UC_X86_INS_VPROTB,
UC_X86_INS_VPROTD,
UC_X86_INS_VPROTQ,
UC_X86_INS_VPROTW,
UC_X86_INS_VPSADBW,
UC_X86_INS_VPSCATTERDD,
UC_X86_INS_VPSCATTERDQ,
UC_X86_INS_VPSCATTERQD,
UC_X86_INS_VPSCATTERQQ,
UC_X86_INS_VPSHAB,
UC_X86_INS_VPSHAD,
UC_X86_INS_VPSHAQ,
UC_X86_INS_VPSHAW,
UC_X86_INS_VPSHLB,
UC_X86_INS_VPSHLD,
UC_X86_INS_VPSHLQ,
UC_X86_INS_VPSHLW,
UC_X86_INS_VPSHUFB,
UC_X86_INS_VPSHUFD,
UC_X86_INS_VPSHUFHW,
UC_X86_INS_VPSHUFLW,
UC_X86_INS_VPSIGNB,
UC_X86_INS_VPSIGND,
UC_X86_INS_VPSIGNW,
UC_X86_INS_VPSLLDQ,
UC_X86_INS_VPSLLD,
UC_X86_INS_VPSLLQ,
UC_X86_INS_VPSLLVD,
UC_X86_INS_VPSLLVQ,
UC_X86_INS_VPSLLW,
UC_X86_INS_VPSRAD,
UC_X86_INS_VPSRAQ,
UC_X86_INS_VPSRAVD,
UC_X86_INS_VPSRAVQ,
UC_X86_INS_VPSRAW,
UC_X86_INS_VPSRLDQ,
UC_X86_INS_VPSRLD,
UC_X86_INS_VPSRLQ,
UC_X86_INS_VPSRLVD,
UC_X86_INS_VPSRLVQ,
UC_X86_INS_VPSRLW,
UC_X86_INS_VPSUBB,
UC_X86_INS_VPSUBD,
UC_X86_INS_VPSUBQ,
UC_X86_INS_VPSUBSB,
UC_X86_INS_VPSUBSW,
UC_X86_INS_VPSUBUSB,
UC_X86_INS_VPSUBUSW,
UC_X86_INS_VPSUBW,
UC_X86_INS_VPTESTMD,
UC_X86_INS_VPTESTMQ,
UC_X86_INS_VPTESTNMD,
UC_X86_INS_VPTESTNMQ,
UC_X86_INS_VPTEST,
UC_X86_INS_VPUNPCKHBW,
UC_X86_INS_VPUNPCKHDQ,
UC_X86_INS_VPUNPCKHQDQ,
UC_X86_INS_VPUNPCKHWD,
UC_X86_INS_VPUNPCKLBW,
UC_X86_INS_VPUNPCKLDQ,
UC_X86_INS_VPUNPCKLQDQ,
UC_X86_INS_VPUNPCKLWD,
UC_X86_INS_VPXORD,
UC_X86_INS_VPXORQ,
UC_X86_INS_VPXOR,
UC_X86_INS_VRCP14PD,
UC_X86_INS_VRCP14PS,
UC_X86_INS_VRCP14SD,
UC_X86_INS_VRCP14SS,
UC_X86_INS_VRCP28PD,
UC_X86_INS_VRCP28PS,
UC_X86_INS_VRCP28SD,
UC_X86_INS_VRCP28SS,
UC_X86_INS_VRCPPS,
UC_X86_INS_VRCPSS,
UC_X86_INS_VRNDSCALEPD,
UC_X86_INS_VRNDSCALEPS,
UC_X86_INS_VRNDSCALESD,
UC_X86_INS_VRNDSCALESS,
UC_X86_INS_VROUNDPD,
UC_X86_INS_VROUNDPS,
UC_X86_INS_VROUNDSD,
UC_X86_INS_VROUNDSS,
UC_X86_INS_VRSQRT14PD,
UC_X86_INS_VRSQRT14PS,
UC_X86_INS_VRSQRT14SD,
UC_X86_INS_VRSQRT14SS,
UC_X86_INS_VRSQRT28PD,
UC_X86_INS_VRSQRT28PS,
UC_X86_INS_VRSQRT28SD,
UC_X86_INS_VRSQRT28SS,
UC_X86_INS_VRSQRTPS,
UC_X86_INS_VRSQRTSS,
UC_X86_INS_VSCATTERDPD,
UC_X86_INS_VSCATTERDPS,
UC_X86_INS_VSCATTERPF0DPD,
UC_X86_INS_VSCATTERPF0DPS,
UC_X86_INS_VSCATTERPF0QPD,
UC_X86_INS_VSCATTERPF0QPS,
UC_X86_INS_VSCATTERPF1DPD,
UC_X86_INS_VSCATTERPF1DPS,
UC_X86_INS_VSCATTERPF1QPD,
UC_X86_INS_VSCATTERPF1QPS,
UC_X86_INS_VSCATTERQPD,
UC_X86_INS_VSCATTERQPS,
UC_X86_INS_VSHUFPD,
UC_X86_INS_VSHUFPS,
UC_X86_INS_VSQRTPD,
UC_X86_INS_VSQRTPS,
UC_X86_INS_VSQRTSD,
UC_X86_INS_VSQRTSS,
UC_X86_INS_VSTMXCSR,
UC_X86_INS_VSUBPD,
UC_X86_INS_VSUBPS,
UC_X86_INS_VSUBSD,
UC_X86_INS_VSUBSS,
UC_X86_INS_VTESTPD,
UC_X86_INS_VTESTPS,
UC_X86_INS_VUNPCKHPD,
UC_X86_INS_VUNPCKHPS,
UC_X86_INS_VUNPCKLPD,
UC_X86_INS_VUNPCKLPS,
UC_X86_INS_VZEROALL,
UC_X86_INS_VZEROUPPER,
UC_X86_INS_WAIT,
UC_X86_INS_WBINVD,
UC_X86_INS_WRFSBASE,
UC_X86_INS_WRGSBASE,
UC_X86_INS_WRMSR,
UC_X86_INS_XABORT,
UC_X86_INS_XACQUIRE,
UC_X86_INS_XBEGIN,
UC_X86_INS_XCHG,
UC_X86_INS_XCRYPTCBC,
UC_X86_INS_XCRYPTCFB,
UC_X86_INS_XCRYPTCTR,
UC_X86_INS_XCRYPTECB,
UC_X86_INS_XCRYPTOFB,
UC_X86_INS_XEND,
UC_X86_INS_XGETBV,
UC_X86_INS_XLATB,
UC_X86_INS_XRELEASE,
UC_X86_INS_XRSTOR,
UC_X86_INS_XRSTOR64,
UC_X86_INS_XRSTORS,
UC_X86_INS_XRSTORS64,
UC_X86_INS_XSAVE,
UC_X86_INS_XSAVE64,
UC_X86_INS_XSAVEC,
UC_X86_INS_XSAVEC64,
UC_X86_INS_XSAVEOPT,
UC_X86_INS_XSAVEOPT64,
UC_X86_INS_XSAVES,
UC_X86_INS_XSAVES64,
UC_X86_INS_XSETBV,
UC_X86_INS_XSHA1,
UC_X86_INS_XSHA256,
UC_X86_INS_XSTORE,
UC_X86_INS_XTEST,
UC_X86_INS_FDISI8087_NOP,
UC_X86_INS_FENI8087_NOP,
UC_X86_INS_ENDING,
/
/
mark the end of the
list
of insn
} uc_x86_insn;
/
/
> X86 instructions
typedef enum uc_x86_insn {
UC_X86_INS_INVALID
=
0
,
UC_X86_INS_AAA,
UC_X86_INS_AAD,
UC_X86_INS_AAM,
UC_X86_INS_AAS,
UC_X86_INS_FABS,
UC_X86_INS_ADC,
UC_X86_INS_ADCX,
UC_X86_INS_ADD,
UC_X86_INS_ADDPD,
UC_X86_INS_ADDPS,
UC_X86_INS_ADDSD,
UC_X86_INS_ADDSS,
UC_X86_INS_ADDSUBPD,
UC_X86_INS_ADDSUBPS,
UC_X86_INS_FADD,
UC_X86_INS_FIADD,
UC_X86_INS_FADDP,
UC_X86_INS_ADOX,
UC_X86_INS_AESDECLAST,
UC_X86_INS_AESDEC,
UC_X86_INS_AESENCLAST,
UC_X86_INS_AESENC,
UC_X86_INS_AESIMC,
UC_X86_INS_AESKEYGENASSIST,
UC_X86_INS_AND,
UC_X86_INS_ANDN,
UC_X86_INS_ANDNPD,
UC_X86_INS_ANDNPS,
UC_X86_INS_ANDPD,
UC_X86_INS_ANDPS,
UC_X86_INS_ARPL,
UC_X86_INS_BEXTR,
UC_X86_INS_BLCFILL,
UC_X86_INS_BLCI,
UC_X86_INS_BLCIC,
UC_X86_INS_BLCMSK,
UC_X86_INS_BLCS,
UC_X86_INS_BLENDPD,
UC_X86_INS_BLENDPS,
UC_X86_INS_BLENDVPD,
UC_X86_INS_BLENDVPS,
UC_X86_INS_BLSFILL,
UC_X86_INS_BLSI,
UC_X86_INS_BLSIC,
UC_X86_INS_BLSMSK,
UC_X86_INS_BLSR,
UC_X86_INS_BOUND,
UC_X86_INS_BSF,
UC_X86_INS_BSR,
UC_X86_INS_BSWAP,
UC_X86_INS_BT,
UC_X86_INS_BTC,
UC_X86_INS_BTR,
UC_X86_INS_BTS,
UC_X86_INS_BZHI,
UC_X86_INS_CALL,
UC_X86_INS_CBW,
UC_X86_INS_CDQ,
UC_X86_INS_CDQE,
UC_X86_INS_FCHS,
UC_X86_INS_CLAC,
UC_X86_INS_CLC,
UC_X86_INS_CLD,
UC_X86_INS_CLFLUSH,
UC_X86_INS_CLFLUSHOPT,
UC_X86_INS_CLGI,
UC_X86_INS_CLI,
UC_X86_INS_CLTS,
UC_X86_INS_CLWB,
UC_X86_INS_CMC,
UC_X86_INS_CMOVA,
UC_X86_INS_CMOVAE,
UC_X86_INS_CMOVB,
UC_X86_INS_CMOVBE,
UC_X86_INS_FCMOVBE,
UC_X86_INS_FCMOVB,
UC_X86_INS_CMOVE,
UC_X86_INS_FCMOVE,
UC_X86_INS_CMOVG,
UC_X86_INS_CMOVGE,
UC_X86_INS_CMOVL,
UC_X86_INS_CMOVLE,
UC_X86_INS_FCMOVNBE,
UC_X86_INS_FCMOVNB,
UC_X86_INS_CMOVNE,
UC_X86_INS_FCMOVNE,
UC_X86_INS_CMOVNO,
UC_X86_INS_CMOVNP,
UC_X86_INS_FCMOVNU,
UC_X86_INS_CMOVNS,
UC_X86_INS_CMOVO,
UC_X86_INS_CMOVP,
UC_X86_INS_FCMOVU,
UC_X86_INS_CMOVS,
UC_X86_INS_CMP,
UC_X86_INS_CMPPD,
UC_X86_INS_CMPPS,
UC_X86_INS_CMPSB,
UC_X86_INS_CMPSD,
UC_X86_INS_CMPSQ,
UC_X86_INS_CMPSS,
UC_X86_INS_CMPSW,
UC_X86_INS_CMPXCHG16B,
UC_X86_INS_CMPXCHG,
UC_X86_INS_CMPXCHG8B,
UC_X86_INS_COMISD,
UC_X86_INS_COMISS,
UC_X86_INS_FCOMP,
UC_X86_INS_FCOMPI,
UC_X86_INS_FCOMI,
UC_X86_INS_FCOM,
UC_X86_INS_FCOS,
UC_X86_INS_CPUID,
UC_X86_INS_CQO,
UC_X86_INS_CRC32,
UC_X86_INS_CVTDQ2PD,
UC_X86_INS_CVTDQ2PS,
UC_X86_INS_CVTPD2DQ,
UC_X86_INS_CVTPD2PS,
UC_X86_INS_CVTPS2DQ,
UC_X86_INS_CVTPS2PD,
UC_X86_INS_CVTSD2SI,
UC_X86_INS_CVTSD2SS,
UC_X86_INS_CVTSI2SD,
UC_X86_INS_CVTSI2SS,
UC_X86_INS_CVTSS2SD,
UC_X86_INS_CVTSS2SI,
UC_X86_INS_CVTTPD2DQ,
UC_X86_INS_CVTTPS2DQ,
UC_X86_INS_CVTTSD2SI,
UC_X86_INS_CVTTSS2SI,
UC_X86_INS_CWD,
UC_X86_INS_CWDE,
UC_X86_INS_DAA,
UC_X86_INS_DAS,
UC_X86_INS_DATA16,
UC_X86_INS_DEC,
UC_X86_INS_DIV,
UC_X86_INS_DIVPD,
UC_X86_INS_DIVPS,
UC_X86_INS_FDIVR,
UC_X86_INS_FIDIVR,
UC_X86_INS_FDIVRP,
UC_X86_INS_DIVSD,
UC_X86_INS_DIVSS,
UC_X86_INS_FDIV,
UC_X86_INS_FIDIV,
UC_X86_INS_FDIVP,
UC_X86_INS_DPPD,
UC_X86_INS_DPPS,
UC_X86_INS_RET,
UC_X86_INS_ENCLS,
UC_X86_INS_ENCLU,
UC_X86_INS_ENTER,
UC_X86_INS_EXTRACTPS,
UC_X86_INS_EXTRQ,
UC_X86_INS_F2XM1,
UC_X86_INS_LCALL,
UC_X86_INS_LJMP,
UC_X86_INS_FBLD,
UC_X86_INS_FBSTP,
UC_X86_INS_FCOMPP,
UC_X86_INS_FDECSTP,
UC_X86_INS_FEMMS,
UC_X86_INS_FFREE,
UC_X86_INS_FICOM,
UC_X86_INS_FICOMP,
UC_X86_INS_FINCSTP,
UC_X86_INS_FLDCW,
UC_X86_INS_FLDENV,
UC_X86_INS_FLDL2E,
UC_X86_INS_FLDL2T,
UC_X86_INS_FLDLG2,
UC_X86_INS_FLDLN2,
UC_X86_INS_FLDPI,
UC_X86_INS_FNCLEX,
UC_X86_INS_FNINIT,
UC_X86_INS_FNOP,
UC_X86_INS_FNSTCW,
UC_X86_INS_FNSTSW,
UC_X86_INS_FPATAN,
UC_X86_INS_FPREM,
UC_X86_INS_FPREM1,
UC_X86_INS_FPTAN,
UC_X86_INS_FFREEP,
UC_X86_INS_FRNDINT,
UC_X86_INS_FRSTOR,
UC_X86_INS_FNSAVE,
UC_X86_INS_FSCALE,
UC_X86_INS_FSETPM,
UC_X86_INS_FSINCOS,
UC_X86_INS_FNSTENV,
UC_X86_INS_FXAM,
UC_X86_INS_FXRSTOR,
UC_X86_INS_FXRSTOR64,
UC_X86_INS_FXSAVE,
UC_X86_INS_FXSAVE64,
UC_X86_INS_FXTRACT,
UC_X86_INS_FYL2X,
UC_X86_INS_FYL2XP1,
UC_X86_INS_MOVAPD,
UC_X86_INS_MOVAPS,
UC_X86_INS_ORPD,
UC_X86_INS_ORPS,
UC_X86_INS_VMOVAPD,
UC_X86_INS_VMOVAPS,
UC_X86_INS_XORPD,
UC_X86_INS_XORPS,
UC_X86_INS_GETSEC,
UC_X86_INS_HADDPD,
UC_X86_INS_HADDPS,
UC_X86_INS_HLT,
UC_X86_INS_HSUBPD,
UC_X86_INS_HSUBPS,
UC_X86_INS_IDIV,
UC_X86_INS_FILD,
UC_X86_INS_IMUL,
UC_X86_INS_IN,
UC_X86_INS_INC,
UC_X86_INS_INSB,
UC_X86_INS_INSERTPS,
UC_X86_INS_INSERTQ,
UC_X86_INS_INSD,
UC_X86_INS_INSW,
UC_X86_INS_INT,
UC_X86_INS_INT1,
UC_X86_INS_INT3,
UC_X86_INS_INTO,
UC_X86_INS_INVD,
UC_X86_INS_INVEPT,
UC_X86_INS_INVLPG,
UC_X86_INS_INVLPGA,
UC_X86_INS_INVPCID,
UC_X86_INS_INVVPID,
UC_X86_INS_IRET,
UC_X86_INS_IRETD,
UC_X86_INS_IRETQ,
UC_X86_INS_FISTTP,
UC_X86_INS_FIST,
UC_X86_INS_FISTP,
UC_X86_INS_UCOMISD,
UC_X86_INS_UCOMISS,
UC_X86_INS_VCOMISD,
UC_X86_INS_VCOMISS,
UC_X86_INS_VCVTSD2SS,
UC_X86_INS_VCVTSI2SD,
UC_X86_INS_VCVTSI2SS,
UC_X86_INS_VCVTSS2SD,
UC_X86_INS_VCVTTSD2SI,
UC_X86_INS_VCVTTSD2USI,
UC_X86_INS_VCVTTSS2SI,
UC_X86_INS_VCVTTSS2USI,
UC_X86_INS_VCVTUSI2SD,
UC_X86_INS_VCVTUSI2SS,
UC_X86_INS_VUCOMISD,
UC_X86_INS_VUCOMISS,
UC_X86_INS_JAE,
UC_X86_INS_JA,
UC_X86_INS_JBE,
UC_X86_INS_JB,
UC_X86_INS_JCXZ,
UC_X86_INS_JECXZ,
UC_X86_INS_JE,
UC_X86_INS_JGE,
UC_X86_INS_JG,
UC_X86_INS_JLE,
UC_X86_INS_JL,
UC_X86_INS_JMP,
UC_X86_INS_JNE,
UC_X86_INS_JNO,
UC_X86_INS_JNP,
UC_X86_INS_JNS,
UC_X86_INS_JO,
UC_X86_INS_JP,
UC_X86_INS_JRCXZ,
UC_X86_INS_JS,
UC_X86_INS_KANDB,
UC_X86_INS_KANDD,
UC_X86_INS_KANDNB,
UC_X86_INS_KANDND,
UC_X86_INS_KANDNQ,
UC_X86_INS_KANDNW,
UC_X86_INS_KANDQ,
UC_X86_INS_KANDW,
UC_X86_INS_KMOVB,
UC_X86_INS_KMOVD,
UC_X86_INS_KMOVQ,
UC_X86_INS_KMOVW,
UC_X86_INS_KNOTB,
UC_X86_INS_KNOTD,
UC_X86_INS_KNOTQ,
UC_X86_INS_KNOTW,
UC_X86_INS_KORB,
UC_X86_INS_KORD,
UC_X86_INS_KORQ,
UC_X86_INS_KORTESTB,
UC_X86_INS_KORTESTD,
UC_X86_INS_KORTESTQ,
UC_X86_INS_KORTESTW,
UC_X86_INS_KORW,
UC_X86_INS_KSHIFTLB,
UC_X86_INS_KSHIFTLD,
UC_X86_INS_KSHIFTLQ,
UC_X86_INS_KSHIFTLW,
UC_X86_INS_KSHIFTRB,
UC_X86_INS_KSHIFTRD,
UC_X86_INS_KSHIFTRQ,
UC_X86_INS_KSHIFTRW,
UC_X86_INS_KUNPCKBW,
UC_X86_INS_KXNORB,
UC_X86_INS_KXNORD,
UC_X86_INS_KXNORQ,
UC_X86_INS_KXNORW,
UC_X86_INS_KXORB,
UC_X86_INS_KXORD,
UC_X86_INS_KXORQ,
UC_X86_INS_KXORW,
UC_X86_INS_LAHF,
UC_X86_INS_LAR,
UC_X86_INS_LDDQU,
UC_X86_INS_LDMXCSR,
UC_X86_INS_LDS,
UC_X86_INS_FLDZ,
UC_X86_INS_FLD1,
UC_X86_INS_FLD,
UC_X86_INS_LEA,
UC_X86_INS_LEAVE,
UC_X86_INS_LES,
UC_X86_INS_LFENCE,
UC_X86_INS_LFS,
UC_X86_INS_LGDT,
UC_X86_INS_LGS,
UC_X86_INS_LIDT,
UC_X86_INS_LLDT,
UC_X86_INS_LMSW,
UC_X86_INS_OR,
UC_X86_INS_SUB,
UC_X86_INS_XOR,
UC_X86_INS_LODSB,
UC_X86_INS_LODSD,
UC_X86_INS_LODSQ,
UC_X86_INS_LODSW,
UC_X86_INS_LOOP,
UC_X86_INS_LOOPE,
UC_X86_INS_LOOPNE,
UC_X86_INS_RETF,
UC_X86_INS_RETFQ,
UC_X86_INS_LSL,
UC_X86_INS_LSS,
UC_X86_INS_LTR,
UC_X86_INS_XADD,
UC_X86_INS_LZCNT,
UC_X86_INS_MASKMOVDQU,
UC_X86_INS_MAXPD,
UC_X86_INS_MAXPS,
UC_X86_INS_MAXSD,
UC_X86_INS_MAXSS,
UC_X86_INS_MFENCE,
UC_X86_INS_MINPD,
UC_X86_INS_MINPS,
UC_X86_INS_MINSD,
UC_X86_INS_MINSS,
UC_X86_INS_CVTPD2PI,
UC_X86_INS_CVTPI2PD,
UC_X86_INS_CVTPI2PS,
UC_X86_INS_CVTPS2PI,
UC_X86_INS_CVTTPD2PI,
UC_X86_INS_CVTTPS2PI,
UC_X86_INS_EMMS,
UC_X86_INS_MASKMOVQ,
UC_X86_INS_MOVD,
UC_X86_INS_MOVDQ2Q,
UC_X86_INS_MOVNTQ,
UC_X86_INS_MOVQ2DQ,
UC_X86_INS_MOVQ,
UC_X86_INS_PABSB,
UC_X86_INS_PABSD,
UC_X86_INS_PABSW,
UC_X86_INS_PACKSSDW,
UC_X86_INS_PACKSSWB,
UC_X86_INS_PACKUSWB,
UC_X86_INS_PADDB,
UC_X86_INS_PADDD,
UC_X86_INS_PADDQ,
UC_X86_INS_PADDSB,
UC_X86_INS_PADDSW,
UC_X86_INS_PADDUSB,
UC_X86_INS_PADDUSW,
UC_X86_INS_PADDW,
UC_X86_INS_PALIGNR,
UC_X86_INS_PANDN,
UC_X86_INS_PAND,
UC_X86_INS_PAVGB,
UC_X86_INS_PAVGW,
UC_X86_INS_PCMPEQB,
UC_X86_INS_PCMPEQD,
UC_X86_INS_PCMPEQW,
UC_X86_INS_PCMPGTB,
UC_X86_INS_PCMPGTD,
UC_X86_INS_PCMPGTW,
UC_X86_INS_PEXTRW,
UC_X86_INS_PHADDSW,
UC_X86_INS_PHADDW,
UC_X86_INS_PHADDD,
UC_X86_INS_PHSUBD,
UC_X86_INS_PHSUBSW,
UC_X86_INS_PHSUBW,
UC_X86_INS_PINSRW,
UC_X86_INS_PMADDUBSW,
UC_X86_INS_PMADDWD,
UC_X86_INS_PMAXSW,
UC_X86_INS_PMAXUB,
UC_X86_INS_PMINSW,
UC_X86_INS_PMINUB,
UC_X86_INS_PMOVMSKB,
UC_X86_INS_PMULHRSW,
UC_X86_INS_PMULHUW,
UC_X86_INS_PMULHW,
UC_X86_INS_PMULLW,
UC_X86_INS_PMULUDQ,
UC_X86_INS_POR,
UC_X86_INS_PSADBW,
UC_X86_INS_PSHUFB,
UC_X86_INS_PSHUFW,
UC_X86_INS_PSIGNB,
UC_X86_INS_PSIGND,
UC_X86_INS_PSIGNW,
UC_X86_INS_PSLLD,
UC_X86_INS_PSLLQ,
UC_X86_INS_PSLLW,
UC_X86_INS_PSRAD,
UC_X86_INS_PSRAW,
UC_X86_INS_PSRLD,
UC_X86_INS_PSRLQ,
UC_X86_INS_PSRLW,
UC_X86_INS_PSUBB,
UC_X86_INS_PSUBD,
UC_X86_INS_PSUBQ,
UC_X86_INS_PSUBSB,
UC_X86_INS_PSUBSW,
UC_X86_INS_PSUBUSB,
UC_X86_INS_PSUBUSW,
UC_X86_INS_PSUBW,
UC_X86_INS_PUNPCKHBW,
UC_X86_INS_PUNPCKHDQ,
UC_X86_INS_PUNPCKHWD,
UC_X86_INS_PUNPCKLBW,
UC_X86_INS_PUNPCKLDQ,
UC_X86_INS_PUNPCKLWD,
UC_X86_INS_PXOR,
UC_X86_INS_MONITOR,
UC_X86_INS_MONTMUL,
UC_X86_INS_MOV,
UC_X86_INS_MOVABS,
UC_X86_INS_MOVBE,
UC_X86_INS_MOVDDUP,
UC_X86_INS_MOVDQA,
UC_X86_INS_MOVDQU,
UC_X86_INS_MOVHLPS,
UC_X86_INS_MOVHPD,
UC_X86_INS_MOVHPS,
UC_X86_INS_MOVLHPS,
UC_X86_INS_MOVLPD,
UC_X86_INS_MOVLPS,
UC_X86_INS_MOVMSKPD,
UC_X86_INS_MOVMSKPS,
UC_X86_INS_MOVNTDQA,
UC_X86_INS_MOVNTDQ,
UC_X86_INS_MOVNTI,
UC_X86_INS_MOVNTPD,
UC_X86_INS_MOVNTPS,
UC_X86_INS_MOVNTSD,
UC_X86_INS_MOVNTSS,
UC_X86_INS_MOVSB,
UC_X86_INS_MOVSD,
UC_X86_INS_MOVSHDUP,
UC_X86_INS_MOVSLDUP,
UC_X86_INS_MOVSQ,
UC_X86_INS_MOVSS,
UC_X86_INS_MOVSW,
UC_X86_INS_MOVSX,
UC_X86_INS_MOVSXD,
UC_X86_INS_MOVUPD,
UC_X86_INS_MOVUPS,
UC_X86_INS_MOVZX,
UC_X86_INS_MPSADBW,
UC_X86_INS_MUL,
UC_X86_INS_MULPD,
UC_X86_INS_MULPS,
UC_X86_INS_MULSD,
UC_X86_INS_MULSS,
UC_X86_INS_MULX,
UC_X86_INS_FMUL,
UC_X86_INS_FIMUL,
UC_X86_INS_FMULP,
UC_X86_INS_MWAIT,
UC_X86_INS_NEG,
UC_X86_INS_NOP,
UC_X86_INS_NOT,
UC_X86_INS_OUT,
UC_X86_INS_OUTSB,
UC_X86_INS_OUTSD,
UC_X86_INS_OUTSW,
UC_X86_INS_PACKUSDW,
UC_X86_INS_PAUSE,
UC_X86_INS_PAVGUSB,
UC_X86_INS_PBLENDVB,
UC_X86_INS_PBLENDW,
UC_X86_INS_PCLMULQDQ,
UC_X86_INS_PCMPEQQ,
UC_X86_INS_PCMPESTRI,
UC_X86_INS_PCMPESTRM,
UC_X86_INS_PCMPGTQ,
UC_X86_INS_PCMPISTRI,
UC_X86_INS_PCMPISTRM,
UC_X86_INS_PCOMMIT,
UC_X86_INS_PDEP,
UC_X86_INS_PEXT,
UC_X86_INS_PEXTRB,
UC_X86_INS_PEXTRD,
UC_X86_INS_PEXTRQ,
UC_X86_INS_PF2ID,
UC_X86_INS_PF2IW,
UC_X86_INS_PFACC,
UC_X86_INS_PFADD,
UC_X86_INS_PFCMPEQ,
UC_X86_INS_PFCMPGE,
UC_X86_INS_PFCMPGT,
UC_X86_INS_PFMAX,
UC_X86_INS_PFMIN,
UC_X86_INS_PFMUL,
UC_X86_INS_PFNACC,
UC_X86_INS_PFPNACC,
UC_X86_INS_PFRCPIT1,
UC_X86_INS_PFRCPIT2,
UC_X86_INS_PFRCP,
UC_X86_INS_PFRSQIT1,
UC_X86_INS_PFRSQRT,
UC_X86_INS_PFSUBR,
UC_X86_INS_PFSUB,
UC_X86_INS_PHMINPOSUW,
UC_X86_INS_PI2FD,
UC_X86_INS_PI2FW,
UC_X86_INS_PINSRB,
UC_X86_INS_PINSRD,
UC_X86_INS_PINSRQ,
UC_X86_INS_PMAXSB,
UC_X86_INS_PMAXSD,
UC_X86_INS_PMAXUD,
UC_X86_INS_PMAXUW,
UC_X86_INS_PMINSB,
UC_X86_INS_PMINSD,
UC_X86_INS_PMINUD,
UC_X86_INS_PMINUW,
UC_X86_INS_PMOVSXBD,
UC_X86_INS_PMOVSXBQ,
UC_X86_INS_PMOVSXBW,
UC_X86_INS_PMOVSXDQ,
UC_X86_INS_PMOVSXWD,
UC_X86_INS_PMOVSXWQ,
UC_X86_INS_PMOVZXBD,
UC_X86_INS_PMOVZXBQ,
UC_X86_INS_PMOVZXBW,
UC_X86_INS_PMOVZXDQ,
UC_X86_INS_PMOVZXWD,
UC_X86_INS_PMOVZXWQ,
UC_X86_INS_PMULDQ,
UC_X86_INS_PMULHRW,
UC_X86_INS_PMULLD,
UC_X86_INS_POP,
UC_X86_INS_POPAW,
UC_X86_INS_POPAL,
UC_X86_INS_POPCNT,
UC_X86_INS_POPF,
UC_X86_INS_POPFD,
UC_X86_INS_POPFQ,
UC_X86_INS_PREFETCH,
UC_X86_INS_PREFETCHNTA,
UC_X86_INS_PREFETCHT0,
UC_X86_INS_PREFETCHT1,
UC_X86_INS_PREFETCHT2,
UC_X86_INS_PREFETCHW,
UC_X86_INS_PSHUFD,
UC_X86_INS_PSHUFHW,
UC_X86_INS_PSHUFLW,
UC_X86_INS_PSLLDQ,
UC_X86_INS_PSRLDQ,
UC_X86_INS_PSWAPD,
UC_X86_INS_PTEST,
UC_X86_INS_PUNPCKHQDQ,
UC_X86_INS_PUNPCKLQDQ,
UC_X86_INS_PUSH,
UC_X86_INS_PUSHAW,
UC_X86_INS_PUSHAL,
UC_X86_INS_PUSHF,
UC_X86_INS_PUSHFD,
UC_X86_INS_PUSHFQ,
UC_X86_INS_RCL,
UC_X86_INS_RCPPS,
UC_X86_INS_RCPSS,
UC_X86_INS_RCR,
UC_X86_INS_RDFSBASE,
UC_X86_INS_RDGSBASE,
UC_X86_INS_RDMSR,
UC_X86_INS_RDPMC,
UC_X86_INS_RDRAND,
UC_X86_INS_RDSEED,
UC_X86_INS_RDTSC,
UC_X86_INS_RDTSCP,
UC_X86_INS_ROL,
UC_X86_INS_ROR,
UC_X86_INS_RORX,
UC_X86_INS_ROUNDPD,
UC_X86_INS_ROUNDPS,
UC_X86_INS_ROUNDSD,
UC_X86_INS_ROUNDSS,
UC_X86_INS_RSM,
UC_X86_INS_RSQRTPS,
UC_X86_INS_RSQRTSS,
UC_X86_INS_SAHF,
UC_X86_INS_SAL,
UC_X86_INS_SALC,
UC_X86_INS_SAR,
UC_X86_INS_SARX,
UC_X86_INS_SBB,
UC_X86_INS_SCASB,
UC_X86_INS_SCASD,
UC_X86_INS_SCASQ,
UC_X86_INS_SCASW,
UC_X86_INS_SETAE,
UC_X86_INS_SETA,
UC_X86_INS_SETBE,
UC_X86_INS_SETB,
UC_X86_INS_SETE,
UC_X86_INS_SETGE,
UC_X86_INS_SETG,
UC_X86_INS_SETLE,
UC_X86_INS_SETL,
UC_X86_INS_SETNE,
UC_X86_INS_SETNO,
UC_X86_INS_SETNP,
UC_X86_INS_SETNS,
UC_X86_INS_SETO,
UC_X86_INS_SETP,
UC_X86_INS_SETS,
UC_X86_INS_SFENCE,
UC_X86_INS_SGDT,
UC_X86_INS_SHA1MSG1,
UC_X86_INS_SHA1MSG2,
UC_X86_INS_SHA1NEXTE,
UC_X86_INS_SHA1RNDS4,
UC_X86_INS_SHA256MSG1,
UC_X86_INS_SHA256MSG2,
UC_X86_INS_SHA256RNDS2,
UC_X86_INS_SHL,
UC_X86_INS_SHLD,
UC_X86_INS_SHLX,
UC_X86_INS_SHR,
UC_X86_INS_SHRD,
UC_X86_INS_SHRX,
UC_X86_INS_SHUFPD,
UC_X86_INS_SHUFPS,
UC_X86_INS_SIDT,
UC_X86_INS_FSIN,
UC_X86_INS_SKINIT,
UC_X86_INS_SLDT,
UC_X86_INS_SMSW,
UC_X86_INS_SQRTPD,
UC_X86_INS_SQRTPS,
UC_X86_INS_SQRTSD,
UC_X86_INS_SQRTSS,
UC_X86_INS_FSQRT,
UC_X86_INS_STAC,
UC_X86_INS_STC,
UC_X86_INS_STD,
UC_X86_INS_STGI,
UC_X86_INS_STI,
UC_X86_INS_STMXCSR,
UC_X86_INS_STOSB,
UC_X86_INS_STOSD,
UC_X86_INS_STOSQ,
UC_X86_INS_STOSW,
UC_X86_INS_STR,
UC_X86_INS_FST,
UC_X86_INS_FSTP,
UC_X86_INS_FSTPNCE,
UC_X86_INS_FXCH,
UC_X86_INS_SUBPD,
UC_X86_INS_SUBPS,
UC_X86_INS_FSUBR,
UC_X86_INS_FISUBR,
UC_X86_INS_FSUBRP,
UC_X86_INS_SUBSD,
UC_X86_INS_SUBSS,
UC_X86_INS_FSUB,
UC_X86_INS_FISUB,
UC_X86_INS_FSUBP,
UC_X86_INS_SWAPGS,
UC_X86_INS_SYSCALL,
UC_X86_INS_SYSENTER,
UC_X86_INS_SYSEXIT,
UC_X86_INS_SYSRET,
UC_X86_INS_T1MSKC,
UC_X86_INS_TEST,
UC_X86_INS_UD2,
UC_X86_INS_FTST,
UC_X86_INS_TZCNT,
UC_X86_INS_TZMSK,
UC_X86_INS_FUCOMPI,
UC_X86_INS_FUCOMI,
UC_X86_INS_FUCOMPP,
UC_X86_INS_FUCOMP,
UC_X86_INS_FUCOM,
UC_X86_INS_UD2B,
UC_X86_INS_UNPCKHPD,
UC_X86_INS_UNPCKHPS,
UC_X86_INS_UNPCKLPD,
UC_X86_INS_UNPCKLPS,
UC_X86_INS_VADDPD,
UC_X86_INS_VADDPS,
UC_X86_INS_VADDSD,
UC_X86_INS_VADDSS,
UC_X86_INS_VADDSUBPD,
UC_X86_INS_VADDSUBPS,
UC_X86_INS_VAESDECLAST,
UC_X86_INS_VAESDEC,
UC_X86_INS_VAESENCLAST,
UC_X86_INS_VAESENC,
UC_X86_INS_VAESIMC,
UC_X86_INS_VAESKEYGENASSIST,
UC_X86_INS_VALIGND,
UC_X86_INS_VALIGNQ,
UC_X86_INS_VANDNPD,
UC_X86_INS_VANDNPS,
UC_X86_INS_VANDPD,
UC_X86_INS_VANDPS,
UC_X86_INS_VBLENDMPD,
UC_X86_INS_VBLENDMPS,
UC_X86_INS_VBLENDPD,
UC_X86_INS_VBLENDPS,
UC_X86_INS_VBLENDVPD,
UC_X86_INS_VBLENDVPS,
UC_X86_INS_VBROADCASTF128,
UC_X86_INS_VBROADCASTI32X4,
UC_X86_INS_VBROADCASTI64X4,
UC_X86_INS_VBROADCASTSD,
UC_X86_INS_VBROADCASTSS,
UC_X86_INS_VCMPPD,
UC_X86_INS_VCMPPS,
UC_X86_INS_VCMPSD,
UC_X86_INS_VCMPSS,
UC_X86_INS_VCOMPRESSPD,
UC_X86_INS_VCOMPRESSPS,
UC_X86_INS_VCVTDQ2PD,
UC_X86_INS_VCVTDQ2PS,
UC_X86_INS_VCVTPD2DQX,
UC_X86_INS_VCVTPD2DQ,
UC_X86_INS_VCVTPD2PSX,
UC_X86_INS_VCVTPD2PS,
UC_X86_INS_VCVTPD2UDQ,
UC_X86_INS_VCVTPH2PS,
UC_X86_INS_VCVTPS2DQ,
UC_X86_INS_VCVTPS2PD,
UC_X86_INS_VCVTPS2PH,
UC_X86_INS_VCVTPS2UDQ,
UC_X86_INS_VCVTSD2SI,
UC_X86_INS_VCVTSD2USI,
UC_X86_INS_VCVTSS2SI,
UC_X86_INS_VCVTSS2USI,
UC_X86_INS_VCVTTPD2DQX,
UC_X86_INS_VCVTTPD2DQ,
UC_X86_INS_VCVTTPD2UDQ,
UC_X86_INS_VCVTTPS2DQ,
UC_X86_INS_VCVTTPS2UDQ,
UC_X86_INS_VCVTUDQ2PD,
UC_X86_INS_VCVTUDQ2PS,
UC_X86_INS_VDIVPD,
UC_X86_INS_VDIVPS,
UC_X86_INS_VDIVSD,
UC_X86_INS_VDIVSS,
UC_X86_INS_VDPPD,
UC_X86_INS_VDPPS,
UC_X86_INS_VERR,
UC_X86_INS_VERW,
UC_X86_INS_VEXP2PD,
UC_X86_INS_VEXP2PS,
UC_X86_INS_VEXPANDPD,
UC_X86_INS_VEXPANDPS,
UC_X86_INS_VEXTRACTF128,
UC_X86_INS_VEXTRACTF32X4,
UC_X86_INS_VEXTRACTF64X4,
UC_X86_INS_VEXTRACTI128,
UC_X86_INS_VEXTRACTI32X4,
UC_X86_INS_VEXTRACTI64X4,
UC_X86_INS_VEXTRACTPS,
UC_X86_INS_VFMADD132PD,
UC_X86_INS_VFMADD132PS,
UC_X86_INS_VFMADDPD,
UC_X86_INS_VFMADD213PD,
UC_X86_INS_VFMADD231PD,
UC_X86_INS_VFMADDPS,
UC_X86_INS_VFMADD213PS,
UC_X86_INS_VFMADD231PS,
UC_X86_INS_VFMADDSD,
UC_X86_INS_VFMADD213SD,
UC_X86_INS_VFMADD132SD,
UC_X86_INS_VFMADD231SD,
UC_X86_INS_VFMADDSS,
UC_X86_INS_VFMADD213SS,
UC_X86_INS_VFMADD132SS,
UC_X86_INS_VFMADD231SS,
UC_X86_INS_VFMADDSUB132PD,
UC_X86_INS_VFMADDSUB132PS,
UC_X86_INS_VFMADDSUBPD,
UC_X86_INS_VFMADDSUB213PD,
UC_X86_INS_VFMADDSUB231PD,
UC_X86_INS_VFMADDSUBPS,
UC_X86_INS_VFMADDSUB213PS,
UC_X86_INS_VFMADDSUB231PS,
UC_X86_INS_VFMSUB132PD,
UC_X86_INS_VFMSUB132PS,
UC_X86_INS_VFMSUBADD132PD,
UC_X86_INS_VFMSUBADD132PS,
UC_X86_INS_VFMSUBADDPD,
UC_X86_INS_VFMSUBADD213PD,
UC_X86_INS_VFMSUBADD231PD,
UC_X86_INS_VFMSUBADDPS,
UC_X86_INS_VFMSUBADD213PS,
UC_X86_INS_VFMSUBADD231PS,
UC_X86_INS_VFMSUBPD,
UC_X86_INS_VFMSUB213PD,
UC_X86_INS_VFMSUB231PD,
UC_X86_INS_VFMSUBPS,
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-6-18 12:32
被SYJ-Re编辑
,原因: