mirror of https://github.com/x64dbg/zydis
Minor bugfixes and refactorings
This commit is contained in:
parent
477a908bb0
commit
bfcbe3e8c1
|
@ -279,50 +279,32 @@ type
|
||||||
property Registers: TX86RegisterSet read FRegisters write SetRegisters;
|
property Registers: TX86RegisterSet read FRegisters write SetRegisters;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TX86FlagValue = (
|
TX86FlagBehavior = (
|
||||||
fvUnused,
|
|
||||||
fvTested,
|
fvTested,
|
||||||
fvModified,
|
fvModified,
|
||||||
fvReset,
|
fvReset,
|
||||||
fvSet,
|
fvSet,
|
||||||
fvUndefined,
|
fvUndefined
|
||||||
fvPriorValue
|
|
||||||
);
|
);
|
||||||
|
TX86FlagBehaviorSet = set of TX86FlagBehavior;
|
||||||
|
|
||||||
TX86Flags = class(TPersistent)
|
TX86Flags = class(TPersistent)
|
||||||
strict private
|
strict private
|
||||||
type PX86FlagValue = ^TX86FlagValue;
|
type PX86FlagBehaviorSet = ^TX86FlagBehaviorSet;
|
||||||
strict private
|
strict private
|
||||||
FDefinition: TInstructionDefinition;
|
FDefinition: TInstructionDefinition;
|
||||||
strict private
|
strict private
|
||||||
FCF: TX86FlagValue;
|
FFlags: array[0..16] of TX86FlagBehaviorSet;
|
||||||
FPF: TX86FlagValue;
|
|
||||||
FAF: TX86FlagValue;
|
|
||||||
FZF: TX86FlagValue;
|
|
||||||
FSF: TX86FlagValue;
|
|
||||||
FTF: TX86FlagValue;
|
|
||||||
FIF: TX86FlagValue;
|
|
||||||
FDF: TX86FlagValue;
|
|
||||||
FOF: TX86FlagValue;
|
|
||||||
FIOPL: TX86FlagValue;
|
|
||||||
FNT: TX86FlagValue;
|
|
||||||
FRF: TX86FlagValue;
|
|
||||||
FVM: TX86FlagValue;
|
|
||||||
FAC: TX86FlagValue;
|
|
||||||
FVIF: TX86FlagValue;
|
|
||||||
FVIP: TX86FlagValue;
|
|
||||||
FID: TX86FlagValue;
|
|
||||||
strict private
|
strict private
|
||||||
function GetFlagValue(Index: Integer): TX86FlagValue; inline;
|
function GetValue(Index: Integer): TX86FlagBehaviorSet; inline;
|
||||||
strict private
|
procedure SetValue(Index: Integer; const Value: TX86FlagBehaviorSet); inline;
|
||||||
procedure SetFlagValue(Index: Integer; const Value: TX86FlagValue); inline;
|
|
||||||
strict private
|
strict private
|
||||||
procedure Changed; inline;
|
procedure Changed; inline;
|
||||||
strict private
|
strict private
|
||||||
function GetConflictState: Boolean;
|
function GetConflictState: Boolean;
|
||||||
strict private
|
strict private
|
||||||
function GetFlagCount: Integer; inline;
|
function GetFlagCount: Integer; inline;
|
||||||
function GetFlagById(Id: Integer): PX86FlagValue; inline;
|
function GetFlagPointer(Index: Integer): PX86FlagBehaviorSet; inline;
|
||||||
public // TODO: Make private again
|
public // TODO: Make private again
|
||||||
procedure LoadFromJSON(JSON: PJSONVariantData; const FieldName: String);
|
procedure LoadFromJSON(JSON: PJSONVariantData; const FieldName: String);
|
||||||
procedure SaveToJSON(JSON: PJSONVariantData; const FieldName: String);
|
procedure SaveToJSON(JSON: PJSONVariantData; const FieldName: String);
|
||||||
|
@ -330,30 +312,34 @@ type
|
||||||
procedure AssignTo(Dest: TPersistent); override;
|
procedure AssignTo(Dest: TPersistent); override;
|
||||||
protected
|
protected
|
||||||
constructor Create(Definition: TInstructionDefinition);
|
constructor Create(Definition: TInstructionDefinition);
|
||||||
|
public
|
||||||
|
function GetFlagName(Index: Integer): String; inline;
|
||||||
public
|
public
|
||||||
function Equals(const Value: TX86Flags): Boolean; reintroduce;
|
function Equals(const Value: TX86Flags): Boolean; reintroduce;
|
||||||
public
|
public
|
||||||
property HasConflicts: Boolean read GetConflictState;
|
property HasConflicts: Boolean read GetConflictState;
|
||||||
|
property Flags[Index: Integer]: TX86FlagBehaviorSet read GetValue write SetValue;
|
||||||
|
property FlagCount: Integer read GetFlagCount;
|
||||||
published
|
published
|
||||||
{ FLAGS }
|
{ FLAGS }
|
||||||
property FlagCF: TX86FlagValue index 0 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagCF : TX86FlagBehaviorSet index 0 read GetValue write SetValue default [];
|
||||||
property FlagPF: TX86FlagValue index 1 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagPF : TX86FlagBehaviorSet index 1 read GetValue write SetValue default [];
|
||||||
property FlagAF: TX86FlagValue index 2 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagAF : TX86FlagBehaviorSet index 2 read GetValue write SetValue default [];
|
||||||
property FlagZF: TX86FlagValue index 3 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagZF : TX86FlagBehaviorSet index 3 read GetValue write SetValue default [];
|
||||||
property FlagSF: TX86FlagValue index 4 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagSF : TX86FlagBehaviorSet index 4 read GetValue write SetValue default [];
|
||||||
property FlagTF: TX86FlagValue index 5 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagTF : TX86FlagBehaviorSet index 5 read GetValue write SetValue default [];
|
||||||
property FlagIF: TX86FlagValue index 6 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagIF : TX86FlagBehaviorSet index 6 read GetValue write SetValue default [];
|
||||||
property FlagDF: TX86FlagValue index 7 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagDF : TX86FlagBehaviorSet index 7 read GetValue write SetValue default [];
|
||||||
property FlagOF: TX86FlagValue index 8 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagOF : TX86FlagBehaviorSet index 8 read GetValue write SetValue default [];
|
||||||
property FlagIOPL: TX86FlagValue index 9 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagIOPL: TX86FlagBehaviorSet index 9 read GetValue write SetValue default [];
|
||||||
property FlagNT: TX86FlagValue index 10 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagNT : TX86FlagBehaviorSet index 10 read GetValue write SetValue default [];
|
||||||
{ EFLAGS }
|
{ EFLAGS }
|
||||||
property FlagRF: TX86FlagValue index 11 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagRF : TX86FlagBehaviorSet index 11 read GetValue write SetValue default [];
|
||||||
property FlagVM: TX86FlagValue index 12 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagVM : TX86FlagBehaviorSet index 12 read GetValue write SetValue default [];
|
||||||
property FlagAC: TX86FlagValue index 13 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagAC : TX86FlagBehaviorSet index 13 read GetValue write SetValue default [];
|
||||||
property FlagVIF: TX86FlagValue index 14 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagVIF : TX86FlagBehaviorSet index 14 read GetValue write SetValue default [];
|
||||||
property FlagVIP: TX86FlagValue index 15 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagVIP : TX86FlagBehaviorSet index 15 read GetValue write SetValue default [];
|
||||||
property FlagID: TX86FlagValue index 16 read GetFlagValue write SetFlagValue default fvUnused;
|
property FlagID : TX86FlagBehaviorSet index 16 read GetValue write SetValue default [];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{TEVEXEncodingContext = (
|
{TEVEXEncodingContext = (
|
||||||
|
@ -1108,14 +1094,12 @@ const
|
||||||
|
|
||||||
{$REGION 'Const: JSON strings for TX86Flags'}
|
{$REGION 'Const: JSON strings for TX86Flags'}
|
||||||
const
|
const
|
||||||
SX86FlagValue: array[TX86FlagValue] of String = (
|
SX86FlagBehavior: array[TX86FlagBehavior] of String = (
|
||||||
'unused',
|
|
||||||
'tested',
|
'tested',
|
||||||
'modified',
|
'modified',
|
||||||
'reset',
|
'reset',
|
||||||
'set',
|
'set',
|
||||||
'undefined',
|
'undefined'
|
||||||
'prior'
|
|
||||||
);
|
);
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
|
@ -1719,7 +1703,7 @@ begin
|
||||||
D := Dest as TX86Flags;
|
D := Dest as TX86Flags;
|
||||||
for I := 0 to GetFlagCount - 1 do
|
for I := 0 to GetFlagCount - 1 do
|
||||||
begin
|
begin
|
||||||
D.SetFlagValue(I, GetFlagValue(I));
|
D.SetValue(I, GetValue(I));
|
||||||
end;
|
end;
|
||||||
D.Changed;
|
D.Changed;
|
||||||
end else inherited;
|
end else inherited;
|
||||||
|
@ -1746,7 +1730,7 @@ begin
|
||||||
Result := true;
|
Result := true;
|
||||||
for I := 0 to GetFlagCount - 1 do
|
for I := 0 to GetFlagCount - 1 do
|
||||||
begin
|
begin
|
||||||
if (GetFlagValue(I) <> Value.GetFlagValue(I)) then
|
if (GetValue(I) <> Value.GetValue(I)) then
|
||||||
begin
|
begin
|
||||||
Result := false;
|
Result := false;
|
||||||
Break;
|
Break;
|
||||||
|
@ -1757,19 +1741,28 @@ end;
|
||||||
function TX86Flags.GetConflictState: Boolean;
|
function TX86Flags.GetConflictState: Boolean;
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: Integer;
|
||||||
F: TX86FlagValue;
|
S: TX86FlagBehaviorSet;
|
||||||
|
F: TX86FlagBehavior;
|
||||||
RegsRead,
|
RegsRead,
|
||||||
RegsWrite: TX86RegisterSet;
|
RegsWrite: TX86RegisterSet;
|
||||||
R: TX86Register;
|
R: TX86Register;
|
||||||
begin
|
begin
|
||||||
Exit(false);
|
|
||||||
|
|
||||||
Result := false;
|
Result := false;
|
||||||
RegsRead := [];
|
RegsRead := [];
|
||||||
RegsWrite := [];
|
RegsWrite := [];
|
||||||
for I := 0 to GetFlagCount - 1 do
|
for I := 0 to GetFlagCount - 1 do
|
||||||
begin
|
begin
|
||||||
F := GetFlagValue(I);
|
S := GetValue(I);
|
||||||
|
|
||||||
|
// Write operations are mutally exclusive
|
||||||
|
if (not (Ord(fvModified in S) + Ord(fvReset in S) + Ord(fvSet in S) + Ord(fvUndefined in S) in
|
||||||
|
[Ord(false), Ord(true)])) then
|
||||||
|
begin
|
||||||
|
Exit(true);
|
||||||
|
end;
|
||||||
|
|
||||||
|
for F in S do
|
||||||
|
begin
|
||||||
if (F in [fvTested]) then
|
if (F in [fvTested]) then
|
||||||
begin
|
begin
|
||||||
if (I < 9) then
|
if (I < 9) then
|
||||||
|
@ -1782,7 +1775,7 @@ begin
|
||||||
Include(RegsRead, regEFLAGS);
|
Include(RegsRead, regEFLAGS);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if (F in [fvModified, fvReset, fvSet, fvUndefined, fvPriorValue]) then
|
if (F in [fvModified, fvReset, fvSet, fvUndefined]) then
|
||||||
begin
|
begin
|
||||||
if (I < 9) then
|
if (I < 9) then
|
||||||
begin
|
begin
|
||||||
|
@ -1795,6 +1788,7 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
for R := regRFLAGS to regFLAGS do
|
for R := regRFLAGS to regFLAGS do
|
||||||
begin
|
begin
|
||||||
if ((R in RegsRead) xor (R in FDefinition.ImplicitRead.Registers)) or
|
if ((R in RegsRead) xor (R in FDefinition.ImplicitRead.Registers)) or
|
||||||
|
@ -1807,42 +1801,46 @@ end;
|
||||||
|
|
||||||
function TX86Flags.GetFlagCount: Integer;
|
function TX86Flags.GetFlagCount: Integer;
|
||||||
begin
|
begin
|
||||||
Result := 17;
|
Result := Length(FFlags);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TX86Flags.GetFlagValue(Index: Integer): TX86FlagValue;
|
function TX86Flags.GetFlagName(Index: Integer): String;
|
||||||
begin
|
begin
|
||||||
Result := GetFlagById(Index)^;
|
Result := '';
|
||||||
|
case Index of
|
||||||
|
0: Result := 'cf';
|
||||||
|
1: Result := 'pf';
|
||||||
|
2: Result := 'af';
|
||||||
|
3: Result := 'zf';
|
||||||
|
4: Result := 'sf';
|
||||||
|
5: Result := 'tf';
|
||||||
|
6: Result := 'if';
|
||||||
|
7: Result := 'df';
|
||||||
|
8: Result := 'of';
|
||||||
|
9: Result := 'iopl';
|
||||||
|
10: Result := 'nt';
|
||||||
|
11: Result := 'rf';
|
||||||
|
12: Result := 'vm';
|
||||||
|
13: Result := 'ac';
|
||||||
|
14: Result := 'vif';
|
||||||
|
15: Result := 'vip';
|
||||||
|
16: Result := 'id';
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TX86Flags.GetFlagById(Id: Integer): PX86FlagValue;
|
function TX86Flags.GetFlagPointer(Index: Integer): PX86FlagBehaviorSet;
|
||||||
begin
|
begin
|
||||||
Result := nil;
|
Result := @FFlags[Index];
|
||||||
case Id of
|
|
||||||
0: Result := @FCF;
|
|
||||||
1: Result := @FPF;
|
|
||||||
2: Result := @FAF;
|
|
||||||
3: Result := @FZF;
|
|
||||||
4: Result := @FSF;
|
|
||||||
5: Result := @FTF;
|
|
||||||
6: Result := @FIF;
|
|
||||||
7: Result := @FDF;
|
|
||||||
8: Result := @FOF;
|
|
||||||
9: Result := @FIOPL;
|
|
||||||
10: Result := @FNT;
|
|
||||||
11: Result := @FRF;
|
|
||||||
12: Result := @FVM;
|
|
||||||
13: Result := @FAC;
|
|
||||||
14: Result := @FVIF;
|
|
||||||
15: Result := @FVIP;
|
|
||||||
16: Result := @FID;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TX86Flags.GetValue(Index: Integer): TX86FlagBehaviorSet;
|
||||||
|
begin
|
||||||
|
Result := GetFlagPointer(Index)^;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TX86Flags.LoadFromJSON(JSON: PJSONVariantData; const FieldName: String);
|
procedure TX86Flags.LoadFromJSON(JSON: PJSONVariantData; const FieldName: String);
|
||||||
var
|
var
|
||||||
C: PJSONVariantData;
|
C: PJSONVariantData;
|
||||||
N: array[0..16] of String;
|
|
||||||
I: Integer;
|
I: Integer;
|
||||||
begin
|
begin
|
||||||
C := JSON.Data(FieldName);
|
C := JSON.Data(FieldName);
|
||||||
|
@ -1852,13 +1850,10 @@ begin
|
||||||
begin
|
begin
|
||||||
raise Exception.CreateFmt('The "%s" field is not a valid JSON object.', [FieldName]);
|
raise Exception.CreateFmt('The "%s" field is not a valid JSON object.', [FieldName]);
|
||||||
end;
|
end;
|
||||||
N[ 0] := 'cf'; N[ 1] := 'pf'; N[ 2] := 'af'; N[ 3] := 'zf'; N[ 4] := 'sf';
|
|
||||||
N[ 5] := 'tf'; N[ 6] := 'if'; N[ 7] := 'df'; N[ 8] := 'of'; N[ 9] := 'iopl';
|
|
||||||
N[10] := 'nt'; N[11] := 'rf'; N[12] := 'vm'; N[13] := 'ac'; N[14] := 'vif';
|
|
||||||
N[15] := 'vip'; N[16] := 'id';
|
|
||||||
for I := 0 to GetFlagCount - 1 do
|
for I := 0 to GetFlagCount - 1 do
|
||||||
begin
|
begin
|
||||||
GetFlagById(I)^ := TJSONEnumHelper<TX86FlagValue>.ReadValue(C, N[I], SX86FlagValue);
|
GetFlagPointer(I)^ :=
|
||||||
|
TJSONSetHelper<TX86FlagBehaviorSet>.ReadValue(C, GetFlagName(I), SX86FlagBehavior);
|
||||||
end;
|
end;
|
||||||
Changed;
|
Changed;
|
||||||
end;
|
end;
|
||||||
|
@ -1866,22 +1861,21 @@ end;
|
||||||
|
|
||||||
procedure TX86Flags.SaveToJSON(JSON: PJSONVariantData; const FieldName: String);
|
procedure TX86Flags.SaveToJSON(JSON: PJSONVariantData; const FieldName: String);
|
||||||
var
|
var
|
||||||
N: array[0..16] of String;
|
F: TX86FlagBehavior;
|
||||||
F: TX86FlagValue;
|
J, A: TJSONVariantData;
|
||||||
J: TJSONVariantData;
|
|
||||||
I: Integer;
|
I: Integer;
|
||||||
begin
|
begin
|
||||||
N[ 0] := 'cf'; N[ 1] := 'pf'; N[ 2] := 'af'; N[ 3] := 'zf'; N[ 4] := 'sf';
|
|
||||||
N[ 5] := 'tf'; N[ 6] := 'if'; N[ 7] := 'df'; N[ 8] := 'of'; N[ 9] := 'iopl';
|
|
||||||
N[10] := 'nt'; N[11] := 'rf'; N[12] := 'vm'; N[13] := 'ac'; N[14] := 'vif';
|
|
||||||
N[15] := 'vip'; N[16] := 'id';
|
|
||||||
J.Init;
|
J.Init;
|
||||||
for I := 0 to GetFlagCount - 1 do
|
for I := 0 to GetFlagCount - 1 do
|
||||||
begin
|
begin
|
||||||
F := GetFlagValue(I);
|
A.Init;
|
||||||
if (F <> fvUnused) then
|
for F in GetValue(I) do
|
||||||
begin
|
begin
|
||||||
J.AddNameValue(N[I], SX86FlagValue[F]);
|
A.AddValue(SX86FlagBehavior[F]);
|
||||||
|
end;
|
||||||
|
if (A.Count > 0) then
|
||||||
|
begin
|
||||||
|
J.AddNameValue(GetFlagName(I), Variant(A));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if (J.Count > 0) then
|
if (J.Count > 0) then
|
||||||
|
@ -1890,11 +1884,11 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TX86Flags.SetFlagValue(Index: Integer; const Value: TX86FlagValue);
|
procedure TX86Flags.SetValue(Index: Integer; const Value: TX86FlagBehaviorSet);
|
||||||
var
|
var
|
||||||
Flag: PX86FlagValue;
|
Flag: PX86FlagBehaviorSet;
|
||||||
begin
|
begin
|
||||||
Flag := GetFlagById(Index);
|
Flag := GetFlagPointer(Index);
|
||||||
if (Flag^ <> Value) then
|
if (Flag^ <> Value) then
|
||||||
begin
|
begin
|
||||||
Flag^ := Value;
|
Flag^ := Value;
|
||||||
|
|
|
@ -465,16 +465,16 @@ static ZydisStatus ZydisFormatterPrintImmediateIntel(ZydisInstructionFormatter*
|
||||||
{
|
{
|
||||||
case 8:
|
case 8:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02X", -operand->imm.value.sbyte);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02"PRIX8, -operand->imm.value.sbyte);
|
||||||
case 16:
|
case 16:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02X", -operand->imm.value.sword);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02"PRIX16, -operand->imm.value.sword);
|
||||||
case 32:
|
case 32:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02lX", -operand->imm.value.sdword);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02"PRIX32, -operand->imm.value.sdword);
|
||||||
case 64:
|
case 64:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02llX", -operand->imm.value.sqword);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "-0x%02"PRIX64, -operand->imm.value.sqword);
|
||||||
default:
|
default:
|
||||||
return ZYDIS_STATUS_INVALID_PARAMETER;
|
return ZYDIS_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
@ -483,16 +483,16 @@ static ZydisStatus ZydisFormatterPrintImmediateIntel(ZydisInstructionFormatter*
|
||||||
{
|
{
|
||||||
case 8:
|
case 8:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02X", operand->imm.value.ubyte);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02"PRIX8, operand->imm.value.ubyte);
|
||||||
case 16:
|
case 16:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02X", operand->imm.value.uword);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02"PRIX16, operand->imm.value.uword);
|
||||||
case 32:
|
case 32:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02lX", operand->imm.value.udword);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02"PRIX32, operand->imm.value.udword);
|
||||||
case 64:
|
case 64:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen,
|
||||||
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02llX", operand->imm.value.uqword);
|
ZYDIS_STRBUF_APPEND_MODE_DEFAULT, "0x%02"PRIX64, operand->imm.value.uqword);
|
||||||
default:
|
default:
|
||||||
return ZYDIS_STATUS_INVALID_PARAMETER;
|
return ZYDIS_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue