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++)
|
||||
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.Breakpoint.h"
|
||||
#include "Static.Pattern.h"
|
||||
#include <capstone_wrapper/capstone_wrapper.h>
|
||||
|
||||
namespace GleeBug
|
||||
{
|
||||
|
|
@ -305,6 +306,28 @@ namespace GleeBug
|
|||
\return true if the breakpoint was deleted, false otherwise.
|
||||
*/
|
||||
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">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
|
|
|||
|
|
@ -175,8 +175,9 @@ public:
|
|||
//Stepping
|
||||
void StepOver(LPVOID CallBack)
|
||||
{
|
||||
//TODO
|
||||
StepInto(CallBack);
|
||||
if (!mProcess || !CallBack)
|
||||
return;
|
||||
mProcess->StepOver(STEPCALLBACK(CallBack));
|
||||
}
|
||||
|
||||
void SingleStep(DWORD StepCount, LPVOID CallBack)
|
||||
|
|
|
|||
|
|
@ -26,26 +26,26 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit dc48a11d3fb8f476c9f4d7639984a74e8a9d9336
|
||||
Subproject commit 5a37f7cfaf4a1b1050890c244348fa6f7cfd109b
|
||||
Loading…
Reference in New Issue