From d2600cb033c27dcd5372f9a42194b2963cbc7063 Mon Sep 17 00:00:00 2001 From: "Christoph \"baka0815\" Schwerdtfeger" Date: Fri, 9 Nov 2018 10:29:30 +0100 Subject: [PATCH 1/3] Update delphi-detours-library Fixes a possible memory leak after exception (see https://github.com/MahdiSafsafi/delphi-detours-library/commit/38ee45c3742271251473a0706773056b781389b4) --- Common/delphi-detours-library/DDetours.pas | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Common/delphi-detours-library/DDetours.pas b/Common/delphi-detours-library/DDetours.pas index b614c60..b69c799 100644 --- a/Common/delphi-detours-library/DDetours.pas +++ b/Common/delphi-detours-library/DDetours.pas @@ -2239,7 +2239,12 @@ function TIntercept.InstallHook(TargetProc, InterceptProc: PByte; const Options: begin P := GetRoot(TargetProc); PDscr := CreateNewDescriptor; - InsertDescriptor(P, PDscr); + try + InsertDescriptor(P, PDscr); + except + FreeMem(PDscr); + raise; + end; end; Result := AddHook(PDscr, InterceptProc); end; From 4902b62946f78cbb49051054382b41eea4853ad5 Mon Sep 17 00:00:00 2001 From: "Christoph \"baka0815\" Schwerdtfeger" Date: Fri, 9 Nov 2018 10:43:07 +0100 Subject: [PATCH 2/3] detours: add missing files --- Common/delphi-detours-library/CPUID.pas | 279 ++++++++++++++++++ Common/delphi-detours-library/Defs.inc | 48 +++ .../ModRmFlagsTables.inc | 140 +++++++++ 3 files changed, 467 insertions(+) create mode 100644 Common/delphi-detours-library/CPUID.pas create mode 100644 Common/delphi-detours-library/Defs.inc create mode 100644 Common/delphi-detours-library/ModRmFlagsTables.inc diff --git a/Common/delphi-detours-library/CPUID.pas b/Common/delphi-detours-library/CPUID.pas new file mode 100644 index 0000000..e1ccaff --- /dev/null +++ b/Common/delphi-detours-library/CPUID.pas @@ -0,0 +1,279 @@ +// ************************************************************************************************** +// CPUID for Delphi. +// Unit CPUID +// https://github.com/MahdiSafsafi/delphi-detours-library + +// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); +// you may not use this file except in compliance with the License. You may obtain a copy of the +// License at http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF +// ANY KIND, either express or implied. See the License for the specific language governing rights +// and limitations under the License. +// +// The Original Code is CPUID.pas. +// +// The Initial Developer of the Original Code is Mahdi Safsafi [SMP3]. +// Portions created by Mahdi Safsafi . are Copyright (C) 2013-2017 Mahdi Safsafi . +// All Rights Reserved. +// +// ************************************************************************************************** + +unit CPUID; +{$IFDEF FPC} +{$MODE DELPHI} +{$ENDIF FPC} + +interface + +{$I Defs.inc} + +uses SysUtils; + +type + { Do not change registers order ! } + TCPUIDStruct = packed record + rEAX: UInt32; { EAX Register } + rEBX: UInt32; { EBX Register } + rEDX: UInt32; { EDX Register } + rECX: UInt32; { ECX Register } + end; + + PCPUIDStruct = ^TCPUIDStruct; + +procedure CallCPUID(const ID: NativeUInt; var CPUIDStruct: TCPUIDStruct); +function IsCPUIDSupported: Boolean; + +type + TCPUVendor = (vUnknown, vIntel, vAMD, vNextGen); + TCPUEncoding = set of (REX, VEX, EVEX); + TCPUInstructions = set of (iMultiNop); + +var + CPUVendor: TCPUVendor; + CPUEncoding: TCPUEncoding; + CPUInsts: TCPUInstructions; + +implementation + +var + CPUIDSupported: Boolean = False; + +function ___IsCPUIDSupported: Boolean; +asm + {$IFDEF CPUX86} + PUSH ECX + PUSHFD + POP EAX { EAX = EFLAGS } + MOV ECX, EAX { Save the original EFLAGS value . } + { + CPUID is supported only if we can modify + bit 21 of EFLAGS register ! + } + XOR EAX, $200000 + PUSH EAX + POPFD { Set the new EFLAGS value } + PUSHFD + POP EAX { Read EFLAGS } + { + Check if the 21 bit was modified ! + If so ==> Return True . + else ==> Return False. + } + XOR EAX, ECX + SHR EAX, 21 + AND EAX, 1 + PUSH ECX + POPFD { Restore original EFLAGS value . } + POP ECX + {$ELSE !CPUX86} + PUSH RCX + MOV RCX,RCX + PUSHFQ + POP RAX + MOV RCX, RAX + XOR RAX, $200000 + PUSH RAX + POPFQ + PUSHFQ + POP RAX + XOR RAX, RCX + SHR RAX, 21 + AND RAX, 1 + PUSH RCX + POPFQ + POP RCX + {$ENDIF CPUX86} +end; + +procedure ___CallCPUID(const ID: NativeInt; var CPUIDStruct); +asm + { + ALL REGISTERS (rDX,rCX,rBX) MUST BE SAVED BEFORE + EXECUTING CPUID INSTRUCTION ! + } + {$IFDEF CPUX86} + PUSH EDI + PUSH ECX + PUSH EBX + MOV EDI,EDX + CPUID + {$IFNDEF FPC} + MOV EDI.TCPUIDStruct.rEAX,EAX + MOV EDI.TCPUIDStruct.rEBX,EBX + MOV EDI.TCPUIDStruct.rECX,ECX + MOV EDI.TCPUIDStruct.rEDX,EDX + {$ELSE FPC} + MOV [EDI].TCPUIDStruct.rEAX,EAX + MOV [EDI].TCPUIDStruct.rEBX,EBX + MOV [EDI].TCPUIDStruct.rECX,ECX + MOV [EDI].TCPUIDStruct.rEDX,EDX + {$ENDIF !FPC} + POP EBX + POP ECX + POP EDI + {$ELSE !CPUX86} + PUSH R9 + PUSH RBX + PUSH RDX + MOV RAX,RCX + MOV R9,RDX + CPUID + MOV R9.TCPUIDStruct.rEAX,EAX + MOV R9.TCPUIDStruct.rEBX,EBX + MOV R9.TCPUIDStruct.rECX,ECX + MOV R9.TCPUIDStruct.rEDX,EDX + POP RDX + POP RBX + POP R9 + {$ENDIF CPUX86} +end; + +function ___IsAVXSupported: Boolean; +asm + { + Checking for AVX support requires 3 steps: + + 1) Detect CPUID.1:ECX.OSXSAVE[bit 27] = 1 + => XGETBV enabled for application use + + 2) Detect CPUID.1:ECX.AVX[bit 28] = 1 + => AVX instructions supported. + + 3) Issue XGETBV and verify that XCR0[2:1] = ‘11b’ + => XMM state and YMM state are enabled by OS. + + } + + { Steps : 1 and 2 } + {$IFDEF CPUX64} + MOV RAX, 1 + PUSH RCX + PUSH RBX + PUSH RDX + {$ELSE !CPUX64} + MOV EAX, 1 + PUSH ECX + PUSH EBX + PUSH EDX + {$ENDIF CPUX64} + CPUID + AND ECX, $018000000 + CMP ECX, $018000000 + JNE @@NOT_SUPPORTED + XOR ECX,ECX + { + Delphi does not support XGETBV ! + => We need to use the XGETBV opcodes ! + } + DB $0F DB $01 DB $D0 // XGETBV + { Step :3 } + AND EAX, $06 + CMP EAX, $06 + JNE @@NOT_SUPPORTED + MOV EAX, 1 + JMP @@END +@@NOT_SUPPORTED: + XOR EAX,EAX +@@END: + {$IFDEF CPUX64} + POP RDX + POP RBX + POP RCX + {$ELSE !CPUX64} + POP EDX + POP EBX + POP ECX + {$ENDIF CPUX64} +end; + +procedure CallCPUID(const ID: NativeUInt; var CPUIDStruct: TCPUIDStruct); +begin + FillChar(CPUIDStruct, SizeOf(TCPUIDStruct), #0); + if not CPUIDSupported then + raise Exception.Create('CPUID instruction not supported.') + else + ___CallCPUID(ID, CPUIDStruct); +end; + +function IsCPUIDSupported: Boolean; +begin + Result := CPUIDSupported; +end; + +type + TVendorName = array [0 .. 12] of AnsiChar; + +function GetVendorName: TVendorName; +var + Info: PCPUIDStruct; + P: PByte; +begin + Result := ''; + if not IsCPUIDSupported then + Exit; + Info := GetMemory(SizeOf(TCPUIDStruct)); + CallCPUID(0, Info^); + P := PByte(Info) + 4; // Skip EAX ! + Move(P^, PByte(@Result[0])^, 12); + FreeMemory(Info); +end; + +procedure __Init__; +var + vn: TVendorName; + Info: TCPUIDStruct; + r: UInt32; +begin + CPUVendor := vUnknown; +{$IFDEF CPUX64} + CPUEncoding := [REX]; +{$ELSE !CPUX64} + CPUEncoding := []; +{$ENDIF CPUX64} + CPUInsts := []; + if IsCPUIDSupported then + begin + vn := GetVendorName(); + if vn = 'GenuineIntel' then + CPUVendor := vIntel + else if vn = 'AuthenticAMD' then + CPUVendor := vAMD + else if vn = 'NexGenDriven' then + CPUVendor := vNextGen; + CallCPUID(1, Info); + r := Info.rEAX and $F00; + case r of + $F00, $600: Include(CPUInsts, iMultiNop); + end; + if ___IsAVXSupported then + Include(CPUEncoding, VEX); + end; +end; + +initialization + +CPUIDSupported := ___IsCPUIDSupported; +__Init__; + +end. diff --git a/Common/delphi-detours-library/Defs.inc b/Common/delphi-detours-library/Defs.inc new file mode 100644 index 0000000..6ed587d --- /dev/null +++ b/Common/delphi-detours-library/Defs.inc @@ -0,0 +1,48 @@ +{$DEFINE UseInline} +{$DEFINE BuildThreadSafe} +{$DEFINE UseGenerics} +{$DEFINE UseMultiBytesNop} +//Define HookInternalFuncs if you want to hook internal functions used by DDL core! +{.$DEFINE HookInternalFuncs} +//---------------------------------------------- +{$IFDEF FPC} + {$IFDEF CPU64} + {$IFNDEF CPUX64} + {$DEFINE CPUX64} + {$ENDIF !CPUX64} + {$ENDIF CPU64} + {$ASMMODE INTEL} +{$ENDIF FPC} + +{$IFNDEF CPUX64} + {$IFNDEF CPUX86} + {$DEFINE CPUX86} + {$ENDIF !CPUX86} +{$ENDIF !CPUX64} + +{$IFDEF DEBUG} +{$R+} // Range check On +{$ENDIF} + +{$IFNDEF FPC} + {$IF CompilerVersion >17} + {$DEFINE CanInline} + {$IFEND} + {$IF CompilerVersion >=21} + {$DEFINE GenericsExist } + {$IFEND} + {$IF CompilerVersion >=23} + {$DEFINE DXE2UP } + {$IFEND} + {$IF CompilerVersion >=24} + {$DEFINE DXE3UP } + {$IFEND} +{$ENDIF !FPC} + +{$IF DEFINED(UseInline) and DEFINED(CanInline)} + {$DEFINE MustInline} +{$IFEND} + +{$IF DEFINED(GenericsExist) and DEFINED(UseGenerics)} + {$DEFINE MustUseGenerics} +{$IFEND} diff --git a/Common/delphi-detours-library/ModRmFlagsTables.inc b/Common/delphi-detours-library/ModRmFlagsTables.inc new file mode 100644 index 0000000..f51efb5 --- /dev/null +++ b/Common/delphi-detours-library/ModRmFlagsTables.inc @@ -0,0 +1,140 @@ +// ************************************************************************************************** +// Part of Delphi Instruction Decode Library [InstDecode] +// +// https://github.com/MahdiSafsafi/delphi-detours-library + +// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); +// you may not use this file except in compliance with the License. You may obtain a copy of the +// License at http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF +// ANY KIND, either express or implied. See the License for the specific language governing rights +// and limitations under the License. +// +// The Original Code is ModRmFlagsTables.inc. +// +// The Initial Developer of the Original Code is Mahdi Safsafi [SMP3]. +// Portions created by Mahdi Safsafi . are Copyright (C) 2013-2016 Mahdi Safsafi . +// All Rights Reserved. +// +// ************************************************************************************************** + + +{ Reference : Intel® 64 and IA-32 Architectures Software Developer’s Manual Vol 2 } + +type + TModRmFlagsArray = array [Byte] of Byte; + PModRmFlagsArray = ^TModRmFlagsArray; + { + ModRMFlags : + Bits:4 3 2 1 0 . + + Bit 0 : Set ==> Register Indirect Addressing Mode . + Bit 1 : Set ==> Displacement 8 bit . + Bit 2 : Set ==> Displacement 16 bit . + Bit 3 : Set ==> Displacement 32 bit. + Bit 4 : Set ==> SIB Used . + + + Values: + + $00 ==> Register . + $01 ==> Register Indirect Addressing Mode with No Displacement . + $03 ==> Register Indirect Addressing Mode + 8 bit Displacement . + $04 ==> 16 bit Displacement only without register . + $05 ==> Register Indirect Addressing Mode + 16 bit Displacement . + $08 ==> 32 bit Displacement only without register . + $09 ==> Register Indirect Addressing Mode + 32 bit Displacement . + $11 ==> Register Indirect Addressing Mode + SIB . + $13 ==> Register Indirect Addressing Mode + SIB + 8 bit Displacement . + $19 ==> Register Indirect Addressing Mode + SIB + 32 bit Displacement . + + } + +const + + ModRM16Flags: TModRmFlagsArray = ( + { => Mod=00b <= } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + $01, $01, $01, $01, $01, $01, $04, $01, { 00 } + { => Mod=01b <= } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + $03, $03, $03, $03, $03, $03, $03, $03, { 01 } + { => Mod=10b <= } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + $05, $05, $05, $05, $05, $05, $05, $05, { 10 } + { => Mod=11b <= } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00 { 11 } + + ); + ModRM32Flags: TModRmFlagsArray = ( + { => Mod=00b <= } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + $01, $01, $01, $01, $11, $08, $01, $01, { 00 } + { => Mod=01b <= } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + $03, $03, $03, $03, $13, $03, $03, $03, { 01 } + { => Mod=10b <= } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + $09, $09, $09, $09, $19, $09, $09, $09, { 10 } + { => Mod=11b <= } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00, { 11 } + $00, $00, $00, $00, $00, $00, $00, $00 { 11 } + + ); + + ModRmFlags: array [0 .. 3] of PModRmFlagsArray = ( // + nil, + @ModRM16Flags, { AddrMode 16-bits } + @ModRM32Flags, { AddrMode 32-bits } + @ModRM32Flags { AddrMode 64-bits } + ); \ No newline at end of file From 168a8aa60b089bae0571fe6ba044607734023e35 Mon Sep 17 00:00:00 2001 From: "Christoph \"baka0815\" Schwerdtfeger" Date: Fri, 9 Nov 2018 10:48:36 +0100 Subject: [PATCH 3/3] detour: Add CPUID to projects --- IDE PlugIn/DelphiIDEColorizerDXBerlin.dpk | 1 + IDE PlugIn/DelphiIDEColorizerDXBerlin.dproj | 1 + IDE PlugIn/DelphiIDEColorizerDXSeattle.dpk | 1 + IDE PlugIn/DelphiIDEColorizerDXSeattle.dproj | 1 + IDE PlugIn/DelphiIDEColorizerXE2.dpk | 1 + IDE PlugIn/DelphiIDEColorizerXE2.dproj | 1 + IDE PlugIn/DelphiIDEColorizerXE3.dpk | 1 + IDE PlugIn/DelphiIDEColorizerXE3.dproj | 1 + IDE PlugIn/DelphiIDEColorizerXE4.dpk | 1 + IDE PlugIn/DelphiIDEColorizerXE4.dproj | 1 + IDE PlugIn/DelphiIDEColorizerXE5.dpk | 1 + IDE PlugIn/DelphiIDEColorizerXE5.dproj | 1 + IDE PlugIn/DelphiIDEColorizerXE6.dpk | 1 + IDE PlugIn/DelphiIDEColorizerXE6.dproj | 1 + IDE PlugIn/DelphiIDEColorizerXE7.dpk | 1 + IDE PlugIn/DelphiIDEColorizerXE7.dproj | 1 + IDE PlugIn/DelphiIDEColorizerXE8.dpk | 1 + IDE PlugIn/DelphiIDEColorizerXE8.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_DXBerlin.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_DXBerlin.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_DXSeattle.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_DXSeattle.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE2.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE2.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE3.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE3.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE4.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE4.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE5.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE5.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE6.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE6.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE7.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE7.dproj | 1 + IDE PlugIn/DelphiIDEColorizer_XE8.dpr | 1 + IDE PlugIn/DelphiIDEColorizer_XE8.dproj | 1 + 38 files changed, 38 insertions(+) diff --git a/IDE PlugIn/DelphiIDEColorizerDXBerlin.dpk b/IDE PlugIn/DelphiIDEColorizerDXBerlin.dpk index 50afab7..50e7035 100644 --- a/IDE PlugIn/DelphiIDEColorizerDXBerlin.dpk +++ b/IDE PlugIn/DelphiIDEColorizerDXBerlin.dpk @@ -55,6 +55,7 @@ contains uRttiHelper in 'uRttiHelper.pas', //Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerDXBerlin.dproj b/IDE PlugIn/DelphiIDEColorizerDXBerlin.dproj index e770598..a138b49 100644 --- a/IDE PlugIn/DelphiIDEColorizerDXBerlin.dproj +++ b/IDE PlugIn/DelphiIDEColorizerDXBerlin.dproj @@ -136,6 +136,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerDXSeattle.dpk b/IDE PlugIn/DelphiIDEColorizerDXSeattle.dpk index fe9cd49..8b253a6 100644 --- a/IDE PlugIn/DelphiIDEColorizerDXSeattle.dpk +++ b/IDE PlugIn/DelphiIDEColorizerDXSeattle.dpk @@ -55,6 +55,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerDXSeattle.dproj b/IDE PlugIn/DelphiIDEColorizerDXSeattle.dproj index 1f6ce72..6623ff8 100644 --- a/IDE PlugIn/DelphiIDEColorizerDXSeattle.dproj +++ b/IDE PlugIn/DelphiIDEColorizerDXSeattle.dproj @@ -136,6 +136,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerXE2.dpk b/IDE PlugIn/DelphiIDEColorizerXE2.dpk index 9baf1f6..91966a2 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE2.dpk +++ b/IDE PlugIn/DelphiIDEColorizerXE2.dpk @@ -55,6 +55,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerXE2.dproj b/IDE PlugIn/DelphiIDEColorizerXE2.dproj index 24c2bbe..019a4d7 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE2.dproj +++ b/IDE PlugIn/DelphiIDEColorizerXE2.dproj @@ -118,6 +118,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerXE3.dpk b/IDE PlugIn/DelphiIDEColorizerXE3.dpk index 88b5236..1f02db9 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE3.dpk +++ b/IDE PlugIn/DelphiIDEColorizerXE3.dpk @@ -53,6 +53,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerXE3.dproj b/IDE PlugIn/DelphiIDEColorizerXE3.dproj index 1c246f3..b39b710 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE3.dproj +++ b/IDE PlugIn/DelphiIDEColorizerXE3.dproj @@ -124,6 +124,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerXE4.dpk b/IDE PlugIn/DelphiIDEColorizerXE4.dpk index 4217cae..ad918e9 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE4.dpk +++ b/IDE PlugIn/DelphiIDEColorizerXE4.dpk @@ -55,6 +55,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerXE4.dproj b/IDE PlugIn/DelphiIDEColorizerXE4.dproj index 253fb9e..a1e73c7 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE4.dproj +++ b/IDE PlugIn/DelphiIDEColorizerXE4.dproj @@ -137,6 +137,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerXE5.dpk b/IDE PlugIn/DelphiIDEColorizerXE5.dpk index 0ad8866..fdbae09 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE5.dpk +++ b/IDE PlugIn/DelphiIDEColorizerXE5.dpk @@ -55,6 +55,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerXE5.dproj b/IDE PlugIn/DelphiIDEColorizerXE5.dproj index 7b006a9..c67baf3 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE5.dproj +++ b/IDE PlugIn/DelphiIDEColorizerXE5.dproj @@ -125,6 +125,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerXE6.dpk b/IDE PlugIn/DelphiIDEColorizerXE6.dpk index 427d9a8..e2acb19 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE6.dpk +++ b/IDE PlugIn/DelphiIDEColorizerXE6.dpk @@ -54,6 +54,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerXE6.dproj b/IDE PlugIn/DelphiIDEColorizerXE6.dproj index bcd818f..946cd79 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE6.dproj +++ b/IDE PlugIn/DelphiIDEColorizerXE6.dproj @@ -135,6 +135,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerXE7.dpk b/IDE PlugIn/DelphiIDEColorizerXE7.dpk index c43ffef..fe7707c 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE7.dpk +++ b/IDE PlugIn/DelphiIDEColorizerXE7.dpk @@ -55,6 +55,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerXE7.dproj b/IDE PlugIn/DelphiIDEColorizerXE7.dproj index c8f6144..50370ac 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE7.dproj +++ b/IDE PlugIn/DelphiIDEColorizerXE7.dproj @@ -135,6 +135,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizerXE8.dpk b/IDE PlugIn/DelphiIDEColorizerXE8.dpk index 8504515..baa0178 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE8.dpk +++ b/IDE PlugIn/DelphiIDEColorizerXE8.dpk @@ -55,6 +55,7 @@ contains uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizerXE8.dproj b/IDE PlugIn/DelphiIDEColorizerXE8.dproj index fc5ef3a..978c50c 100644 --- a/IDE PlugIn/DelphiIDEColorizerXE8.dproj +++ b/IDE PlugIn/DelphiIDEColorizerXE8.dproj @@ -135,6 +135,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dpr b/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dpr index eeb4268..af3fe53 100644 --- a/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dpr @@ -17,6 +17,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dproj b/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dproj index c650677..c922e5b 100644 --- a/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_DXBerlin.dproj @@ -106,6 +106,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dpr b/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dpr index 4fdea22..5b3617f 100644 --- a/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dproj b/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dproj index 2d70543..c313177 100644 --- a/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_DXSeattle.dproj @@ -114,6 +114,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE.dpr b/IDE PlugIn/DelphiIDEColorizer_XE.dpr index 08b8829..adcacfd 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE.dpr @@ -16,6 +16,7 @@ uses uRegistry in '..\Units\uRegistry.pas', uRttiHelper in 'uRttiHelper.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE.dproj b/IDE PlugIn/DelphiIDEColorizer_XE.dproj index 6175b2b..28df09a 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE.dproj @@ -75,6 +75,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE2.dpr b/IDE PlugIn/DelphiIDEColorizer_XE2.dpr index fa5b574..6e35c3c 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE2.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE2.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE2.dproj b/IDE PlugIn/DelphiIDEColorizer_XE2.dproj index 9300627..bfc7a1e 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE2.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE2.dproj @@ -113,6 +113,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE3.dpr b/IDE PlugIn/DelphiIDEColorizer_XE3.dpr index 4fb9805..e24cdf9 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE3.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE3.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE3.dproj b/IDE PlugIn/DelphiIDEColorizer_XE3.dproj index 52fb498..78e707b 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE3.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE3.dproj @@ -123,6 +123,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE4.dpr b/IDE PlugIn/DelphiIDEColorizer_XE4.dpr index 28fbf10..933ae50 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE4.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE4.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE4.dproj b/IDE PlugIn/DelphiIDEColorizer_XE4.dproj index 1350788..684f772 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE4.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE4.dproj @@ -112,6 +112,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE5.dpr b/IDE PlugIn/DelphiIDEColorizer_XE5.dpr index f0d01b9..d2e800c 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE5.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE5.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE5.dproj b/IDE PlugIn/DelphiIDEColorizer_XE5.dproj index e655d66..4bc87ca 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE5.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE5.dproj @@ -113,6 +113,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE6.dpr b/IDE PlugIn/DelphiIDEColorizer_XE6.dpr index 29b9e5d..ed8496d 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE6.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE6.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE6.dproj b/IDE PlugIn/DelphiIDEColorizer_XE6.dproj index 6993377..75b2e36 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE6.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE6.dproj @@ -114,6 +114,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE7.dpr b/IDE PlugIn/DelphiIDEColorizer_XE7.dpr index 666940f..49bb7d0 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE7.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE7.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE7.dproj b/IDE PlugIn/DelphiIDEColorizer_XE7.dproj index 38e17b0..c0b5b17 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE7.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE7.dproj @@ -113,6 +113,7 @@ + diff --git a/IDE PlugIn/DelphiIDEColorizer_XE8.dpr b/IDE PlugIn/DelphiIDEColorizer_XE8.dpr index 3cce9f5..62c5b31 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE8.dpr +++ b/IDE PlugIn/DelphiIDEColorizer_XE8.dpr @@ -16,6 +16,7 @@ uses uRttiHelper in 'uRttiHelper.pas', Vcl.Styles.Ext in '..\Common\Vcl Styles Utils\Vcl.Styles.Ext.pas', DDetours in '..\Common\delphi-detours-library\DDetours.pas', + CPUID in '..\Common\delphi-detours-library\CPUID.pas', InstDecode in '..\Common\delphi-detours-library\InstDecode.pas', uDelphiIDEHighlight in '..\Units\uDelphiIDEHighlight.pas', uStackTrace in '..\Units\uStackTrace.pas', diff --git a/IDE PlugIn/DelphiIDEColorizer_XE8.dproj b/IDE PlugIn/DelphiIDEColorizer_XE8.dproj index 271c894..cfcaf84 100644 --- a/IDE PlugIn/DelphiIDEColorizer_XE8.dproj +++ b/IDE PlugIn/DelphiIDEColorizer_XE8.dproj @@ -114,6 +114,7 @@ +