From 8abb5dbfba812b119c0513adb43fb879b1003428 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Sat, 31 Dec 2022 18:29:54 +0100 Subject: [PATCH] Update DDetours sources to latest (2021-01-01) --- source/detours/.gitignore | 114 ++++++++++++++--------------- source/detours/Clean.bat | 68 ++++++++--------- source/detours/Source/DDetours.pas | 25 ++++--- 3 files changed, 104 insertions(+), 103 deletions(-) diff --git a/source/detours/.gitignore b/source/detours/.gitignore index 38082db5..ba6c5424 100644 --- a/source/detours/.gitignore +++ b/source/detours/.gitignore @@ -1,57 +1,57 @@ -# Uncomment these types if you want even more clean repository. But be careful. -# It can make harm to an existing project source. Read explanations below. -# -# Resource files are binaries containing manifest, project icon and version info. -# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. -*.res -# -# Type library file (binary). In old Delphi versions it should be stored. -# Since Delphi 2009 it is produced from .ridl file and can safely be ignored. -#*.tlb -# -# Diagram Portfolio file. Used by the diagram editor up to Delphi 7. -# Uncomment this if you are not using diagrams or use newer Delphi version. -#*.ddp -# -# Visual LiveBindings file. Added in Delphi XE2. -# Uncomment this if you are not using LiveBindings Designer. -#*.vlb -# -# Deployment Manager configuration file for your project. Added in Delphi XE2. -# Uncomment this if it is not mobile development and you do not use remote debug feature. -#*.deployproj -# - -# Delphi compiler-generated binaries (safe to delete) -#*.exe -*.dll -*.bpl -*.bpi -*.dcp -*.so -*.apk -*.drc -*.map -*.dres -*.rsm -*.tds -*.dcu -*.lib - -# Delphi autogenerated files (duplicated info) -*.cfg -*Resource.rc - -# Delphi local files (user-specific info) -*.local -*.identcache -*.projdata -*.tvsconfig -*.dsk - -# Delphi history and backups -__history/ -*.~* - -# Castalia statistics file -*.stat +# Uncomment these types if you want even more clean repository. But be careful. +# It can make harm to an existing project source. Read explanations below. +# +# Resource files are binaries containing manifest, project icon and version info. +# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. +*.res +# +# Type library file (binary). In old Delphi versions it should be stored. +# Since Delphi 2009 it is produced from .ridl file and can safely be ignored. +#*.tlb +# +# Diagram Portfolio file. Used by the diagram editor up to Delphi 7. +# Uncomment this if you are not using diagrams or use newer Delphi version. +#*.ddp +# +# Visual LiveBindings file. Added in Delphi XE2. +# Uncomment this if you are not using LiveBindings Designer. +#*.vlb +# +# Deployment Manager configuration file for your project. Added in Delphi XE2. +# Uncomment this if it is not mobile development and you do not use remote debug feature. +#*.deployproj +# + +# Delphi compiler-generated binaries (safe to delete) +#*.exe +*.dll +*.bpl +*.bpi +*.dcp +*.so +*.apk +*.drc +*.map +*.dres +*.rsm +*.tds +*.dcu +*.lib + +# Delphi autogenerated files (duplicated info) +*.cfg +*Resource.rc + +# Delphi local files (user-specific info) +*.local +*.identcache +*.projdata +*.tvsconfig +*.dsk + +# Delphi history and backups +__history/ +*.~* + +# Castalia statistics file +*.stat diff --git a/source/detours/Clean.bat b/source/detours/Clean.bat index a3f0c053..b591ee22 100644 --- a/source/detours/Clean.bat +++ b/source/detours/Clean.bat @@ -1,35 +1,35 @@ -rem ***************************************** -rem * Delphi CleanUp Batch. * -rem * * -rem * Clean identcache,local,dcu,exe, * -rem * map,drc files. * -rem * Clean hidden __history folder. * -rem * * -rem * Author: Mahdi Safsafi * -rem ***************************************** - -@echo off -Setlocal EnableDelayedExpansion - -Del "*.identcache" /s/q -Del "*.local" /s/q -Del "*.dcu" /s/q -Del "*.exe" /s/q -Del "*.drc" /s/q -Del "*.map" /s/q - -set mustdel=false -For /r %%f in (.) do ( - set "mustdel=false" - if %%~nf==Win32 ( - if exist "%%~ff\Debug\" set "mustdel=true" - if exist "%%~ff\Release\" set "mustdel=true" -) else if %%~nf==Win64 ( - if exist "%%~ff\Debug\" set "mustdel=true" - if exist "%%~ff\Release\" set "mustdel=true" - ) -if %%~nf==__history set "mustdel=true" -if !mustdel!==true ( - if exist "%%~ff" rd /s/q "%%~ff" - ) +rem ***************************************** +rem * Delphi CleanUp Batch. * +rem * * +rem * Clean identcache,local,dcu,exe, * +rem * map,drc files. * +rem * Clean hidden __history folder. * +rem * * +rem * Author: Mahdi Safsafi * +rem ***************************************** + +@echo off +Setlocal EnableDelayedExpansion + +Del "*.identcache" /s/q +Del "*.local" /s/q +Del "*.dcu" /s/q +Del "*.exe" /s/q +Del "*.drc" /s/q +Del "*.map" /s/q + +set mustdel=false +For /r %%f in (.) do ( + set "mustdel=false" + if %%~nf==Win32 ( + if exist "%%~ff\Debug\" set "mustdel=true" + if exist "%%~ff\Release\" set "mustdel=true" +) else if %%~nf==Win64 ( + if exist "%%~ff\Debug\" set "mustdel=true" + if exist "%%~ff\Release\" set "mustdel=true" + ) +if %%~nf==__history set "mustdel=true" +if !mustdel!==true ( + if exist "%%~ff" rd /s/q "%%~ff" + ) ) \ No newline at end of file diff --git a/source/detours/Source/DDetours.pas b/source/detours/Source/DDetours.pas index 6682b64c..79135fdb 100644 --- a/source/detours/Source/DDetours.pas +++ b/source/detours/Source/DDetours.pas @@ -17,6 +17,7 @@ unit DDetours; {define FIX_MADEXCEPT if you are using crash on buffer overrun/underrun feature from MadExcept } {.$DEFINE FIX_MADEXCEPT} +{.$define DEVMODE} {$IFDEF FPC} {$MODE DELPHI} @@ -591,7 +592,7 @@ begin {$IFDEF CPUX64} IsNxtInstData := ((PInst^.Disp.Flags and (dfUsed or dfRip) = (dfUsed or dfRip)) and (PInst^.Disp.Value = 0)); {$ELSE !CPUX64} - IsNxtInstData := (PInst^.Disp.Value = UInt64(PInst^.NextInst)); + IsNxtInstData := (PInst^.Disp.Value = Int64(PInst^.NextInst)); {$ENDIF CPUX64} if IsNxtInstData then begin @@ -1037,7 +1038,7 @@ begin GetMem(POpc, MAX_INST_LENGTH_N + 1); try // Opcsz := GetInstOpCodes(PInst, POpc); - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); Relsz := GetInt64Size(Offset); {$IFDEF CPUX64} if Relsz = ops16bits then @@ -1110,7 +1111,7 @@ begin case Relsz of ops16bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 5); PQ^ := opPrfOpSize; Inc(PQ); PWord(PQ)^ := LOOP_To_JccZ[PInst^.OpCode and 3]; @@ -1120,7 +1121,7 @@ begin end; ops32bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); PWord(PQ)^ := LOOP_To_JccZ[PInst^.OpCode and 3]; Inc(PQ, 2); PInt32(PQ)^ := Int32(Offset); @@ -1204,7 +1205,7 @@ begin TEST CX,CX JZ @Dst } - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 5); PQ^ := opPrfOpSize; Inc(PQ); PQ^ := $0F; @@ -1220,7 +1221,7 @@ begin TEST ECX,ECX JZ @Dst } - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); PQ^ := $0F; Inc(PQ); PQ^ := $84; // JZ ! @@ -1261,7 +1262,7 @@ begin case Relsz of ops8bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 2); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 2); PInt8(PQ)^ := UInt8(NOpc); Inc(PQ); PInt8(PQ)^ := Int8(Offset); @@ -1269,7 +1270,7 @@ begin end; ops16bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 5); PUInt32(PQ)^ := UInt32(NOpc); Inc(PQ, 3); PInt16(PQ)^ := Int16(Offset); @@ -1277,7 +1278,7 @@ begin end; ops32bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); PUInt16(PQ)^ := UInt16(NOpc); Inc(PQ, 2); PInt32(PQ)^ := Int32(Offset); @@ -1435,7 +1436,7 @@ var P: PByte; begin P := NewAddr; - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(P) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(P) - 6); Relsz := GetInt64Size(Offset); {$IFDEF CPUX64} { Only 32-bits relative offset is supported on x64! } @@ -1449,7 +1450,7 @@ begin case Relsz of ops16bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(P) - 4); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(P) - 4); P^ := opPrfOpSize; Inc(P); P^ := $E8; @@ -1459,7 +1460,7 @@ begin end; ops32bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(P) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(P) - 5); P^ := $E8; Inc(P); PInt32(P)^ := Int32(Offset);