/src/capstonev5/arch/X86/X86Module.c
Line  | Count  | Source  | 
1  |  | /* Capstone Disassembly Engine */  | 
2  |  | /* By Dang Hoang Vu <danghvu@gmail.com> 2013 */  | 
3  |  |  | 
4  |  | #ifdef CAPSTONE_HAS_X86  | 
5  |  |  | 
6  |  | #include "../../cs_priv.h"  | 
7  |  | #include "../../MCRegisterInfo.h"  | 
8  |  | #include "X86Disassembler.h"  | 
9  |  | #include "X86InstPrinter.h"  | 
10  |  | #include "X86Mapping.h"  | 
11  |  | #include "X86Module.h"  | 
12  |  |  | 
13  |  | cs_err X86_global_init(cs_struct *ud)  | 
14  | 11.4k  | { | 
15  | 11.4k  |   MCRegisterInfo *mri;  | 
16  | 11.4k  |   mri = cs_mem_malloc(sizeof(*mri));  | 
17  |  |  | 
18  | 11.4k  |   X86_init(mri);  | 
19  |  |  | 
20  |  |   // by default, we use Intel syntax  | 
21  | 11.4k  |   ud->printer = X86_Intel_printInst;  | 
22  | 11.4k  |   ud->syntax = CS_OPT_SYNTAX_INTEL;  | 
23  | 11.4k  |   ud->printer_info = mri;  | 
24  | 11.4k  |   ud->disasm = X86_getInstruction;  | 
25  | 11.4k  |   ud->reg_name = X86_reg_name;  | 
26  | 11.4k  |   ud->insn_id = X86_get_insn_id;  | 
27  | 11.4k  |   ud->insn_name = X86_insn_name;  | 
28  | 11.4k  |   ud->group_name = X86_group_name;  | 
29  | 11.4k  |   ud->post_printer = X86_postprinter;  | 
30  | 11.4k  | #ifndef CAPSTONE_DIET  | 
31  | 11.4k  |   ud->reg_access = X86_reg_access;  | 
32  | 11.4k  | #endif  | 
33  |  |  | 
34  | 11.4k  |   if (ud->mode == CS_MODE_64)  | 
35  | 5.13k  |     ud->regsize_map = regsize_map_64;  | 
36  | 6.27k  |   else  | 
37  | 6.27k  |     ud->regsize_map = regsize_map_32;  | 
38  |  |  | 
39  | 11.4k  |   return CS_ERR_OK;  | 
40  | 11.4k  | }  | 
41  |  |  | 
42  |  | cs_err X86_option(cs_struct *handle, cs_opt_type type, size_t value)  | 
43  | 5.56k  | { | 
44  | 5.56k  |   switch(type) { | 
45  | 0  |     default:  | 
46  | 0  |       break;  | 
47  | 0  |     case CS_OPT_MODE:  | 
48  | 0  |       if (value == CS_MODE_64)  | 
49  | 0  |         handle->regsize_map = regsize_map_64;  | 
50  | 0  |       else  | 
51  | 0  |         handle->regsize_map = regsize_map_32;  | 
52  |  | 
  | 
53  | 0  |       handle->mode = (cs_mode)value;  | 
54  | 0  |       break;  | 
55  | 5.56k  |     case CS_OPT_SYNTAX:  | 
56  | 5.56k  |       switch(value) { | 
57  | 0  |         default:  | 
58  |  |           // wrong syntax value  | 
59  | 0  |           handle->errnum = CS_ERR_OPTION;  | 
60  | 0  |           return CS_ERR_OPTION;  | 
61  |  |  | 
62  | 0  |         case CS_OPT_SYNTAX_DEFAULT:  | 
63  | 0  |         case CS_OPT_SYNTAX_INTEL:  | 
64  | 0  |           handle->syntax = CS_OPT_SYNTAX_INTEL;  | 
65  | 0  |           handle->printer = X86_Intel_printInst;  | 
66  | 0  |           break;  | 
67  |  |  | 
68  | 0  |         case CS_OPT_SYNTAX_MASM:  | 
69  | 0  |           handle->printer = X86_Intel_printInst;  | 
70  | 0  |           handle->syntax = (int)value;  | 
71  | 0  |           break;  | 
72  |  |  | 
73  | 5.56k  |         case CS_OPT_SYNTAX_ATT:  | 
74  | 5.56k  | #if !defined(CAPSTONE_DIET) && !defined(CAPSTONE_X86_ATT_DISABLE)  | 
75  | 5.56k  |           handle->printer = X86_ATT_printInst;  | 
76  | 5.56k  |           handle->syntax = CS_OPT_SYNTAX_ATT;  | 
77  | 5.56k  |           break;  | 
78  |  | #elif !defined(CAPSTONE_DIET) && defined(CAPSTONE_X86_ATT_DISABLE)  | 
79  |  |           // ATT syntax is unsupported  | 
80  |  |           handle->errnum = CS_ERR_X86_ATT;  | 
81  |  |           return CS_ERR_X86_ATT;  | 
82  |  | #else // CAPSTONE_DIET  | 
83  |  |           // this is irrelevant in CAPSTONE_DIET mode  | 
84  |  |           handle->errnum = CS_ERR_DIET;  | 
85  |  |           return CS_ERR_DIET;  | 
86  |  | #endif  | 
87  | 5.56k  |       }  | 
88  | 5.56k  |       break;  | 
89  | 5.56k  |   }  | 
90  |  |  | 
91  | 5.56k  |   return CS_ERR_OK;  | 
92  | 5.56k  | }  | 
93  |  |  | 
94  |  | #endif  |