libdasm.c
来自「基于fuzzing的文件格式漏洞测试软件」· C语言 代码 · 共 799 行 · 第 1/5 页
C
799 行
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // g7
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // g8
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // g9
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // ga
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // gb
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // gc
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // gd
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // ge
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // gf
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
},
{ // g0
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
INSTRUCTION_TYPE_OTHER, INSTRUCTION_TYPE_OTHER,
}
};
// 1-byte opcodes
INST inst_table1[256] = {
{ INSTRUCTION_TYPE_ADD, "add", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ADD, "add", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ES|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_ES|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OR, "or", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OR, "or", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_CS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
// Escape to 2-byte opcode table
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_SS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_SS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_DS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_DS|F_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_AND, "and", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_AND, "and", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
// seg ES override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "daa", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
// seg CS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "das", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
// seg SS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "aaa", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_E|OT_b, AM_G|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_E|OT_v, AM_G|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_G|OT_b, AM_E|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_G|OT_v, AM_E|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_REG|REG_EAX|OT_b, AM_I|OT_b, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_REG|REG_EAX|OT_v, AM_I|OT_v, FLAGS_NONE, 0 },
// seg DS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "aas", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EAX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_ECX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EDX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EBX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_ESP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EBP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_ESI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EDI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EAX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_ECX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EDX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EBX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_ESP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EBP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_ESI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EDI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EAX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ECX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EDX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EBX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ESP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EBP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ESI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EDI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?