libdasm.c
来自「基于fuzzing的文件格式漏洞测试软件」· C语言 代码 · 共 799 行 · 第 1/5 页
C
799 行
{ INSTRUCTION_TYPE_JMPC, "jns", AM_J|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jp", AM_J|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnp", AM_J|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jl", AM_J|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnl", AM_J|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jle", AM_J|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnle", AM_J|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "seto", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setno", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setb", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setnb", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setz", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setnz", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setbe", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setnbe", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "sets", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setns", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setp", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setnp", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setl", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setnl", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setle", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "setnle", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "push", AM_REG|REG_FS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "pop", AM_REG|REG_FS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "cpuid", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bt", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "shld", AM_E|OT_v, AM_G|OT_v, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, "shld", AM_E|OT_v, AM_G|OT_v, AM_REG|REG_ECX|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
// XXX: ibts: undocumented?
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "push", AM_REG|REG_GS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "pop", AM_REG|REG_GS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "rsm", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bts", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "shrd", AM_E|OT_v, AM_G|OT_v, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, "shrd", AM_E|OT_v, AM_G|OT_v, AM_REG|REG_ECX|OT_b, 1 },
// XXX: check addressing mode, Intel manual is a little bit confusing...
{ INSTRUCTION_TYPE_OTHER, "grp15", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MUL, "imul", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "cmpxchg", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "cmpxchg", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "lss", AM_G|OT_v, AM_M|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "btr", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "lfs", AM_G|OT_v, AM_M|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "lgs", AM_G|OT_v, AM_M|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "movzx", AM_G|OT_v, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "movzx", AM_G|OT_v, AM_E|OT_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
// XXX: group 10 / invalid opcode?
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "g8", AM_E|OT_v, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "btc", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "bsf", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "bsr", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "movsx", AM_G|OT_v, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "movsx", AM_G|OT_v, AM_E|OT_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "xadd", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "xadd", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "cmpps", AM_V|OT_ps, AM_W|OT_ps, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, "movnti", AM_M|OT_d, AM_G|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pinsrw", AM_P|OT_q, AM_E|OT_d, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, "pextrv", AM_G|OT_v, AM_P|OT_q, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, "shufps", AM_V|OT_ps, AM_W|OT_ps, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, "g9", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_EAX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_ECX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_EDX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_EBX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_ESP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_EBP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_ESI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bswap", AM_REG|REG_EDI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "addsubps", AM_V|OT_ps, AM_W|OT_ps, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psrlw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psrld", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psrlq", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddq", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmullw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "movq", AM_W|OT_q, AM_V|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmovmskb", AM_G|OT_v, AM_P|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubusb", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubusw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pminub", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pand", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddusb", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddusw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmaxsw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pandn", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pavgb", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psraw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psrad", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pavgw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmulhuw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmulhw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "cvtpd2dq", AM_V|OT_q, AM_W|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "movntq", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubsb", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubsw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pminsw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "por", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddsb", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddsw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmaxsw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pxor", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "lddqu", AM_V|OT_q, AM_M|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psllw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pslld", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psllq", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmuludq", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "pmaddwd", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psadbw", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
// XXX: check operand types
{ INSTRUCTION_TYPE_OTHER, "maskmovq", AM_P|OT_q, AM_Q|OT_d, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubb", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubd", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "psubq", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddb", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddw", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "paddd", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// Just a lame hack to provide additional arguments to group 3 "test"
INST inst_table3[2] = {
{ INSTRUCTION_TYPE_TEST, "test", AM_E|OT_b, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_TEST, "test", AM_E|OT_v, AM_I|OT_v, FLAGS_NONE, 1 },
};
// FPU instruction tables
/*
* Tables are composed in two parts:
*
* - 1st part (index 0-7) are identified by the reg field of MODRM byte
* if the MODRM is < 0xc0. reg field can be used directly as an index to table.
*
* - 2nd part (8 - 0x47) are identified by the MODRM byte itself. In that case,
* the index can be calculated by "index = MODRM - 0xb8"
*
*/
INST inst_table_fpu_d8[72] = {
{ INSTRUCTION_TYPE_FPU, "fadds", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fmuls", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fcoms", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fcomps", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fsubs", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fsubrs", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fdivs", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fdivrs", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fadd", AM_REG|REG_ST0|F_f, AM_REG|REG_ST0|F_f, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fadd", AM_REG|REG_ST0|F_f, AM_REG|REG_ST1|F_f, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fadd", AM_REG|REG_ST0|F_f, AM_REG|REG_ST2|F_f, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fadd", AM_REG|REG_ST0|F_f, AM_REG|REG_ST3|F_f, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fadd", AM_REG|REG_ST0|F_f, AM_REG|REG_ST4|F_f, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fadd", AM_REG|REG_ST0|F_f, AM_REG|REG_ST5|F_f, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fadd", AM
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?