Files
HeidiSQL/components/detours/Source/ModRmFlagsTables.inc

140 lines
5.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// **************************************************************************************************
// 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 Developers 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 }
);