Changeset 101541 in vbox
- Timestamp:
- Oct 22, 2023 2:55:27 AM (19 months ago)
- svn:sync-xref-src-repo-rev:
- 159618
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/posix/SUPR3HardenedMain-posix.cpp
r101540 r101541 247 247 if ( RT_FAILURE(rc) 248 248 || Dis.pCurInstr->uOpcode != OP_JMP 249 || !(Dis.x86.ModRM.Bits.Mod == 0 && Dis. arch.x86.ModRM.Bits.Rm == 5 /* wrt RIP */))249 || !(Dis.x86.ModRM.Bits.Mod == 0 && Dis.x86.ModRM.Bits.Rm == 5 /* wrt RIP */)) 250 250 return NULL; 251 251 252 252 /* Extract start address. */ 253 pbSym = (pbSym + cbInstr + Dis.Param1. arch.x86.uDisp.i32);253 pbSym = (pbSym + cbInstr + Dis.Param1.x86.uDisp.i32); 254 254 pbSym = (uint8_t *)*((uintptr_t *)pbSym); 255 255 # else … … 360 360 || ( Dis.pCurInstr->fOpType & DISOPTYPE_CONTROLFLOW 361 361 && Dis.pCurInstr->uOpcode != OP_CALL) 362 || ( Dis. arch.x86.ModRM.Bits.Mod == 0363 && Dis. arch.x86.ModRM.Bits.Rm == 5 /* wrt RIP */362 || ( Dis.x86.ModRM.Bits.Mod == 0 363 && Dis.x86.ModRM.Bits.Rm == 5 /* wrt RIP */ 364 364 && Dis.pCurInstr->uOpcode != OP_MOV)) 365 365 return VERR_SUPLIB_UNEXPECTED_INSTRUCTION; 366 366 367 if (Dis. arch.x86.ModRM.Bits.Mod == 0 && Dis.arch.x86.ModRM.Bits.Rm == 5 /* wrt RIP */)367 if (Dis.x86.ModRM.Bits.Mod == 0 && Dis.x86.ModRM.Bits.Rm == 5 /* wrt RIP */) 368 368 cRipRelMovs++; 369 369 if ( Dis.pCurInstr->uOpcode == OP_CALL … … 418 418 return VERR_SUPLIB_UNEXPECTED_INSTRUCTION; 419 419 420 if ( Dis. arch.x86.ModRM.Bits.Mod == 0421 && Dis. arch.x86.ModRM.Bits.Rm == 5 /* wrt RIP */420 if ( Dis.x86.ModRM.Bits.Mod == 0 421 && Dis.x86.ModRM.Bits.Rm == 5 /* wrt RIP */ 422 422 && Dis.pCurInstr->uOpcode == OP_MOV) 423 423 { … … 427 427 return VERR_SUPLIB_UNEXPECTED_INSTRUCTION; 428 428 429 uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis.Param2. arch.x86.uDisp.i32;429 uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis.Param2.x86.uDisp.i32; 430 430 431 431 if (fConvRipRelMovs) … … 437 437 438 438 *pbPatchMem++ = 0x48; 439 *pbPatchMem++ = 0xb8 + Dis.Param1. arch.x86.Base.idxGenReg;439 *pbPatchMem++ = 0xb8 + Dis.Param1.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. arch.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | Dis.Param1.arch.x86.Base.idxGenReg;445 *pbPatchMem++ = (Dis.Param1.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | Dis.Param1.x86.Base.idxGenReg; 446 446 } 447 447 else … … 453 453 *pbPatchMem++ = 0x48; 454 454 *pbPatchMem++ = 0x8b; 455 *pbPatchMem++ = (Dis.Param1. arch.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | 5;455 *pbPatchMem++ = (Dis.Param1.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | 5; 456 456 *(int32_t *)pbPatchMem = (int32_t)iDispNew; 457 457 pbPatchMem += sizeof(int32_t);
Note:
See TracChangeset
for help on using the changeset viewer.