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 + -
显示快捷键?