mirror of https://github.com/x64dbg/TitanEngine
fixed detection when stepping over 'pop ss, pushfd/q' (thanks to firelegend for reporting)
This commit is contained in:
parent
a6a093760a
commit
a815753c52
|
|
@ -50,20 +50,27 @@ __declspec(dllexport) void TITCALL ForceClose()
|
||||||
__declspec(dllexport) void TITCALL StepInto(LPVOID StepCallBack)
|
__declspec(dllexport) void TITCALL StepInto(LPVOID StepCallBack)
|
||||||
{
|
{
|
||||||
ULONG_PTR ueCurrentPosition = GetContextData(UE_CIP);
|
ULONG_PTR ueCurrentPosition = GetContextData(UE_CIP);
|
||||||
unsigned char instr[16];
|
unsigned char instr[32]; //two instructions
|
||||||
MemoryReadSafe(dbgProcessInformation.hProcess, (void*)ueCurrentPosition, instr, sizeof(instr), 0);
|
MemoryReadSafe(dbgProcessInformation.hProcess, (void*)ueCurrentPosition, instr, sizeof(instr), 0);
|
||||||
char* DisassembledString = (char*)StaticDisassembleEx(ueCurrentPosition, (LPVOID)instr);
|
char* DisassembledString = (char*)StaticDisassembleEx(ueCurrentPosition, (LPVOID)instr);
|
||||||
if(strstr(DisassembledString, "PUSHF"))
|
if(strstr(DisassembledString, "PUSHF"))
|
||||||
StepOver(StepCallBack);
|
StepOver(StepCallBack);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ULONG_PTR ueContext = NULL;
|
int len = StaticLengthDisassemble((LPVOID)instr);
|
||||||
ueContext = (ULONG_PTR)GetContextData(UE_EFLAGS);
|
DisassembledString = (char*)StaticDisassembleEx(ueCurrentPosition + len, (LPVOID)(instr + len));
|
||||||
ueContext |= UE_TRAP_FLAG;
|
if(strstr(DisassembledString, "PUSHF")) //we wanna land on PUSHF safely (to prevent 'PUSH SS, POP SS' problems
|
||||||
SetContextData(UE_EFLAGS, ueContext);
|
SetBPX(ueCurrentPosition + len, UE_BREAKPOINT_TYPE_INT3 + UE_SINGLESHOOT, StepCallBack);
|
||||||
engineStepActive = true;
|
else
|
||||||
engineStepCallBack = StepCallBack;
|
{
|
||||||
engineStepCount = NULL;
|
ULONG_PTR ueContext = NULL;
|
||||||
|
ueContext = (ULONG_PTR)GetContextData(UE_EFLAGS);
|
||||||
|
ueContext |= UE_TRAP_FLAG;
|
||||||
|
SetContextData(UE_EFLAGS, ueContext);
|
||||||
|
engineStepActive = true;
|
||||||
|
engineStepCallBack = StepCallBack;
|
||||||
|
engineStepCount = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue