mirror of https://github.com/x64dbg/GleeBug
implemented StepOver
This commit is contained in:
parent
b6b77f2dd6
commit
48dada8945
|
|
@ -13,4 +13,23 @@ namespace GleeBug
|
||||||
for (int i = 0; i < HWBP_COUNT; i++)
|
for (int i = 0; i < HWBP_COUNT; i++)
|
||||||
hardwareBreakpoints[i].enabled = false;
|
hardwareBreakpoints[i].enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Process::StepOver(const StepCallback & cbStep)
|
||||||
|
{
|
||||||
|
auto gip = thread->registers.Gip();
|
||||||
|
unsigned char data[16];
|
||||||
|
if (MemReadSafe(gip, data, sizeof(data)))
|
||||||
|
{
|
||||||
|
mCapstone.Disassemble(gip, data);
|
||||||
|
if(mCapstone.GetId() == X86_INS_CALL)
|
||||||
|
{
|
||||||
|
SetBreakpoint(gip + mCapstone.Size(), [cbStep](const BreakpointInfo & info)
|
||||||
|
{
|
||||||
|
cbStep();
|
||||||
|
}, true, SoftwareType::ShortInt3);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
thread->StepInto(cbStep);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include "Debugger.Dll.h"
|
#include "Debugger.Dll.h"
|
||||||
#include "Debugger.Breakpoint.h"
|
#include "Debugger.Breakpoint.h"
|
||||||
#include "Static.Pattern.h"
|
#include "Static.Pattern.h"
|
||||||
|
#include <capstone_wrapper/capstone_wrapper.h>
|
||||||
|
|
||||||
namespace GleeBug
|
namespace GleeBug
|
||||||
{
|
{
|
||||||
|
|
@ -305,6 +306,28 @@ namespace GleeBug
|
||||||
\return true if the breakpoint was deleted, false otherwise.
|
\return true if the breakpoint was deleted, false otherwise.
|
||||||
*/
|
*/
|
||||||
bool DeleteGenericBreakpoint(const BreakpointInfo & info);
|
bool DeleteGenericBreakpoint(const BreakpointInfo & info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Step over.
|
||||||
|
\param cbStep Step callback. Can be written using BIND(this, MyDebugger::cb).
|
||||||
|
*/
|
||||||
|
void StepOver(const StepCallback & cbStep);
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Step over.
|
||||||
|
\tparam T Generic type parameter. Must be a subclass of Debugger.
|
||||||
|
\param debugger This pointer to a subclass of Debugger.
|
||||||
|
\param callback Pointer to the callback. Written like: &MyDebugger::cb
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void StepOver(T* debugger, void(T::*callback)())
|
||||||
|
{
|
||||||
|
static_cast<void>(static_cast<Debugger*>(debugger));
|
||||||
|
StepOver(std::bind(callback, debugger));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Capstone mCapstone;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,26 +26,26 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
||||||
|
|
@ -175,8 +175,9 @@ public:
|
||||||
//Stepping
|
//Stepping
|
||||||
void StepOver(LPVOID CallBack)
|
void StepOver(LPVOID CallBack)
|
||||||
{
|
{
|
||||||
//TODO
|
if (!mProcess || !CallBack)
|
||||||
StepInto(CallBack);
|
return;
|
||||||
|
mProcess->StepOver(STEPCALLBACK(CallBack));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleStep(DWORD StepCount, LPVOID CallBack)
|
void SingleStep(DWORD StepCount, LPVOID CallBack)
|
||||||
|
|
|
||||||
|
|
@ -26,26 +26,26 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v120</PlatformToolset>
|
<PlatformToolset>v120_xp</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit dc48a11d3fb8f476c9f4d7639984a74e8a9d9336
|
Subproject commit 5a37f7cfaf4a1b1050890c244348fa6f7cfd109b
|
||||||
Loading…
Reference in New Issue