Changeset 41747 in vbox
- Timestamp:
- Jun 15, 2012 2:53:23 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
include/VBox/dis.h (modified) (1 diff)
-
src/VBox/Disassembler/DisasmCore.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/dis.h
r41746 r41747 304 304 DISSELREG_FS = 4, 305 305 DISSELREG_GS = 5, 306 /** End of the valid register index values. */ 307 DISSELREG_END, 306 308 /** The usual 32-bit paranoia. */ 307 309 DIS_SEGREG_32BIT_HACK = 0x7fffffff -
trunk/src/VBox/Disassembler/DisasmCore.cpp
r41744 r41747 578 578 } 579 579 //***************************************************************************** 580 // SIB byte: ( 32 bits mode only)580 // SIB byte: (not 16-bit mode) 581 581 // 7 - 6 5 - 3 2-0 582 582 // Scale Index Base 583 583 //***************************************************************************** 584 static const char *szSIBBaseReg[8] = {"EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", "EDI"};585 static const char *szSIBIndexReg[8] = {"EAX", "ECX", "EDX", "EBX", NULL, "EBP", "ESI", "EDI"};586 static const char *szSIBBaseReg64[16] = {"RAX", "RCX", "RDX", "RBX", "RSP", "RBP", "RSI", "RDI", "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15"};587 static const char *szSIBIndexReg64[16]= {"RAX", "RCX", "RDX", "RBX", NULL, "RBP", "RSI", "RDI", "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15"};588 #if !defined(DIS_CORE_ONLY) && defined(LOG_ENABLED) || defined(_MSC_VER)589 static const char *szSIBScale[4] = {"", "*2", "*4", "*8"};590 #endif591 //*****************************************************************************592 584 void UseSIB(RTUINTPTR uCodePtr, PCDISOPCODE pOp, PDISOPPARAM pParam, PDISCPUSTATE pCpu) 593 585 { 594 586 unsigned regtype; 595 const char **ppszSIBIndexReg;596 const char **ppszSIBBaseReg;597 587 NOREF(uCodePtr); NOREF(pOp); 598 588 … … 602 592 603 593 if (pCpu->uAddrMode == DISCPUMODE_32BIT) 604 { 605 ppszSIBIndexReg = szSIBIndexReg; 606 ppszSIBBaseReg = szSIBBaseReg; 607 regtype = DISUSE_REG_GEN32; 608 } 609 else 610 { 611 ppszSIBIndexReg = szSIBIndexReg64; 612 ppszSIBBaseReg = szSIBBaseReg64; 613 regtype = DISUSE_REG_GEN64; 614 } 615 616 if (ppszSIBIndexReg[index]) 594 regtype = DISUSE_REG_GEN32; 595 else 596 regtype = DISUSE_REG_GEN64; 597 598 if (index != 4) 617 599 { 618 600 pParam->fUse |= DISUSE_INDEX | regtype; … … 2285 2267 } 2286 2268 //***************************************************************************** 2287 #if !defined(DIS_CORE_ONLY) && defined(LOG_ENABLED)2288 static const char *szModRMReg8[] = {"AL", "CL", "DL", "BL", "AH", "CH", "DH", "BH", "R8B", "R9B", "R10B", "R11B", "R12B", "R13B", "R14B", "R15B", "SPL", "BPL", "SIL", "DIL"};2289 static const char *szModRMReg16[] = {"AX", "CX", "DX", "BX", "SP", "BP", "SI", "DI", "R8W", "R9W", "R10W", "R11W", "R12W", "R13W", "R14W", "R15W"};2290 static const char *szModRMReg32[] = {"EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", "EDI", "R8D", "R9D", "R10D", "R11D", "R12D", "R13D", "R14D", "R15D"};2291 static const char *szModRMReg64[] = {"RAX", "RCX", "RDX", "RBX", "RSP", "RBP", "RSI", "RDI", "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15"};2292 static const char *szModRMReg1616[8] = {"BX+SI", "BX+DI", "BP+SI", "BP+DI", "SI", "DI", "BP", "BX"};2293 #endif2294 static const char *szModRMSegReg[6] = {"ES", "CS", "SS", "DS", "FS", "GS"};2295 static const int BaseModRMReg16[8] = { DISGREG_BX, DISGREG_BX, DISGREG_BP, DISGREG_BP, DISGREG_SI, DISGREG_DI, DISGREG_BP, DISGREG_BX};2296 static const int IndexModRMReg16[4] = { DISGREG_SI, DISGREG_DI, DISGREG_SI, DISGREG_DI};2297 2269 //***************************************************************************** 2298 2270 static void disasmModRMReg(PDISCPUSTATE pCpu, PCDISOPCODE pOp, unsigned idx, PDISOPPARAM pParam, int fRegAddr) … … 2370 2342 } 2371 2343 //***************************************************************************** 2344 static const uint8_t g_auBaseModRMReg16[8] = 2345 { DISGREG_BX, DISGREG_BX, DISGREG_BP, DISGREG_BP, DISGREG_SI, DISGREG_DI, DISGREG_BP, DISGREG_BX}; 2346 static const uint8_t g_auIndexModRMReg16[4] = { DISGREG_SI, DISGREG_DI, DISGREG_SI, DISGREG_DI }; 2372 2347 //***************************************************************************** 2373 2348 static void disasmModRMReg16(PDISCPUSTATE pCpu, PCDISOPCODE pOp, unsigned idx, PDISOPPARAM pParam) … … 2375 2350 NOREF(pCpu); NOREF(pOp); 2376 2351 pParam->fUse |= DISUSE_REG_GEN16; 2377 pParam->Base.idxGenReg = BaseModRMReg16[idx];2352 pParam->Base.idxGenReg = g_auBaseModRMReg16[idx]; 2378 2353 if (idx < 4) 2379 2354 { 2380 2355 pParam->fUse |= DISUSE_INDEX; 2381 pParam->Index.idxGenReg = IndexModRMReg16[idx];2356 pParam->Index.idxGenReg = g_auIndexModRMReg16[idx]; 2382 2357 } 2383 2358 } … … 2387 2362 { 2388 2363 NOREF(pOp); 2389 if (idx >= RT_ELEMENTS(szModRMSegReg))2364 if (idx >= DISSELREG_END) 2390 2365 { 2391 2366 Log(("disasmModRMSReg %d failed!!\n", idx));
Note:
See TracChangeset
for help on using the changeset viewer.

