/* ==================================================================== * * ==================================================================== */ void __bea_callspec__ EvIb(PDISASM pMyDisasm) { Int8 MyNumber; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; GV.ImmediatSize = 8; if (GV.OperandSize >= 32) { if (GV.OperandSize == 64) { GV.MemDecoration = Arg1qword; } else { GV.MemDecoration = Arg1dword; } MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; if (GV.OperandSize == 32) { #ifndef BEA_LIGHT_DISASSEMBLY MyNumber = *((Int8*)(UIntPtr) (GV.EIP_-1)); if (MyNumber > 0) { (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64)*((Int8*)(UIntPtr) (GV.EIP_-1))); } else { (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.8X",(Int64)*((Int8*)(IntPtr) (GV.EIP_-1))); } #endif } else { #ifndef BEA_LIGHT_DISASSEMBLY MyNumber = *((Int8*)(UIntPtr) (GV.EIP_-1)); if (MyNumber > 0) { (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64)*((Int8*)(UIntPtr) (GV.EIP_-1))); } else { (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.16llX",(Int64)*((Int8*)(IntPtr) (GV.EIP_-1))); } #endif } (*pMyDisasm).Instruction.Immediat = *((UInt8*)(UIntPtr) (GV.EIP_-1)); } else { GV.MemDecoration = Arg1word; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.4X",(Int64)*((Int8*)(UIntPtr) (GV.EIP_-1))); #endif (*pMyDisasm).Instruction.Immediat = *((UInt8*)(UIntPtr) (GV.EIP_-1)); } }
/* ==================================================================== * * ==================================================================== */ void __bea_callspec__ EvIv(PDISASM pMyDisasm) { if (GV.OperandSize >= 32) { if (GV.OperandSize == 64) { GV.MemDecoration = Arg1qword; } else { GV.MemDecoration = Arg1dword; } GV.ImmediatSize = 32; /* place this instruction before MOD_RM routine to inform it there is an immediat value */ MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.EIP_ += GV.DECALAGE_EIP+6; if (!Security(0, pMyDisasm)) return; #ifndef BEA_LIGHT_DISASSEMBLY if (GV.OperandSize == 64) { (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.16llX",(Int64) *((Int32*)(UIntPtr) (GV.EIP_-4))); } else { (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.8X",(Int64) *((UInt32*)(UIntPtr) (GV.EIP_-4))); } #endif (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 32; (*pMyDisasm).Instruction.Immediat = *((UInt32*)(UIntPtr) (GV.EIP_-4)); } else { GV.MemDecoration = Arg1word; GV.ImmediatSize = 16; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.EIP_ += GV.DECALAGE_EIP+4; if (!Security(0, pMyDisasm)) return; #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.4X",(Int64)*((UInt16*)(UIntPtr) (GV.EIP_-2))); #endif (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 16; (*pMyDisasm).Instruction.Immediat = *((UInt16*)(UIntPtr) (GV.EIP_-2)); } }
/* ==================================================================== * * ==================================================================== */ void __bea_callspec__ EbIb(PDISASM pMyDisasm) { (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; GV.ImmediatSize = 8; GV.MemDecoration = Arg1byte; GV.OperandSize = 8; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.OperandSize = 32; GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.8X",(Int64)*((Int8*)(UIntPtr) (GV.EIP_-1))); #endif (*pMyDisasm).Instruction.Immediat = *((UInt8*)(UIntPtr) (GV.EIP_-1)); }
/* ==================================================================== * * ==================================================================== */ void __bea_callspec__ ALIb(PDISASM pMyDisasm) { long MyNumber; if (!Security(2, pMyDisasm)) return; GV.ImmediatSize = 8; MyNumber = *((Int8*)(IntPtr) (GV.EIP_+1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy((char*) &(*pMyDisasm).Argument1.ArgMnemonic, Registers8Bits[0]); #endif (*pMyDisasm).Argument1.ArgType = REGISTER_TYPE+GENERAL_REG+REG0; (*pMyDisasm).Argument1.ArgSize = 8; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; GV.EIP_ += 2; }
/* ==================================================================== * * ==================================================================== */ void __bea_callspec__ G12_(PDISASM pMyDisasm) { long MyNumber; GV.REGOPCODE = ((*((UInt8*)(UIntPtr) (GV.EIP_+1))) >> 3) & 0x7; if (GV.REGOPCODE == 2) { if (GV.OperandSize == 16) { (*pMyDisasm).Instruction.Category = SSE_INSTRUCTION+SHIFT_ROTATE; GV.MemDecoration = Arg1dqword; GV.ImmediatSize = 8; GV.SSE_ = 1; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.SSE_ = 0; if (GV.MOD_== 0x3) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "psrlw "); #endif } else { FailDecode(pMyDisasm); } GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; MyNumber = *((UInt8*)(UIntPtr) (GV.EIP_-1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; } else { (*pMyDisasm).Instruction.Category = MMX_INSTRUCTION+SHIFT_ROTATE; GV.MemDecoration = Arg1qword; GV.ImmediatSize = 8; GV.MMX_ = 1; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.MMX_ = 0; if (GV.MOD_== 0x3) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "psrlw "); #endif } else { FailDecode(pMyDisasm); } GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; MyNumber = *((UInt8*)(UIntPtr) (GV.EIP_-1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; } } else if (GV.REGOPCODE == 4) { if (GV.OperandSize == 16) { (*pMyDisasm).Instruction.Category = SSE_INSTRUCTION+SHIFT_ROTATE; GV.MemDecoration = Arg1dqword; GV.ImmediatSize = 8; GV.SSE_ = 1; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.SSE_ = 0; if (GV.MOD_== 0x3) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "psraw "); #endif } else { FailDecode(pMyDisasm); } GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; MyNumber = *((UInt8*)(UIntPtr) (GV.EIP_-1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; } else { (*pMyDisasm).Instruction.Category = MMX_INSTRUCTION+SHIFT_ROTATE; GV.MemDecoration = Arg1qword; GV.ImmediatSize = 8; GV.MMX_ = 1; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.MMX_ = 0; if (GV.MOD_== 0x3) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "psraw "); #endif } else { FailDecode(pMyDisasm); } GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; MyNumber = *((UInt8*)(UIntPtr) (GV.EIP_-1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; } } else if (GV.REGOPCODE == 6) { if (GV.OperandSize == 16) { (*pMyDisasm).Instruction.Category = SSE_INSTRUCTION+SHIFT_ROTATE; GV.MemDecoration = Arg1dqword; GV.ImmediatSize = 8; GV.SSE_ = 1; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.SSE_ = 0; if (GV.MOD_== 0x3) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "psllw "); #endif } else { FailDecode(pMyDisasm); } GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; MyNumber = *((UInt8*)(UIntPtr) (GV.EIP_-1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; } else { (*pMyDisasm).Instruction.Category = MMX_INSTRUCTION+SHIFT_ROTATE; GV.MemDecoration = Arg1qword; GV.ImmediatSize = 8; GV.MMX_ = 1; MOD_RM(&(*pMyDisasm).Argument1, pMyDisasm); GV.MMX_ = 0; if (GV.MOD_== 0x3) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "psllw "); #endif } else { FailDecode(pMyDisasm); } GV.EIP_ += GV.DECALAGE_EIP+3; if (!Security(0, pMyDisasm)) return; MyNumber = *((UInt8*)(UIntPtr) (GV.EIP_-1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.2X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; (*pMyDisasm).Argument2.ArgSize = 8; } } else { FailDecode(pMyDisasm); } }
/* ==================================================================== * * ==================================================================== */ void __bea_callspec__ eAX_Iv(PDISASM pMyDisasm) { UInt32 MyNumber; (*pMyDisasm).Argument1.ArgType = REGISTER_TYPE+GENERAL_REG+REG0; (*pMyDisasm).Argument2.ArgType = CONSTANT_TYPE+ABSOLUTE_; if (GV.OperandSize == 64) { if (!Security(5, pMyDisasm)) return; GV.ImmediatSize = 32; (*pMyDisasm).Argument1.ArgSize = 64; (*pMyDisasm).Argument2.ArgSize = 32; MyNumber = *((UInt32*)(UIntPtr) (GV.EIP_+1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.16llX",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; if (GV.REX.B_ == 1) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((char*) (*pMyDisasm).Argument1.ArgMnemonic, Registers64Bits[0+8]); #endif } else { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((char*) (*pMyDisasm).Argument1.ArgMnemonic, Registers64Bits[0]); #endif } GV.EIP_+= 5; } else if (GV.OperandSize == 32) { if (!Security(5, pMyDisasm)) return; GV.ImmediatSize = 32; (*pMyDisasm).Argument1.ArgSize = 32; (*pMyDisasm).Argument2.ArgSize = 32; MyNumber = *((UInt32*)(UIntPtr) (GV.EIP_+1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.8X",(Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; if (GV.REX.B_ == 1) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((char*) (*pMyDisasm).Argument1.ArgMnemonic, Registers32Bits[0+8]); #endif } else { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((char*) (*pMyDisasm).Argument1.ArgMnemonic, Registers32Bits[0]); #endif } GV.EIP_+= 5; } else { if (!Security(3, pMyDisasm)) return; GV.ImmediatSize = 16; (*pMyDisasm).Argument1.ArgSize = 16; (*pMyDisasm).Argument2.ArgSize = 16; MyNumber = *((UInt16*)(UIntPtr) (GV.EIP_+1)); #ifndef BEA_LIGHT_DISASSEMBLY (void) CopyFormattedNumber(pMyDisasm, (char*) &(*pMyDisasm).Argument2.ArgMnemonic,"%.8X", (Int64) MyNumber); #endif (*pMyDisasm).Instruction.Immediat = MyNumber; if (GV.REX.B_ == 1) { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((char*) (*pMyDisasm).Argument1.ArgMnemonic, Registers16Bits[0+8]); #endif } else { #ifndef BEA_LIGHT_DISASSEMBLY (void) strcpy ((char*) (*pMyDisasm).Argument1.ArgMnemonic, Registers16Bits[0]); #endif } GV.EIP_+= 3; } }