Changeset 105724 in vbox for trunk/src/VBox/HostDrivers/Support/posix/SUPR3HardenedMain-posix.cpp
- Timestamp:
- Aug 19, 2024 1:27:44 PM (9 months ago)
- svn:sync-xref-src-repo-rev:
- 164428
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/posix/SUPR3HardenedMain-posix.cpp
r101541 r105724 251 251 252 252 /* Extract start address. */ 253 pbSym = (pbSym + cbInstr + Dis. Param1.x86.uDisp.i32);253 pbSym = (pbSym + cbInstr + Dis.aParams[0].x86.uDisp.i32); 254 254 pbSym = (uint8_t *)*((uintptr_t *)pbSym); 255 255 # else … … 423 423 { 424 424 /* Deduce destination register and write out new instruction. */ 425 if (RT_UNLIKELY(!( (Dis. Param1.fUse & (DISUSE_BASE | DISUSE_REG_GEN64))426 && (Dis. Param2.fUse & DISUSE_RIPDISPLACEMENT32))))425 if (RT_UNLIKELY(!( (Dis.aParams[0].fUse & (DISUSE_BASE | DISUSE_REG_GEN64)) 426 && (Dis.aParams[1].fUse & DISUSE_RIPDISPLACEMENT32)))) 427 427 return VERR_SUPLIB_UNEXPECTED_INSTRUCTION; 428 428 429 uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis. Param2.x86.uDisp.i32;429 uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis.aParams[1].x86.uDisp.i32; 430 430 431 431 if (fConvRipRelMovs) … … 437 437 438 438 *pbPatchMem++ = 0x48; 439 *pbPatchMem++ = 0xb8 + Dis. Param1.x86.Base.idxGenReg;439 *pbPatchMem++ = 0xb8 + Dis.aParams[0].x86.Base.idxGenReg; 440 440 *(uintptr_t *)pbPatchMem = uAddr; 441 441 pbPatchMem += sizeof(uintptr_t); … … 443 443 *pbPatchMem++ = 0x48; 444 444 *pbPatchMem++ = 0x8b; 445 *pbPatchMem++ = (Dis. Param1.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | Dis.Param1.x86.Base.idxGenReg;445 *pbPatchMem++ = (Dis.aParams[0].x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | Dis.aParams[0].x86.Base.idxGenReg; 446 446 } 447 447 else … … 453 453 *pbPatchMem++ = 0x48; 454 454 *pbPatchMem++ = 0x8b; 455 *pbPatchMem++ = (Dis. Param1.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | 5;455 *pbPatchMem++ = (Dis.aParams[0].x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | 5; 456 456 *(int32_t *)pbPatchMem = (int32_t)iDispNew; 457 457 pbPatchMem += sizeof(int32_t); … … 462 462 { 463 463 /* Convert to absolute jump. */ 464 uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis. Param1.uValue;464 uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis.aParams[0].uValue; 465 465 466 466 /* Skip the push instructions till the return address is known. */ … … 575 575 576 576 /* jmp rel32 to the call target */ 577 uintptr_t const uAddr = uAddrReturn + (int32_t)Dis. Param1.uValue;577 uintptr_t const uAddr = uAddrReturn + (int32_t)Dis.aParams[0].uValue; 578 578 int32_t const i32DispNew = uAddr - (uintptr_t)&pbPatchMem[5]; 579 579
Note:
See TracChangeset
for help on using the changeset viewer.