You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.4 KiB
39 lines
1.4 KiB
3 years ago
|
#include "RipAndInst.h"
|
||
|
|
||
|
BOOL JitEmitRipRelativeAndD(PNATIVE_CODE_BLOCK Block, INT32 RipDelta, ULONG Value)
|
||
|
{
|
||
|
UCHAR RawData[] = { 0x81, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||
|
|
||
|
PNATIVE_CODE_LINK Link = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST | CODE_FLAG_DO_NOT_DIVIDE, RawData, sizeof(RawData));
|
||
|
*(PINT32)&Link->RawData[2] = RipDelta;
|
||
|
*(PULONG)&Link->RawData[6] = Value;
|
||
|
XedDecode(&Link->XedInstruction, Link->RawData, Link->RawDataSize);
|
||
|
NcAppendToBlock(Block, Link);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
BOOL JitEmitRipRelativeAndW(PNATIVE_CODE_BLOCK Block, INT32 RipDelta, ULONG Value)
|
||
|
{
|
||
|
UCHAR RawData[] = { 0x66, 0x83, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||
|
|
||
|
PNATIVE_CODE_LINK Link = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST | CODE_FLAG_DO_NOT_DIVIDE, RawData, sizeof(RawData));
|
||
|
*(PINT32)&Link->RawData[3] = RipDelta;
|
||
|
*(PUSHORT)&Link->RawData[7] = (USHORT)Value;
|
||
|
XedDecode(&Link->XedInstruction, Link->RawData, Link->RawDataSize);
|
||
|
NcAppendToBlock(Block, Link);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
BOOL JitEmitRipRelativeAndB(PNATIVE_CODE_BLOCK Block, INT32 RipDelta, ULONG Value)
|
||
|
{
|
||
|
UCHAR RawData[] = { 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||
|
|
||
|
PNATIVE_CODE_LINK Link = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST | CODE_FLAG_DO_NOT_DIVIDE, RawData, sizeof(RawData));
|
||
|
*(PINT32)&Link->RawData[2] = RipDelta;
|
||
|
*(PUCHAR)&Link->RawData[6] = (UCHAR)Value;
|
||
|
XedDecode(&Link->XedInstruction, Link->RawData, Link->RawDataSize);
|
||
|
NcAppendToBlock(Block, Link);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|