Changeset 41874 in vbox for trunk/src/VBox
- Timestamp:
- Jun 22, 2012 12:14:56 AM (13 years ago)
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r41872 r41874 910 910 911 911 912 static size_t UseModRM(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)912 static size_t UseModRM(size_t const offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam) 913 913 { 914 914 unsigned vtype = OP_PARM_VTYPE(pParam->fParam); … … 1310 1310 } 1311 1311 1312 offInstr += QueryModRM_SizeOnly(offInstr, pOp, pDis, pParam);1312 offInstr = QueryModRM_SizeOnly(offInstr, pOp, pDis, pParam); 1313 1313 1314 1314 /* UseModRM is not necessary here; we're only interested in the opcode size */ … … 1497 1497 /* Word for 16-bit operand-size or doubleword for 32 or 64-bit operand-size. */ 1498 1498 if (pDis->uOpMode == DISCPUMODE_16BIT) 1499 return sizeof(uint16_t);1499 return offInstr + 2; 1500 1500 return offInstr + 4; 1501 1501 } -
trunk/src/VBox/Disassembler/testcase/tstDisasm-1.cpp
r41797 r41874 72 72 rc, off, Dis.cbInstr, enmDisCpuMode); 73 73 RTTestIPrintf(RTTESTLVL_ALWAYS, "%s\n", szOutput); 74 75 /* Check with size-only. */ 76 uint32_t cbOnly = 1; 77 DISSTATE DisOnly; 78 rc = DISInstWithPrefetchedBytes((uintptr_t)&pabInstrs[off], enmDisCpuMode, 0 /*fFilter - none */, 79 Dis.abInstr, Dis.cbCachedInstr, NULL, NULL, &DisOnly, &cbOnly); 80 81 RTTESTI_CHECK_RC(rc, VINF_SUCCESS); 82 RTTESTI_CHECK(cbOnly == DisOnly.cbInstr); 83 RTTESTI_CHECK_MSG(cbOnly == cb, ("%#x vs %#x\n", cbOnly, cb)); 84 74 85 off += cb; 75 86 } -
trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm
r41868 r41874 137 137 pswapd mm2, qword [es:esi*8] 138 138 139 pmulhrwa mm0, qword [ds:ebp+edi*8+00f000001h] 140 139 pmulhrwa mm0, qword [ds:ebp+edi*8+00f000001h] 141 140 142 141 ; MMX -
trunk/src/VBox/Disassembler/testcase/tstDisasm-2.cpp
r41863 r41874 357 357 if (uHighlightAddr - State.uAddress < State.cbInstr) 358 358 RTPrintf("; ^^^^^^^^^^^^^^^^^^^^^\n"); 359 360 /* Check that the size-only mode returns the smae size on success. */ 361 if (RT_SUCCESS(rc)) 362 { 363 uint32_t cbInstrOnly = 32; 364 uint8_t abInstr[sizeof(State.Dis.abInstr)]; 365 memcpy(abInstr, State.Dis.abInstr, sizeof(State.Dis.abInstr)); 366 int rcOnly = DISInstWithPrefetchedBytes(State.uAddress, enmCpuMode, 0 /*fFilter - none */, 367 abInstr, State.Dis.cbCachedInstr, MyDisasInstrRead, &State, 368 &State.Dis, &cbInstrOnly); 369 if ( rcOnly != rc 370 || cbInstrOnly != State.cbInstr) 371 { 372 RTPrintf("; Instruction size only check failed rc=%Rrc cbInstrOnly=%#x exepcted %Rrc and %#x\n", 373 rcOnly, cbInstrOnly, rc, State.cbInstr); 374 rcRet = VERR_GENERAL_FAILURE; 375 break; 376 } 377 } 359 378 360 379 /* next */
Note:
See TracChangeset
for help on using the changeset viewer.