VirtualBox

Changeset 8299 in vbox


Ignore:
Timestamp:
Apr 22, 2008 3:17:50 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
30054
Message:

Updates for disassembling 64 bits instructions

Location:
trunk
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/dis.h

    r8234 r8299  
    6060#define PREFIX_NONE                     0
    6161/** non-default address size. */
    62 #define PREFIX_ADDRSIZE                 1
     62#define PREFIX_ADDRSIZE                 RT_BIT(0)
    6363/** non-default operand size. */
    64 #define PREFIX_OPSIZE                   2
     64#define PREFIX_OPSIZE                   RT_BIT(1)
    6565/** lock prefix. */
    66 #define PREFIX_LOCK                     4
     66#define PREFIX_LOCK                     RT_BIT(2)
    6767/** segment prefix. */
    68 #define PREFIX_SEG                      8
     68#define PREFIX_SEG                      RT_BIT(3)
    6969/** rep(e) prefix (not a prefix, but we'll treat is as one). */
    70 #define PREFIX_REP                      16
     70#define PREFIX_REP                      RT_BIT(4)
    7171/** rep(e) prefix (not a prefix, but we'll treat is as one). */
    72 #define PREFIX_REPNE                    32
     72#define PREFIX_REPNE                    RT_BIT(5)
    7373/** REX prefix (64 bits) */
    74 #define PREFIX_REX                      64
     74#define PREFIX_REX                      RT_BIT(6)
    7575/** @} */
    7676
     
    7878 * @{
    7979 */
    80 #define PREFIX_REX_OP_2_FLAGS(a)        (a - OP_REX)
    81 #define PREFIX_REX_FLAGS                PREFIX_REX_OP_2_FLAGS(OP_REX)
    82 #define PREFIX_REX_FLAGS_B              PREFIX_REX_OP_2_FLAGS(OP_REX_B)
    83 #define PREFIX_REX_FLAGS_X              PREFIX_REX_OP_2_FLAGS(OP_REX_X)
    84 #define PREFIX_REX_FLAGS_XB             PREFIX_REX_OP_2_FLAGS(OP_REX_XB)
    85 #define PREFIX_REX_FLAGS_R              PREFIX_REX_OP_2_FLAGS(OP_REX_R)
    86 #define PREFIX_REX_FLAGS_RB             PREFIX_REX_OP_2_FLAGS(OP_REX_RB)
    87 #define PREFIX_REX_FLAGS_RX             PREFIX_REX_OP_2_FLAGS(OP_REX_RX)
    88 #define PREFIX_REX_FLAGS_RXB            PREFIX_REX_OP_2_FLAGS(OP_REX_RXB)
    89 #define PREFIX_REX_FLAGS_W              PREFIX_REX_OP_2_FLAGS(OP_REX_W)
    90 #define PREFIX_REX_FLAGS_WB             PREFIX_REX_OP_2_FLAGS(OP_REX_WB)
    91 #define PREFIX_REX_FLAGS_WX             PREFIX_REX_OP_2_FLAGS(OP_REX_WX)
    92 #define PREFIX_REX_FLAGS_WXB            PREFIX_REX_OP_2_FLAGS(OP_REX_WXB)
    93 #define PREFIX_REX_FLAGS_WR             PREFIX_REX_OP_2_FLAGS(OP_REX_WR)
    94 #define PREFIX_REX_FLAGS_WRB            PREFIX_REX_OP_2_FLAGS(OP_REX_WRB)
    95 #define PREFIX_REX_FLAGS_WRX            PREFIX_REX_OP_2_FLAGS(OP_REX_WRX)
    96 #define PREFIX_REX_FLAGS_WRXB           PREFIX_REX_OP_2_FLAGS(OP_REX_WRXB)
     80#define PREFIX_REX_OP_2_FLAGS(a)        (a - OP_PARM_REX_START)
     81#define PREFIX_REX_FLAGS                PREFIX_REX_OP_2_FLAGS(OP_PARM_REX)
     82#define PREFIX_REX_FLAGS_B              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_B)
     83#define PREFIX_REX_FLAGS_X              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_X)
     84#define PREFIX_REX_FLAGS_XB             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_XB)
     85#define PREFIX_REX_FLAGS_R              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_R)
     86#define PREFIX_REX_FLAGS_RB             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RB)
     87#define PREFIX_REX_FLAGS_RX             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RX)
     88#define PREFIX_REX_FLAGS_RXB            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RXB)
     89#define PREFIX_REX_FLAGS_W              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_W)
     90#define PREFIX_REX_FLAGS_WB             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WB)
     91#define PREFIX_REX_FLAGS_WX             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WX)
     92#define PREFIX_REX_FLAGS_WXB            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WXB)
     93#define PREFIX_REX_FLAGS_WR             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WR)
     94#define PREFIX_REX_FLAGS_WRB            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRB)
     95#define PREFIX_REX_FLAGS_WRX            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRX)
     96#define PREFIX_REX_FLAGS_WRXB           PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRXB)
    9797/** @} */
    9898
  • trunk/include/VBox/disopcode.h

    r8155 r8299  
    5050#define OP_REPNE        4
    5151#define OP_REPE         5
    52 #define OP_LOCK         6   /* disassembler assumes this is the last prefix byte value!!!! */
    53 #define OP_AND          7
    54 #define OP_OR           8
    55 #define OP_DAA          9
    56 #define OP_SUB          10
    57 #define OP_DAS          11
    58 #define OP_XOR          12
    59 #define OP_AAA          13
    60 #define OP_CMP          14
    61 #define OP_IMM_GRP1     15
    62 #define OP_AAS          16
    63 #define OP_INC          17
    64 #define OP_DEC          18
    65 #define OP_PUSHA        19
    66 #define OP_POPA         20
    67 #define OP_BOUND        21
    68 #define OP_ARPL         22
    69 #define OP_PUSH         23
    70 #define OP_POP          24
    71 #define OP_IMUL         25
    72 #define OP_INSB         26
    73 #define OP_INSWD        27
    74 #define OP_OUTSB        28
    75 #define OP_OUTSWD       29
    76 #define OP_JO           30
    77 #define OP_JNO          31
    78 #define OP_JC           32
    79 #define OP_JNC          33
    80 #define OP_JE           34
    81 #define OP_JNE          35
    82 #define OP_JBE          36
    83 #define OP_JNBE         37
    84 #define OP_JS           38
    85 #define OP_JNS          39
    86 #define OP_JP           40
    87 #define OP_JNP          41
    88 #define OP_JL           42
    89 #define OP_JNL          43
    90 #define OP_JLE          44
    91 #define OP_JNLE         45
    92 #define OP_ADD          46
    93 #define OP_TEST         47
    94 #define OP_XCHG         48
    95 #define OP_MOV          49
    96 #define OP_LEA          50
    97 #define OP_NOP          51
    98 #define OP_CBW          52
    99 #define OP_CWD          53
    100 #define OP_CALL         54
    101 #define OP_WAIT         55
    102 #define OP_PUSHF        56
    103 #define OP_POPF         57
    104 #define OP_SAHF         58
    105 #define OP_LAHF         59
    106 #define OP_MOVSB        60
    107 #define OP_MOVSWD       61
    108 #define OP_CMPSB        62
    109 #define OP_CMPWD        63
    110 #define OP_STOSB        64
    111 #define OP_STOSWD       65
    112 #define OP_LODSB        66
    113 #define OP_LODSWD       67
    114 #define OP_SCASB        68
    115 #define OP_SCASWD       69
    116 #define OP_SHIFT_GRP2   70
    117 #define OP_RETN         71
    118 #define OP_LES          72
    119 #define OP_LDS          73
    120 #define OP_ENTER        74
    121 #define OP_LEAVE        75
    122 #define OP_RETF         76
    123 #define OP_INT3         77
    124 #define OP_INT          78
    125 #define OP_INTO         79
    126 #define OP_IRET         80
    127 #define OP_AAM          81
    128 #define OP_AAD          82
    129 #define OP_XLAT         83
    130 #define OP_ESCF0        84
    131 #define OP_ESCF1        85
    132 #define OP_ESCF2        86
    133 #define OP_ESCF3        87
    134 #define OP_ESCF4        88
    135 #define OP_ESCF5        89
    136 #define OP_ESCF6        90
    137 #define OP_ESCF7        91
    138 #define OP_LOOPNE       92
    139 #define OP_LOOPE        93
    140 #define OP_LOOP         94
    141 #define OP_JECXZ        95
    142 #define OP_IN           96
    143 #define OP_OUT          97
    144 #define OP_JMP          98
    145 #define OP_2B_ESC       99
    146 #define OP_ADC          100
    147 #define OP_SBB          101
    148 #define OP_HLT          102
    149 #define OP_CMC          103
    150 #define OP_UNARY_GRP3   104
    151 #define OP_CLC          105
    152 #define OP_STC          106
    153 #define OP_CLI          107
    154 #define OP_STI          108
    155 #define OP_CLD          109
    156 #define OP_STD          110
    157 #define OP_INC_GRP4     111
    158 #define OP_IND_GRP5     112
    159 #define OP_GRP6         113
    160 #define OP_GRP7         114
    161 #define OP_LAR          115
    162 #define OP_LSL          116
    163 #define OP_SYSCALL      117
    164 #define OP_CLTS         118
    165 #define OP_SYSRET       119
    166 #define OP_INVD         120
    167 #define OP_WBINVD       121
    168 #define OP_ILLUD2       122
    169 #define OP_FEMMS        123
    170 #define OP_3DNOW        124
    171 #define OP_MOVUPS       125
    172 #define OP_MOVLPS       126
    173 #define OP_UNPCKLPS     127
    174 #define OP_MOVHPS       128
    175 #define OP_UNPCKHPS     129
    176 #define OP_PREFETCH_GRP16   130
    177 #define OP_MOV_CR       131
    178 #define OP_MOVAPS       132
    179 #define OP_CVTPI2PS     133
    180 #define OP_MOVNTPS      134
    181 #define OP_CVTTPS2PI    135
    182 #define OP_CVTPS2PI     136
    183 #define OP_UCOMISS      137
    184 #define OP_COMISS       138
    185 #define OP_WRMSR        139
    186 #define OP_RDTSC        140
    187 #define OP_RDMSR        141
    188 #define OP_RPPMC        142
    189 #define OP_SYSENTER     143
    190 #define OP_SYSEXIT      144
    191 #define OP_PAUSE        145
    192 #define OP_CMOVO        146
    193 #define OP_CMOVNO       147
    194 #define OP_CMOVC        148
    195 #define OP_CMOVNC       149
    196 #define OP_CMOVZ        150
    197 #define OP_CMOVNZ       151
    198 #define OP_CMOVBE       152
    199 #define OP_CMOVNBE      153
    200 #define OP_CMOVS        154
    201 #define OP_CMOVNS       155
    202 #define OP_CMOVP        156
    203 #define OP_CMOVNP       157
    204 #define OP_CMOVL        158
    205 #define OP_CMOVNL       159
    206 #define OP_CMOVLE       160
    207 #define OP_CMOVNLE      161
    208 #define OP_MOVMSKPS     162
    209 #define OP_SQRTPS       163
    210 #define OP_RSQRTPS      164
    211 #define OP_RCPPS        165
    212 #define OP_ANDPS        166
    213 #define OP_ANDNPS       167
    214 #define OP_ORPS         168
    215 #define OP_XORPS        169
    216 #define OP_ADDPS        170
    217 #define OP_MULPS        171
    218 #define OP_CVTPS2PD     172
    219 #define OP_CVTDQ2PS     173
    220 #define OP_SUBPS        174
    221 #define OP_MINPS        175
    222 #define OP_DIVPS        176
    223 #define OP_MAXPS        177
    224 #define OP_PUNPCKLBW    178
    225 #define OP_PUNPCKLWD    179
    226 #define OP_PUNPCKLDQ    180
    227 #define OP_PACKSSWB     181
    228 #define OP_PCMPGTB      182
    229 #define OP_PCMPGTW      183
    230 #define OP_PCMPGTD      184
    231 #define OP_PACKUSWB     185
    232 #define OP_PUNPCKHBW    186
    233 #define OP_PUNPCKHWD    187
    234 #define OP_PUNPCKHDQ    188
    235 #define OP_PACKSSDW     189
    236 #define OP_MOVD         190
    237 #define OP_MOVQ         191
    238 #define OP_PSHUFW       192
    239 
    240 
     52#define OP_REX          6
     53#define OP_LOCK         7   /* disassembler assumes this is the last prefix byte value!!!! */
     54#define OP_AND          8
     55#define OP_OR           9
     56#define OP_DAA          10
     57#define OP_SUB          11
     58#define OP_DAS          12
     59#define OP_XOR          13
     60#define OP_AAA          14
     61#define OP_CMP          15
     62#define OP_IMM_GRP1     16
     63#define OP_AAS          17
     64#define OP_INC          18
     65#define OP_DEC          19
     66#define OP_PUSHA        20
     67#define OP_POPA         21
     68#define OP_BOUND        22
     69#define OP_ARPL         23
     70#define OP_PUSH         24
     71#define OP_POP          25
     72#define OP_IMUL         26
     73#define OP_INSB         27
     74#define OP_INSWD        28
     75#define OP_OUTSB        29
     76#define OP_OUTSWD       30
     77#define OP_JO           31
     78#define OP_JNO          32
     79#define OP_JC           33
     80#define OP_JNC          34
     81#define OP_JE           35
     82#define OP_JNE          36
     83#define OP_JBE          37
     84#define OP_JNBE         38
     85#define OP_JS           39
     86#define OP_JNS          40
     87#define OP_JP           41
     88#define OP_JNP          42
     89#define OP_JL           43
     90#define OP_JNL          44
     91#define OP_JLE          45
     92#define OP_JNLE         46
     93#define OP_ADD          47
     94#define OP_TEST         48
     95#define OP_XCHG         49
     96#define OP_MOV          50
     97#define OP_LEA          51
     98#define OP_NOP          52
     99#define OP_CBW          53
     100#define OP_CWD          54
     101#define OP_CALL         55
     102#define OP_WAIT         56
     103#define OP_PUSHF        57
     104#define OP_POPF         58
     105#define OP_SAHF         59
     106#define OP_LAHF         60
     107#define OP_MOVSB        61
     108#define OP_MOVSWD       62
     109#define OP_CMPSB        63
     110#define OP_CMPWD        64
     111#define OP_STOSB        65
     112#define OP_STOSWD       66
     113#define OP_LODSB        67
     114#define OP_LODSWD       68
     115#define OP_SCASB        69
     116#define OP_SCASWD       70
     117#define OP_SHIFT_GRP2   71
     118#define OP_RETN         72
     119#define OP_LES          73
     120#define OP_LDS          74
     121#define OP_ENTER        75
     122#define OP_LEAVE        76
     123#define OP_RETF         77
     124#define OP_INT3         78
     125#define OP_INT          79
     126#define OP_INTO         80
     127#define OP_IRET         81
     128#define OP_AAM          82
     129#define OP_AAD          83
     130#define OP_XLAT         84
     131#define OP_ESCF0        85
     132#define OP_ESCF1        86
     133#define OP_ESCF2        87
     134#define OP_ESCF3        88
     135#define OP_ESCF4        89
     136#define OP_ESCF5        90
     137#define OP_ESCF6        91
     138#define OP_ESCF7        92
     139#define OP_LOOPNE       93
     140#define OP_LOOPE        94
     141#define OP_LOOP         95
     142#define OP_JECXZ        96
     143#define OP_IN           97
     144#define OP_OUT          98
     145#define OP_JMP          99
     146#define OP_2B_ESC       100
     147#define OP_ADC          101
     148#define OP_SBB          102
     149#define OP_HLT          103
     150#define OP_CMC          104
     151#define OP_UNARY_GRP3   105
     152#define OP_CLC          106
     153#define OP_STC          107
     154#define OP_CLI          108
     155#define OP_STI          109
     156#define OP_CLD          110
     157#define OP_STD          111
     158#define OP_INC_GRP4     112
     159#define OP_IND_GRP5     113
     160#define OP_GRP6         114
     161#define OP_GRP7         115
     162#define OP_LAR          116
     163#define OP_LSL          117
     164#define OP_SYSCALL      118
     165#define OP_CLTS         119
     166#define OP_SYSRET       120
     167#define OP_INVD         121
     168#define OP_WBINVD       122
     169#define OP_ILLUD2       123
     170#define OP_FEMMS        124
     171#define OP_3DNOW        125
     172#define OP_MOVUPS       126
     173#define OP_MOVLPS       127
     174#define OP_UNPCKLPS     128
     175#define OP_MOVHPS       129
     176#define OP_UNPCKHPS     130
     177#define OP_PREFETCH_GRP16   131
     178#define OP_MOV_CR       132
     179#define OP_MOVAPS       133
     180#define OP_CVTPI2PS     134
     181#define OP_MOVNTPS      135
     182#define OP_CVTTPS2PI    136
     183#define OP_CVTPS2PI     137
     184#define OP_UCOMISS      138
     185#define OP_COMISS       139
     186#define OP_WRMSR        140
     187#define OP_RDTSC        141
     188#define OP_RDMSR        142
     189#define OP_RPPMC        143
     190#define OP_SYSENTER     144
     191#define OP_SYSEXIT      145
     192#define OP_PAUSE        146
     193#define OP_CMOVO        147
     194#define OP_CMOVNO       148
     195#define OP_CMOVC        149
     196#define OP_CMOVNC       150
     197#define OP_CMOVZ        151
     198#define OP_CMOVNZ       152
     199#define OP_CMOVBE       153
     200#define OP_CMOVNBE      154
     201#define OP_CMOVS        155
     202#define OP_CMOVNS       156
     203#define OP_CMOVP        157
     204#define OP_CMOVNP       158
     205#define OP_CMOVL        159
     206#define OP_CMOVNL       160
     207#define OP_CMOVLE       161
     208#define OP_CMOVNLE      162
     209#define OP_MOVMSKPS     163
     210#define OP_SQRTPS       164
     211#define OP_RSQRTPS      165
     212#define OP_RCPPS        166
     213#define OP_ANDPS        167
     214#define OP_ANDNPS       168
     215#define OP_ORPS         169
     216#define OP_XORPS        170
     217#define OP_ADDPS        171
     218#define OP_MULPS        172
     219#define OP_CVTPS2PD     173
     220#define OP_CVTDQ2PS     174
     221#define OP_SUBPS        175
     222#define OP_MINPS        176
     223#define OP_DIVPS        177
     224#define OP_MAXPS        178
     225#define OP_PUNPCKLBW    179
     226#define OP_PUNPCKLWD    180
     227#define OP_PUNPCKLDQ    181
     228#define OP_PACKSSWB     182
     229#define OP_PCMPGTB      183
     230#define OP_PCMPGTW      184
     231#define OP_PCMPGTD      185
     232#define OP_PACKUSWB     186
     233#define OP_PUNPCKHBW    187
     234#define OP_PUNPCKHWD    188
     235#define OP_PUNPCKHDQ    189
     236#define OP_PACKSSDW     190
     237#define OP_MOVD         191
     238#define OP_MOVQ         192
     239#define OP_PSHUFW       193
    241240
    242241#define OP_PCMPEQB      196
     
    597596#define OP_VMPTRST      659
    598597
    599 
    600 /* 64 bits prefix bytes */
    601 #define OP_REX          0x40
    602 #define OP_REX_B        0x41
    603 #define OP_REX_X        0x42
    604 #define OP_REX_XB       0x43
    605 #define OP_REX_R        0x44
    606 #define OP_REX_RB       0x45
    607 #define OP_REX_RX       0x46
    608 #define OP_REX_RXB      0x47
    609 #define OP_REX_W        0x48
    610 #define OP_REX_WB       0x49
    611 #define OP_REX_WX       0x4A
    612 #define OP_REX_WXB      0x4B
    613 #define OP_REX_WR       0x4C
    614 #define OP_REX_WRB      0x4D
    615 #define OP_REX_WRX      0x4E
    616 #define OP_REX_WRXB     0x4F
     598/* 64 bits instruction */
     599#define OP_MOVSXD       700
    617600
    618601/** @} */
     
    623606 */
    624607/* NOTE: Register order is important for translations!! */
    625 #define OP_PARM_NONE    0
    626 #define OP_PARM_REG_EAX 1
    627 #define OP_PARM_REG_GEN32_START   OP_PARM_REG_EAX
    628 #define OP_PARM_REG_ECX 2
    629 #define OP_PARM_REG_EDX 3
    630 #define OP_PARM_REG_EBX 4
    631 #define OP_PARM_REG_ESP 5
    632 #define OP_PARM_REG_EBP 6
    633 #define OP_PARM_REG_ESI 7
    634 #define OP_PARM_REG_EDI 8
    635 
    636 #define OP_PARM_REG_ES  9
     608#define OP_PARM_NONE            0
     609#define OP_PARM_REG_EAX         1
     610#define OP_PARM_REG_GEN32_START OP_PARM_REG_EAX
     611#define OP_PARM_REG_ECX         2
     612#define OP_PARM_REG_EDX         3
     613#define OP_PARM_REG_EBX         4
     614#define OP_PARM_REG_ESP         5
     615#define OP_PARM_REG_EBP         6
     616#define OP_PARM_REG_ESI         7
     617#define OP_PARM_REG_EDI         8
     618
     619#define OP_PARM_REG_ES          9
    637620#define OP_PARM_REG_SEG_START   OP_PARM_REG_ES
    638 #define OP_PARM_REG_CS  10
    639 #define OP_PARM_REG_SS  11
    640 #define OP_PARM_REG_DS  12
    641 #define OP_PARM_REG_FS  13
    642 #define OP_PARM_REG_GS  14
    643 
    644 #define OP_PARM_REG_AX  15
     621#define OP_PARM_REG_CS          10
     622#define OP_PARM_REG_SS          11
     623#define OP_PARM_REG_DS          12
     624#define OP_PARM_REG_FS          13
     625#define OP_PARM_REG_GS          14
     626
     627#define OP_PARM_REG_AX          15
    645628#define OP_PARM_REG_GEN16_START   OP_PARM_REG_AX
    646 #define OP_PARM_REG_CX  16
    647 #define OP_PARM_REG_DX  17
    648 #define OP_PARM_REG_BX  18
    649 #define OP_PARM_REG_SP  19
    650 #define OP_PARM_REG_BP  20
    651 #define OP_PARM_REG_SI  21
    652 #define OP_PARM_REG_DI  22
    653 
    654 #define OP_PARM_REG_AL  23
    655 #define OP_PARM_REG_GEN8_START   OP_PARM_REG_AL
    656 #define OP_PARM_REG_CL  24
    657 #define OP_PARM_REG_DL  25
    658 #define OP_PARM_REG_BL  26
    659 #define OP_PARM_REG_AH  27
    660 #define OP_PARM_REG_CH  28
    661 #define OP_PARM_REG_DH  29
    662 #define OP_PARM_REG_BH  30
    663 
    664 #define OP_PARM_REGFP_0 31
    665 #define OP_PARM_REG_FP_START   OP_PARM_REGFP_0
    666 #define OP_PARM_REGFP_1 32
    667 #define OP_PARM_REGFP_2 33
    668 #define OP_PARM_REGFP_3 34
    669 #define OP_PARM_REGFP_4 35
    670 #define OP_PARM_REGFP_5 36
    671 #define OP_PARM_REGFP_6 37
    672 #define OP_PARM_REGFP_7 38
    673 
    674 #define OP_PARM_NTA     39
    675 #define OP_PARM_T0      40
    676 #define OP_PARM_T1      41
    677 #define OP_PARM_T2      42
    678 
    679 #define OP_PARM_1       43
    680 
    681 #define OP_PARM_VTYPE(a)    ((int)a & 0xFE0)
    682 #define OP_PARM_VSUBTYPE(a) ((int)a & 0x01F)
    683 
    684 #define OP_PARM_A       0x40
    685 #define OP_PARM_VARIABLE OP_PARM_A
    686 #define OP_PARM_E       0x60
    687 #define OP_PARM_F       0x80
    688 #define OP_PARM_G       0xA0
    689 #define OP_PARM_I       0x100
    690 #define OP_PARM_J       0x120
    691 #define OP_PARM_M       0x140
    692 #define OP_PARM_O       0x160
    693 #define OP_PARM_Q       0x180
    694 #define OP_PARM_R       0x1A0
    695 #define OP_PARM_X       0x200
    696 #define OP_PARM_Y       0x220
     629#define OP_PARM_REG_CX          16
     630#define OP_PARM_REG_DX          17
     631#define OP_PARM_REG_BX          18
     632#define OP_PARM_REG_SP          19
     633#define OP_PARM_REG_BP          20
     634#define OP_PARM_REG_SI          21
     635#define OP_PARM_REG_DI          22
     636
     637#define OP_PARM_REG_AL          23
     638#define OP_PARM_REG_GEN8_START  OP_PARM_REG_AL
     639#define OP_PARM_REG_CL          24
     640#define OP_PARM_REG_DL          25
     641#define OP_PARM_REG_BL          26
     642#define OP_PARM_REG_AH          27
     643#define OP_PARM_REG_CH          28
     644#define OP_PARM_REG_DH          29
     645#define OP_PARM_REG_BH          30
     646
     647#define OP_PARM_REGFP_0         31
     648#define OP_PARM_REG_FP_START    OP_PARM_REGFP_0
     649#define OP_PARM_REGFP_1         32
     650#define OP_PARM_REGFP_2         33
     651#define OP_PARM_REGFP_3         34
     652#define OP_PARM_REGFP_4         35
     653#define OP_PARM_REGFP_5         36
     654#define OP_PARM_REGFP_6         37
     655#define OP_PARM_REGFP_7         38
     656
     657#define OP_PARM_NTA             39
     658#define OP_PARM_T0              40
     659#define OP_PARM_T1              41
     660#define OP_PARM_T2              42
     661
     662#define OP_PARM_1               43
     663
     664#define OP_PARM_REX             50
     665#define OP_PARM_REX_START       OP_PARM_REX
     666#define OP_PARM_REX_B           51
     667#define OP_PARM_REX_X           52
     668#define OP_PARM_REX_XB          53
     669#define OP_PARM_REX_R           54
     670#define OP_PARM_REX_RB          55
     671#define OP_PARM_REX_RX          56
     672#define OP_PARM_REX_RXB         57
     673#define OP_PARM_REX_W           58
     674#define OP_PARM_REX_WB          59
     675#define OP_PARM_REX_WX          60
     676#define OP_PARM_REX_WXB         61
     677#define OP_PARM_REX_WR          62
     678#define OP_PARM_REX_WRB         63
     679#define OP_PARM_REX_WRX         64
     680#define OP_PARM_REX_WRXB        65
     681
     682#define OP_PARM_REG_RAX         100
     683#define OP_PARM_REG_GEN64_START OP_PARM_REG_RAX
     684#define OP_PARM_REG_RCX         101
     685#define OP_PARM_REG_RDX         102
     686#define OP_PARM_REG_RBX         103
     687#define OP_PARM_REG_RSP         104
     688#define OP_PARM_REG_RBP         105
     689#define OP_PARM_REG_RSI         106
     690#define OP_PARM_REG_RDI         107
     691#define OP_PARM_REG_R8          108
     692#define OP_PARM_REG_R9          109
     693#define OP_PARM_REG_R10         110
     694#define OP_PARM_REG_R11         111
     695#define OP_PARM_REG_R12         112
     696#define OP_PARM_REG_R13         113
     697#define OP_PARM_REG_R14         114
     698#define OP_PARM_REG_R15         115
     699
     700
     701#define OP_PARM_VTYPE(a)        ((int)a & 0xFE0)
     702#define OP_PARM_VSUBTYPE(a)     ((int)a & 0x01F)
     703
     704#define OP_PARM_A               0x100
     705#define OP_PARM_VARIABLE        OP_PARM_A
     706#define OP_PARM_E               0x120
     707#define OP_PARM_F               0x140
     708#define OP_PARM_G               0x160
     709#define OP_PARM_I               0x180
     710#define OP_PARM_J               0x1A0
     711#define OP_PARM_M               0x1C0
     712#define OP_PARM_O               0x1E0
     713#define OP_PARM_Q               0x200
     714#define OP_PARM_R               0x220
     715#define OP_PARM_X               0x240
     716#define OP_PARM_Y               0x260
    697717
    698718/* Grouped rare parameters for optimization purposes */
    699 #define IS_OP_PARM_RARE(a)   ((a & 0xF00) == 0x300)
    700 #define OP_PARM_C       0x300 /* control register */
    701 #define OP_PARM_D       0x320 /* debug register */
    702 #define OP_PARM_S       0x340 /* segment register */
    703 #define OP_PARM_T       0x360 /* test register */
    704 #define OP_PARM_P       0x380 /* mmx register */
    705 #define OP_PARM_W       0x3A0 /* xmm register */
    706 #define OP_PARM_V       0x3C0
    707 
    708 #define OP_PARM_NONE    0
    709 #define OP_PARM_a       0x1
    710 #define OP_PARM_b       0x2
    711 #define OP_PARM_d       0x3
    712 #define OP_PARM_dq      0x4
    713 #define OP_PARM_p       0x5
    714 #define OP_PARM_pd      0x6
    715 #define OP_PARM_pi      0x7
    716 #define OP_PARM_ps      0x8
    717 #define OP_PARM_pq      0x9
    718 #define OP_PARM_q       0xA
    719 #define OP_PARM_s       0xB
    720 #define OP_PARM_sd      0xC
    721 #define OP_PARM_ss      0xD
    722 #define OP_PARM_v       0xE
    723 #define OP_PARM_w       0xF
    724 #define OP_PARM_z       0x10
    725 
    726 
    727 #define OP_PARM_Ap      (OP_PARM_A+OP_PARM_p)
    728 #define OP_PARM_Cd      (OP_PARM_C+OP_PARM_d)
    729 #define OP_PARM_Dd      (OP_PARM_D+OP_PARM_d)
    730 #define OP_PARM_Eb      (OP_PARM_E+OP_PARM_b)
    731 #define OP_PARM_Ed      (OP_PARM_E+OP_PARM_d)
    732 #define OP_PARM_Ep      (OP_PARM_E+OP_PARM_p)
    733 #define OP_PARM_Ev      (OP_PARM_E+OP_PARM_v)
    734 #define OP_PARM_Ew      (OP_PARM_E+OP_PARM_w)
    735 #define OP_PARM_Fv      (OP_PARM_F+OP_PARM_v)
    736 #define OP_PARM_Gb      (OP_PARM_G+OP_PARM_b)
    737 #define OP_PARM_Gd      (OP_PARM_G+OP_PARM_d)
    738 #define OP_PARM_Gv      (OP_PARM_G+OP_PARM_v)
    739 #define OP_PARM_Gw      (OP_PARM_G+OP_PARM_w)
    740 #define OP_PARM_Ib      (OP_PARM_I+OP_PARM_b)
    741 #define OP_PARM_Id      (OP_PARM_I+OP_PARM_d)
    742 #define OP_PARM_Iq      (OP_PARM_I+OP_PARM_q)
    743 #define OP_PARM_Iw      (OP_PARM_I+OP_PARM_w)
    744 #define OP_PARM_Iv      (OP_PARM_I+OP_PARM_v)
    745 #define OP_PARM_Iz      (OP_PARM_I+OP_PARM_z)
    746 #define OP_PARM_Jb      (OP_PARM_J+OP_PARM_b)
    747 #define OP_PARM_Jv      (OP_PARM_J+OP_PARM_v)
    748 #define OP_PARM_Ma      (OP_PARM_M+OP_PARM_a)
    749 #define OP_PARM_Mb      (OP_PARM_M+OP_PARM_b)
    750 #define OP_PARM_Mw      (OP_PARM_M+OP_PARM_w)
    751 #define OP_PARM_Md      (OP_PARM_M+OP_PARM_d)
    752 #define OP_PARM_Mp      (OP_PARM_M+OP_PARM_p)
    753 #define OP_PARM_Mq      (OP_PARM_M+OP_PARM_q)
    754 #define OP_PARM_Ms      (OP_PARM_M+OP_PARM_s)
    755 #define OP_PARM_Ob      (OP_PARM_O+OP_PARM_b)
    756 #define OP_PARM_Ov      (OP_PARM_O+OP_PARM_v)
    757 #define OP_PARM_Pq      (OP_PARM_P+OP_PARM_q)
    758 #define OP_PARM_Pd      (OP_PARM_P+OP_PARM_d)
    759 #define OP_PARM_Qd      (OP_PARM_Q+OP_PARM_d)
    760 #define OP_PARM_Qq      (OP_PARM_Q+OP_PARM_q)
    761 #define OP_PARM_Rd      (OP_PARM_R+OP_PARM_d)
    762 #define OP_PARM_Rw      (OP_PARM_R+OP_PARM_w)
    763 #define OP_PARM_Sw      (OP_PARM_S+OP_PARM_w)
    764 #define OP_PARM_Td      (OP_PARM_T+OP_PARM_d)
    765 #define OP_PARM_Vq      (OP_PARM_V+OP_PARM_q)
    766 #define OP_PARM_Wq      (OP_PARM_W+OP_PARM_q)
    767 #define OP_PARM_Ws      (OP_PARM_W+OP_PARM_s)
    768 #define OP_PARM_Xb      (OP_PARM_X+OP_PARM_b)
    769 #define OP_PARM_Xv      (OP_PARM_X+OP_PARM_v)
    770 #define OP_PARM_Yb      (OP_PARM_Y+OP_PARM_b)
    771 #define OP_PARM_Yv      (OP_PARM_Y+OP_PARM_v)
    772 
    773 
    774 #define OP_PARM_Vps     (OP_PARM_V+OP_PARM_ps)
    775 #define OP_PARM_Vss     (OP_PARM_V+OP_PARM_ss)
    776 #define OP_PARM_Vpd     (OP_PARM_V+OP_PARM_pd)
    777 #define OP_PARM_Vdq     (OP_PARM_V+OP_PARM_dq)
    778 #define OP_PARM_Wps     (OP_PARM_W+OP_PARM_ps)
    779 #define OP_PARM_Wpd     (OP_PARM_W+OP_PARM_pd)
    780 #define OP_PARM_Wss     (OP_PARM_W+OP_PARM_ss)
    781 #define OP_PARM_Wdq     (OP_PARM_W+OP_PARM_dq)
    782 #define OP_PARM_Ppi     (OP_PARM_P+OP_PARM_pi)
    783 #define OP_PARM_Qpi     (OP_PARM_Q+OP_PARM_pi)
    784 #define OP_PARM_Qdq     (OP_PARM_Q+OP_PARM_dq)
    785 #define OP_PARM_Vsd     (OP_PARM_V+OP_PARM_sd)
    786 #define OP_PARM_Wsd     (OP_PARM_W+OP_PARM_sd)
    787 #define OP_PARM_Vpq     (OP_PARM_V+OP_PARM_pq)
    788 #define OP_PARM_Pdq     (OP_PARM_P+OP_PARM_dq)
     719#define IS_OP_PARM_RARE(a)      ((a & 0xF00) == 0x300)
     720#define OP_PARM_C               0x300       /* control register */
     721#define OP_PARM_D               0x320       /* debug register */
     722#define OP_PARM_S               0x340       /* segment register */
     723#define OP_PARM_T               0x360       /* test register */
     724#define OP_PARM_P               0x380       /* mmx register */
     725#define OP_PARM_W               0x3A0       /* xmm register */
     726#define OP_PARM_V               0x3C0
     727
     728#define OP_PARM_NONE            0
     729#define OP_PARM_a               0x1
     730#define OP_PARM_b               0x2
     731#define OP_PARM_d               0x3
     732#define OP_PARM_dq              0x4
     733#define OP_PARM_p               0x5
     734#define OP_PARM_pd              0x6
     735#define OP_PARM_pi              0x7
     736#define OP_PARM_ps              0x8
     737#define OP_PARM_pq              0x9
     738#define OP_PARM_q               0xA
     739#define OP_PARM_s               0xB
     740#define OP_PARM_sd              0xC
     741#define OP_PARM_ss              0xD
     742#define OP_PARM_v               0xE
     743#define OP_PARM_w               0xF
     744#define OP_PARM_z               0x10
     745
     746
     747#define OP_PARM_Ap              (OP_PARM_A+OP_PARM_p)
     748#define OP_PARM_Cd              (OP_PARM_C+OP_PARM_d)
     749#define OP_PARM_Dd              (OP_PARM_D+OP_PARM_d)
     750#define OP_PARM_Eb              (OP_PARM_E+OP_PARM_b)
     751#define OP_PARM_Ed              (OP_PARM_E+OP_PARM_d)
     752#define OP_PARM_Ep              (OP_PARM_E+OP_PARM_p)
     753#define OP_PARM_Ev              (OP_PARM_E+OP_PARM_v)
     754#define OP_PARM_Ew              (OP_PARM_E+OP_PARM_w)
     755#define OP_PARM_Fv              (OP_PARM_F+OP_PARM_v)
     756#define OP_PARM_Gb              (OP_PARM_G+OP_PARM_b)
     757#define OP_PARM_Gd              (OP_PARM_G+OP_PARM_d)
     758#define OP_PARM_Gv              (OP_PARM_G+OP_PARM_v)
     759#define OP_PARM_Gw              (OP_PARM_G+OP_PARM_w)
     760#define OP_PARM_Ib              (OP_PARM_I+OP_PARM_b)
     761#define OP_PARM_Id              (OP_PARM_I+OP_PARM_d)
     762#define OP_PARM_Iq              (OP_PARM_I+OP_PARM_q)
     763#define OP_PARM_Iw              (OP_PARM_I+OP_PARM_w)
     764#define OP_PARM_Iv              (OP_PARM_I+OP_PARM_v)
     765#define OP_PARM_Iz              (OP_PARM_I+OP_PARM_z)
     766#define OP_PARM_Jb              (OP_PARM_J+OP_PARM_b)
     767#define OP_PARM_Jv              (OP_PARM_J+OP_PARM_v)
     768#define OP_PARM_Ma              (OP_PARM_M+OP_PARM_a)
     769#define OP_PARM_Mb              (OP_PARM_M+OP_PARM_b)
     770#define OP_PARM_Mw              (OP_PARM_M+OP_PARM_w)
     771#define OP_PARM_Md              (OP_PARM_M+OP_PARM_d)
     772#define OP_PARM_Mp              (OP_PARM_M+OP_PARM_p)
     773#define OP_PARM_Mq              (OP_PARM_M+OP_PARM_q)
     774#define OP_PARM_Ms              (OP_PARM_M+OP_PARM_s)
     775#define OP_PARM_Ob              (OP_PARM_O+OP_PARM_b)
     776#define OP_PARM_Ov              (OP_PARM_O+OP_PARM_v)
     777#define OP_PARM_Pq              (OP_PARM_P+OP_PARM_q)
     778#define OP_PARM_Pd              (OP_PARM_P+OP_PARM_d)
     779#define OP_PARM_Qd              (OP_PARM_Q+OP_PARM_d)
     780#define OP_PARM_Qq              (OP_PARM_Q+OP_PARM_q)
     781#define OP_PARM_Rd              (OP_PARM_R+OP_PARM_d)
     782#define OP_PARM_Rw              (OP_PARM_R+OP_PARM_w)
     783#define OP_PARM_Sw              (OP_PARM_S+OP_PARM_w)
     784#define OP_PARM_Td              (OP_PARM_T+OP_PARM_d)
     785#define OP_PARM_Vq              (OP_PARM_V+OP_PARM_q)
     786#define OP_PARM_Wq              (OP_PARM_W+OP_PARM_q)
     787#define OP_PARM_Ws              (OP_PARM_W+OP_PARM_s)
     788#define OP_PARM_Xb              (OP_PARM_X+OP_PARM_b)
     789#define OP_PARM_Xv              (OP_PARM_X+OP_PARM_v)
     790#define OP_PARM_Yb              (OP_PARM_Y+OP_PARM_b)
     791#define OP_PARM_Yv              (OP_PARM_Y+OP_PARM_v)
     792
     793#define OP_PARM_Vps             (OP_PARM_V+OP_PARM_ps)
     794#define OP_PARM_Vss             (OP_PARM_V+OP_PARM_ss)
     795#define OP_PARM_Vpd             (OP_PARM_V+OP_PARM_pd)
     796#define OP_PARM_Vdq             (OP_PARM_V+OP_PARM_dq)
     797#define OP_PARM_Wps             (OP_PARM_W+OP_PARM_ps)
     798#define OP_PARM_Wpd             (OP_PARM_W+OP_PARM_pd)
     799#define OP_PARM_Wss             (OP_PARM_W+OP_PARM_ss)
     800#define OP_PARM_Wdq             (OP_PARM_W+OP_PARM_dq)
     801#define OP_PARM_Ppi             (OP_PARM_P+OP_PARM_pi)
     802#define OP_PARM_Qpi             (OP_PARM_Q+OP_PARM_pi)
     803#define OP_PARM_Qdq             (OP_PARM_Q+OP_PARM_dq)
     804#define OP_PARM_Vsd             (OP_PARM_V+OP_PARM_sd)
     805#define OP_PARM_Wsd             (OP_PARM_W+OP_PARM_sd)
     806#define OP_PARM_Vpq             (OP_PARM_V+OP_PARM_pq)
     807#define OP_PARM_Pdq             (OP_PARM_P+OP_PARM_dq)
    789808
    790809/** @} */
  • trunk/src/VBox/Disassembler/Disasm.cpp

    r8155 r8299  
    219219                    prefixbytes += sizeof(uint8_t);
    220220                    continue;   //fetch the next byte
     221
     222                case OP_REX:
     223                    Assert(pCpu->mode == CPUMODE_64BIT);
     224                    /* REX prefix byte */
     225                    pCpu->prefix    |= PREFIX_REX;
     226                    pCpu->prefix_rex = PREFIX_REX_OP_2_FLAGS(opcode);
     227                    break;
    221228                }
    222229            }
     
    229236            pCpu->opaddr = pu8Instruction + idx + u32EipOffset - prefixbytes;
    230237
    231             inc = ParseInstruction(pu8Instruction + i, &g_aOneByteMapX86[pCpu->opcode], pCpu);
     238            if (pCpu->mode == CPUMODE_64BIT)
     239                inc = ParseInstruction(pu8Instruction + i, &g_aOneByteMapX64[pCpu->opcode], pCpu);
     240            else
     241                inc = ParseInstruction(pu8Instruction + i, &g_aOneByteMapX86[pCpu->opcode], pCpu);
    232242
    233243            pCpu->opsize = prefixbytes + inc + sizeof(uint8_t);
  • trunk/src/VBox/Disassembler/DisasmCore.cpp

    r8234 r8299  
    258258     * Parse byte by byte.
    259259     */
    260     unsigned      iByte          = 0;
     260    unsigned  iByte = 0;
     261    unsigned  cbInc;
    261262
    262263    while(1)
     
    318319                continue;   //fetch the next byte
    319320
    320             default:
    321                 if (    pCpu->mode == CPUMODE_64BIT
    322                     &&  opcode >= OP_REX
    323                     &&  opcode <= OP_REX_WRXB)
    324                 {
    325                     /* REX prefix byte */
    326                     pCpu->prefix    |= PREFIX_REX;
    327                     pCpu->prefix_rex = PREFIX_REX_OP_2_FLAGS(opcode);
    328                 }
     321            case OP_REX:
     322                Assert(pCpu->mode == CPUMODE_64BIT);
     323                /* REX prefix byte */
     324                pCpu->prefix    |= PREFIX_REX;
     325                pCpu->prefix_rex = PREFIX_REX_OP_2_FLAGS(opcode);
    329326                break;
    330327            }
     
    337334        pCpu->opcode = codebyte;
    338335
    339         int cbInc = ParseInstruction(InstructionAddr + iByte, &g_aOneByteMapX86[pCpu->opcode], pCpu);
     336        if (pCpu->mode == CPUMODE_64BIT)
     337            cbInc = ParseInstruction(InstructionAddr + iByte, &g_aOneByteMapX64[pCpu->opcode], pCpu);
     338        else
     339            cbInc = ParseInstruction(InstructionAddr + iByte, &g_aOneByteMapX86[pCpu->opcode], pCpu);
    340340
    341341        iByte += cbInc;
  • trunk/src/VBox/Disassembler/DisasmTables.cpp

    r8155 r8299  
    5454//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    5555
    56 char SZINVALID_OPCODE[] = "Invalid Opcode";
     56static char SZINVALID_OPCODE[] = "Invalid Opcode";
    5757
    5858#define INVALID_OPCODE  \
     
    309309    OP("les %Gv,%Mp",        IDX_ParseModRM,     IDX_UseModRM,      0,          OP_LES,         OP_PARM_Gv,      OP_PARM_Mp,     OP_PARM_NONE,   OPTYPE_HARMLESS | OPTYPE_INVALID_64),
    310310    OP("lds %Gv,%Mp",        IDX_ParseModRM,     IDX_UseModRM,      0,          OP_LDS,         OP_PARM_Gv,      OP_PARM_Mp,     OP_PARM_NONE,   OPTYPE_HARMLESS | OPTYPE_RRM_DANGEROUS | OPTYPE_INVALID_64),
     311    /* @todo these two are groups */
    311312    OP("mov %Eb,%Ib",        IDX_ParseModRM,     IDX_ParseImmByte,  0,          OP_MOV,         OP_PARM_Eb,      OP_PARM_Ib,     OP_PARM_NONE,   OPTYPE_HARMLESS),
    312313    OP("mov %Ev,%Iv",        IDX_ParseModRM,     IDX_ParseImmV,     0,          OP_MOV,         OP_PARM_Ev,      OP_PARM_Iv,     OP_PARM_NONE,   OPTYPE_HARMLESS),
     
    388389    OP("lsl %Gv,%Ew",        IDX_ParseModRM,    IDX_UseModRM,   0,          OP_LSL,             OP_PARM_Gv,         OP_PARM_Ew,     OP_PARM_NONE,   OPTYPE_DANGEROUS | OPTYPE_PRIVILEGED_NOTRAP),
    389390    INVALID_OPCODE,
    390     OP("syscall",            0,                 0,              0,          OP_SYSCALL,         OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW),
     391    OP("syscall",            0,                 0,              0,          OP_SYSCALL,         OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW | OPTYPE_ONLY_64),
    391392    OP("clts",               0,                 0,              0,          OP_CLTS,            OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_PRIVILEGED),
    392     OP("sysret",             0,                 0,              0,          OP_SYSRET,          OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW | OPTYPE_UNCOND_CONTROLFLOW),
     393    OP("sysret",             0,                 0,              0,          OP_SYSRET,          OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW | OPTYPE_UNCOND_CONTROLFLOW | OPTYPE_ONLY_64),
    393394    OP("invd",               0,                 0,              0,          OP_INVD,            OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_PRIVILEGED),
    394395    OP("wbinvd",             0,                 0,              0,          OP_WBINVD,          OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_PRIVILEGED),
     
    534535
    535536    /* 8 */
    536     OP("jo %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JO,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    537     OP("jno %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNO,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    538     OP("jc %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JC,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    539     OP("jnc %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNC,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    540     OP("je %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JE,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    541     OP("jne %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNE,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    542     OP("jbe %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JBE,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    543     OP("jnbe %Jv",           IDX_ParseImmVRel,   0,          0,          OP_JNBE,    OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    544     OP("js %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JS,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    545     OP("jns %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNS,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    546     OP("jp %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JP,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    547     OP("jnp %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNP,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    548     OP("jl %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JL,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    549     OP("jnl %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNL,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    550     OP("jle %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JLE,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
    551     OP("jnle %Jv",           IDX_ParseImmVRel,   0,          0,          OP_JNLE,    OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW),
     537    OP("jo %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JO,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     538    OP("jno %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNO,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     539    OP("jc %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JC,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     540    OP("jnc %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNC,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     541    OP("je %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JE,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     542    OP("jne %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNE,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     543    OP("jbe %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JBE,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     544    OP("jnbe %Jv",           IDX_ParseImmVRel,   0,          0,          OP_JNBE,    OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     545    OP("js %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JS,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     546    OP("jns %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNS,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     547    OP("jp %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JP,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     548    OP("jnp %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNP,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     549    OP("jl %Jv",             IDX_ParseImmVRel,   0,          0,          OP_JL,      OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     550    OP("jnl %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JNL,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     551    OP("jle %Jv",            IDX_ParseImmVRel,   0,          0,          OP_JLE,     OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
     552    OP("jnle %Jv",           IDX_ParseImmVRel,   0,          0,          OP_JNLE,    OP_PARM_Jv,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW|OPTYPE_RELATIVE_CONTROLFLOW|OPTYPE_COND_CONTROLFLOW|OPTYPE_FORCED_64_OP_SIZE),
    552553
    553554    /* 9 */
     
    570571
    571572    /* a */
    572     OP("push fs",            IDX_ParseFixedReg,  0,          0,          OP_PUSH,    OP_PARM_REG_FS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    573     OP("pop fs",             IDX_ParseFixedReg,  0,          0,          OP_POP,     OP_PARM_REG_FS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    574     OP("cpuid",              0,                  0,          0,          OP_CPUID,   OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_POTENTIALLY_DANGEROUS),
     573    OP("push fs",            IDX_ParseFixedReg,  0,              0,          OP_PUSH,    OP_PARM_REG_FS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS | OPTYPE_DEFAULT_64_OP_SIZE),
     574    OP("pop fs",             IDX_ParseFixedReg,  0,              0,          OP_POP,     OP_PARM_REG_FS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS | OPTYPE_DEFAULT_64_OP_SIZE),
     575    OP("cpuid",              0,                  0,              0,          OP_CPUID,   OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_POTENTIALLY_DANGEROUS),
    575576    OP("bt %Ev,%Gv",         IDX_ParseModRM,     IDX_UseModRM,   0,          OP_BT,      OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_NONE,   OPTYPE_HARMLESS),
    576577    OP("shld %Ev,%Gv,%Ib",   IDX_ParseModRM,     IDX_UseModRM,   IDX_ParseImmByte, OP_SHLD,  OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_Ib,     OPTYPE_HARMLESS),
    577     OP("shld %Ev,%Gv,CL",    IDX_ParseModRM,     IDX_UseModRM,   0,      OP_SHLD,  OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_Ib,     OPTYPE_HARMLESS),
    578     INVALID_OPCODE,
    579     INVALID_OPCODE,
    580     OP("push gs",            IDX_ParseFixedReg,  0,          0,          OP_PUSH,    OP_PARM_REG_GS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    581     OP("pop gs",             IDX_ParseFixedReg,  0,          0,          OP_POP,     OP_PARM_REG_GS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    582     OP("rsm",                0,              0,          0,          OP_RSM,     OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
     578    OP("shld %Ev,%Gv,CL",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_SHLD,  OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_Ib,     OPTYPE_HARMLESS),
     579    INVALID_OPCODE,
     580    INVALID_OPCODE,
     581    OP("push gs",            IDX_ParseFixedReg,  0,              0,          OP_PUSH,    OP_PARM_REG_GS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS | OPTYPE_DEFAULT_64_OP_SIZE),
     582    OP("pop gs",             IDX_ParseFixedReg,  0,              0,          OP_POP,     OP_PARM_REG_GS,     OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS | OPTYPE_DEFAULT_64_OP_SIZE),
     583    OP("rsm",                0,                  0,              0,          OP_RSM,     OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    583584    OP("bts %Ev,%Gv",        IDX_ParseModRM,     IDX_UseModRM,   0,          OP_BTS,     OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_NONE,   OPTYPE_HARMLESS),
    584585    OP("shrd %Ev,%Gv,%Ib",   IDX_ParseModRM,     IDX_UseModRM,   IDX_ParseImmByte,OP_SHRD,   OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_Ib,     OPTYPE_HARMLESS),
    585586    OP("shrd %Ev,%Gv,CL",    IDX_ParseModRM,     IDX_UseModRM,   IDX_ParseFixedReg,OP_SHRD,  OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_REG_CL, OPTYPE_HARMLESS),
    586     OP("Grp15",              IDX_ParseGrp15,     0,          0,          OP_GRP15,   OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
     587    OP("Grp15",              IDX_ParseGrp15,     0,              0,          OP_GRP15,   OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    587588    OP("imul %Gv,%Ev",       IDX_ParseModRM,     IDX_UseModRM,   0,          OP_IMUL,    OP_PARM_Gv,         OP_PARM_Ev,     OP_PARM_NONE,   OPTYPE_HARMLESS),
    588589
     
    597598    OP("movzx %Gv,%Ew",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_MOVZX,   OP_PARM_Gv,         OP_PARM_Ew,     OP_PARM_NONE,   OPTYPE_HARMLESS),
    598599    INVALID_OPCODE,
    599     OP("Grp10 Invalid Op",   IDX_ParseGrp10,     0,          0,          OP_GRP10_INV,OP_PARM_NONE,      OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    600     OP("Grp8",               IDX_ParseGrp8,      0,          0,          OP_GRP8,    OP_PARM_Ev,         OP_PARM_Ib,     OP_PARM_NONE,   OPTYPE_HARMLESS),
     600    OP("Grp10 Invalid Op",   IDX_ParseGrp10,     0,              0,          OP_GRP10_INV,OP_PARM_NONE,      OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
     601    OP("Grp8",               IDX_ParseGrp8,      0,              0,          OP_GRP8,    OP_PARM_Ev,         OP_PARM_Ib,     OP_PARM_NONE,   OPTYPE_HARMLESS),
    601602    OP("btc %Ev,%Gv",        IDX_ParseModRM,     IDX_UseModRM,   0,          OP_BTC,     OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_NONE,   OPTYPE_HARMLESS),
    602603    OP("bsf %Ev,%Gv",        IDX_ParseModRM,     IDX_UseModRM,   0,          OP_BSF,     OP_PARM_Ev,         OP_PARM_Gv,     OP_PARM_NONE,   OPTYPE_HARMLESS),
     
    21812182    OP("inc %Ev",            IDX_ParseModRM,     0,          0,          OP_INC,     OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    21822183    OP("dec %Ev",            IDX_ParseModRM,     0,          0,          OP_DEC,     OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
    2183     OP("call %Ev",           IDX_ParseModRM,     0,          0,          OP_CALL,    OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW),
     2184    OP("call %Ev",           IDX_ParseModRM,     0,          0,          OP_CALL,    OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW | OPTYPE_FORCED_64_OP_SIZE),
    21842185    OP("call %Ep",           IDX_ParseModRM,     0,          0,          OP_CALL,    OP_PARM_Ep,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW),
    2185     OP("jmp %Ev",            IDX_ParseModRM,     0,          0,          OP_JMP,     OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW | OPTYPE_UNCOND_CONTROLFLOW),
     2186    OP("jmp %Ev",            IDX_ParseModRM,     0,          0,          OP_JMP,     OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW | OPTYPE_UNCOND_CONTROLFLOW | OPTYPE_FORCED_64_OP_SIZE),
    21862187    OP("jmp %Ep",            IDX_ParseModRM,     0,          0,          OP_JMP,     OP_PARM_Ep,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_CONTROLFLOW | OPTYPE_UNCOND_CONTROLFLOW),
    2187     OP("push %Ev",           IDX_ParseModRM,     0,          0,          OP_PUSH,    OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS),
     2188    OP("push %Ev",           IDX_ParseModRM,     0,          0,          OP_PUSH,    OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   OPTYPE_HARMLESS | OPTYPE_DEFAULT_64_OP_SIZE),
    21882189    INVALID_OPCODE,
    21892190};
  • trunk/src/VBox/Disassembler/DisasmTables.h

    r8155 r8299  
    2727
    2828extern const OPCODE g_aOneByteMapX86[256];
     29extern const OPCODE g_aOneByteMapX64[256];
    2930extern const OPCODE g_aTwoByteMapX86[256];
    3031
  • trunk/src/VBox/Disassembler/Makefile.kmk

    r8155 r8299  
    3535 endif
    3636endif
    37 DisasmR3_SOURCES        = Disasm.cpp DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp
     37DisasmR3_SOURCES        = Disasm.cpp DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp DisasmTablesX64.cpp
    3838DisasmR3_DEFS           = IN_DIS_R3
    3939
    4040DisasmCoreR3_TEMPLATE   = VBOXR3
    41 DisasmCoreR3_SOURCES    = DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp
     41DisasmCoreR3_SOURCES    = DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp DisasmTablesX64.cpp
    4242DisasmCoreR3_DEFS       = IN_DIS_R3 DIS_CORE_ONLY
    4343
    4444DisasmGC_TEMPLATE       = VBOXGC
    45 DisasmGC_SOURCES        = DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp
     45DisasmGC_SOURCES        = DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp DisasmTablesX64.cpp
    4646DisasmGC_DEFS           = IN_DIS_GC IN_RT_GC DIS_CORE_ONLY
    4747
    4848DisasmR0_TEMPLATE       = VBOXR0
    49 DisasmR0_SOURCES        = DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp
     49DisasmR0_SOURCES        = DisasmCore.cpp DisasmReg.cpp DisasmTables.cpp DisasmTablesX64.cpp
    5050DisasmR0_DEFS           = IN_DIS_R0 IN_RT_R0 DIS_CORE_ONLY
    5151
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette