Changeset 8234 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Apr 21, 2008 2:29:54 PM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 29963
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r8155 r8234 532 532 533 533 pParam->flags |= USE_BASE | USE_REG_GEN32; 534 pParam->base.reg_gen 32= base;534 pParam->base.reg_gen = base; 535 535 } 536 536 return; /* Already fetched everything in ParseSIB; no size returned */ … … 1240 1240 { 1241 1241 /* Use 32-bit registers. */ 1242 pParam->base.reg_gen 32= pParam->param - OP_PARM_REG_GEN32_START;1242 pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN32_START; 1243 1243 pParam->flags |= USE_REG_GEN32; 1244 1244 pParam->size = 4; … … 1247 1247 { 1248 1248 /* Use 16-bit registers. */ 1249 pParam->base.reg_gen 16= pParam->param - OP_PARM_REG_GEN32_START;1249 pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN32_START; 1250 1250 pParam->flags |= USE_REG_GEN16; 1251 1251 pParam->size = 2; … … 1265 1265 { 1266 1266 /* 16-bit AX..DI registers. */ 1267 pParam->base.reg_gen 16= pParam->param - OP_PARM_REG_GEN16_START;1267 pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN16_START; 1268 1268 pParam->flags |= USE_REG_GEN16; 1269 1269 pParam->size = 2; … … 1273 1273 { 1274 1274 /* 8-bit AL..DL, AH..DH registers. */ 1275 pParam->base.reg_gen 8= pParam->param - OP_PARM_REG_GEN8_START;1275 pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN8_START; 1276 1276 pParam->flags |= USE_REG_GEN8; 1277 1277 pParam->size = 1; … … 1299 1299 if (pCpu->addrmode == CPUMODE_32BIT) 1300 1300 { 1301 pParam->base.reg_gen 32= USE_REG_ESI;1301 pParam->base.reg_gen = USE_REG_ESI; 1302 1302 pParam->flags |= USE_REG_GEN32; 1303 1303 } 1304 1304 else 1305 1305 { 1306 pParam->base.reg_gen 16= USE_REG_SI;1306 pParam->base.reg_gen = USE_REG_SI; 1307 1307 pParam->flags |= USE_REG_GEN16; 1308 1308 } … … 1318 1318 if (pCpu->addrmode == CPUMODE_32BIT) 1319 1319 { 1320 pParam->base.reg_gen 32= USE_REG_ESI;1320 pParam->base.reg_gen = USE_REG_ESI; 1321 1321 pParam->flags |= USE_REG_GEN32; 1322 1322 } 1323 1323 else 1324 1324 { 1325 pParam->base.reg_gen 16= USE_REG_SI;1325 pParam->base.reg_gen = USE_REG_SI; 1326 1326 pParam->flags |= USE_REG_GEN16; 1327 1327 } … … 1338 1338 if (pCpu->addrmode == CPUMODE_32BIT) 1339 1339 { 1340 pParam->base.reg_gen 32= USE_REG_EDI;1340 pParam->base.reg_gen = USE_REG_EDI; 1341 1341 pParam->flags |= USE_REG_GEN32; 1342 1342 } 1343 1343 else 1344 1344 { 1345 pParam->base.reg_gen 16= USE_REG_DI;1345 pParam->base.reg_gen = USE_REG_DI; 1346 1346 pParam->flags |= USE_REG_GEN16; 1347 1347 } … … 1357 1357 if (pCpu->addrmode == CPUMODE_32BIT) 1358 1358 { 1359 pParam->base.reg_gen 32= USE_REG_EDI;1359 pParam->base.reg_gen = USE_REG_EDI; 1360 1360 pParam->flags |= USE_REG_GEN32; 1361 1361 } 1362 1362 else 1363 1363 { 1364 pParam->base.reg_gen 16= USE_REG_DI;1364 pParam->base.reg_gen = USE_REG_DI; 1365 1365 pParam->flags |= USE_REG_GEN16; 1366 1366 } … … 1826 1826 disasmAddString(pParam->szParam, szModRMReg8[idx]); 1827 1827 pParam->flags |= USE_REG_GEN8; 1828 pParam->base.reg_gen 8= idx;1828 pParam->base.reg_gen = idx; 1829 1829 break; 1830 1830 … … 1832 1832 disasmAddString(pParam->szParam, szModRMReg16[idx]); 1833 1833 pParam->flags |= USE_REG_GEN16; 1834 pParam->base.reg_gen 16= idx;1834 pParam->base.reg_gen = idx; 1835 1835 break; 1836 1836 … … 1838 1838 disasmAddString(pParam->szParam, szModRMReg32[idx]); 1839 1839 pParam->flags |= USE_REG_GEN32; 1840 pParam->base.reg_gen 32= idx;1840 pParam->base.reg_gen = idx; 1841 1841 break; 1842 1842 … … 1860 1860 disasmAddString(pParam->szParam, szModRMReg1616[idx]); 1861 1861 pParam->flags |= USE_REG_GEN16; 1862 pParam->base.reg_gen 16= BaseModRMReg16[idx];1862 pParam->base.reg_gen = BaseModRMReg16[idx]; 1863 1863 if (idx < 4) 1864 1864 { -
trunk/src/VBox/Disassembler/DisasmReg.cpp
r8168 r8234 207 207 return 8; 208 208 209 case OP_PARM_p: 209 case OP_PARM_p: /* far pointer */ 210 210 if (pCpu->addrmode == CPUMODE_32BIT) 211 return 8; 212 else 213 return 4; 211 return 6; /* 16:32 */ 212 else 213 if (pCpu->addrmode == CPUMODE_64BIT) 214 return 12; /* 16:64 */ 215 else 216 return 4; /* 16:16 */ 214 217 215 218 default: … … 232 235 { 233 236 /* Guess segment register by parameter type. */ 234 if (pParam->flags & USE_REG_GEN32) 235 { 236 if (pParam->base.reg_gen32 == USE_REG_ESP || pParam->base.reg_gen32 == USE_REG_EBP) 237 return USE_REG_SS; 238 } 239 else 240 if (pParam->flags & USE_REG_GEN16) 241 { 242 if (pParam->base.reg_gen16 == USE_REG_SP || pParam->base.reg_gen16 == USE_REG_BP) 237 if (pParam->flags & (USE_REG_GEN32|USE_REG_GEN64|USE_REG_GEN16)) 238 { 239 AssertCompile(USE_REG_ESP == USE_REG_RSP); 240 AssertCompile(USE_REG_EBP == USE_REG_RBP); 241 AssertCompile(USE_REG_ESP == USE_REG_SP); 242 AssertCompile(USE_REG_EBP == USE_REG_BP); 243 if (pParam->base.reg_gen == USE_REG_ESP || pParam->base.reg_gen == USE_REG_EBP) 243 244 return USE_REG_SS; 244 245 } … … 486 487 { 487 488 pParamVal->flags |= PARAM_VAL8; 488 if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen 8, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;489 if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER; 489 490 } 490 491 else … … 492 493 { 493 494 pParamVal->flags |= PARAM_VAL16; 494 if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen 16, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;495 if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER; 495 496 } 496 497 else … … 498 499 { 499 500 pParamVal->flags |= PARAM_VAL32; 500 if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen 32, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;501 if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER; 501 502 } 502 503 else … … 504 505 { 505 506 pParamVal->flags |= PARAM_VAL64; 506 if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen 64, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;507 if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER; 507 508 } 508 509 else { … … 581 582 pParamVal->flags |= PARAM_VAL8; 582 583 pParamVal->size = sizeof(uint8_t); 583 if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen 8, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;584 if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER; 584 585 } 585 586 else … … 588 589 pParamVal->flags |= PARAM_VAL16; 589 590 pParamVal->size = sizeof(uint16_t); 590 if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen 16, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;591 if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER; 591 592 } 592 593 else … … 595 596 pParamVal->flags |= PARAM_VAL32; 596 597 pParamVal->size = sizeof(uint32_t); 597 if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen 32, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;598 if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER; 598 599 } 599 600 else … … 602 603 pParamVal->flags |= PARAM_VAL64; 603 604 pParamVal->size = sizeof(uint64_t); 604 if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen 64, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;605 if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER; 605 606 } 606 607 else … … 698 699 { 699 700 uint8_t *pu8Reg; 700 if (VBOX_SUCCESS(DISPtrReg8(pCtx, pParam->base.reg_gen 8, &pu8Reg)))701 if (VBOX_SUCCESS(DISPtrReg8(pCtx, pParam->base.reg_gen, &pu8Reg))) 701 702 { 702 703 *pcbSize = sizeof(uint8_t); … … 709 710 { 710 711 uint16_t *pu16Reg; 711 if (VBOX_SUCCESS(DISPtrReg16(pCtx, pParam->base.reg_gen 16, &pu16Reg)))712 if (VBOX_SUCCESS(DISPtrReg16(pCtx, pParam->base.reg_gen, &pu16Reg))) 712 713 { 713 714 *pcbSize = sizeof(uint16_t); … … 720 721 { 721 722 uint32_t *pu32Reg; 722 if (VBOX_SUCCESS(DISPtrReg32(pCtx, pParam->base.reg_gen 32, &pu32Reg)))723 if (VBOX_SUCCESS(DISPtrReg32(pCtx, pParam->base.reg_gen, &pu32Reg))) 723 724 { 724 725 *pcbSize = sizeof(uint32_t); … … 731 732 { 732 733 uint64_t *pu64Reg; 733 if (VBOX_SUCCESS(DISPtrReg64(pCtx, pParam->base.reg_gen 64, &pu64Reg)))734 if (VBOX_SUCCESS(DISPtrReg64(pCtx, pParam->base.reg_gen, &pu64Reg))) 734 735 { 735 736 *pcbSize = sizeof(uint64_t);
Note:
See TracChangeset
for help on using the changeset viewer.