mirror of https://github.com/x64dbg/GleeBug
callbacks
This commit is contained in:
parent
187bdeff1d
commit
1ae8b5633a
|
|
@ -2,53 +2,53 @@
|
||||||
|
|
||||||
namespace GleeBug
|
namespace GleeBug
|
||||||
{
|
{
|
||||||
void Debugger::createProcessEvent(CREATE_PROCESS_DEBUG_INFO* CreateProcess)
|
void Debugger::createProcessEvent(CREATE_PROCESS_DEBUG_INFO* createProcess)
|
||||||
{
|
{
|
||||||
log("Debugger::createProcessEvent");
|
cbCreateProcessEvent(createProcess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::exitProcessEvent(EXIT_PROCESS_DEBUG_INFO* ExitProcess)
|
void Debugger::exitProcessEvent(EXIT_PROCESS_DEBUG_INFO* exitProcess)
|
||||||
{
|
{
|
||||||
log("Debugger::exitProcessEvent");
|
|
||||||
if (_debugEvent.dwProcessId == _mainProcess.ProcessId)
|
if (_debugEvent.dwProcessId == _mainProcess.ProcessId)
|
||||||
{
|
{
|
||||||
_breakDebugger = true;
|
_breakDebugger = true;
|
||||||
}
|
}
|
||||||
|
cbExitProcessEvent(exitProcess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::createThreadEvent(CREATE_THREAD_DEBUG_INFO* CreateThread)
|
void Debugger::createThreadEvent(CREATE_THREAD_DEBUG_INFO* createThread)
|
||||||
{
|
{
|
||||||
log("Debugger::createThreadEvent");
|
cbCreateThreadEvent(createThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::exitThreadEvent(EXIT_THREAD_DEBUG_INFO* ExitThread)
|
void Debugger::exitThreadEvent(EXIT_THREAD_DEBUG_INFO* exitThread)
|
||||||
{
|
{
|
||||||
log("Debugger::exitThreadEvent");
|
cbExitThreadEvent(exitThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::loadDllEvent(LOAD_DLL_DEBUG_INFO* LoadDll)
|
void Debugger::loadDllEvent(LOAD_DLL_DEBUG_INFO* loadDll)
|
||||||
{
|
{
|
||||||
log("Debugger::loadDllEvent");
|
cbLoadDllEvent(loadDll);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::unloadDllEvent(UNLOAD_DLL_DEBUG_INFO* UnloadDll)
|
void Debugger::unloadDllEvent(UNLOAD_DLL_DEBUG_INFO* unloadDll)
|
||||||
{
|
{
|
||||||
log("Debugger::unloadDllEvent");
|
cbUnloadDllEvent(unloadDll);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::exceptionEvent(EXCEPTION_DEBUG_INFO* Exception)
|
void Debugger::exceptionEvent(EXCEPTION_DEBUG_INFO* exceptionInfo)
|
||||||
{
|
{
|
||||||
log("Debugger::exceptionEvent");
|
cbExceptionEvent(exceptionInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::debugStringEvent(OUTPUT_DEBUG_STRING_INFO* DebugString)
|
void Debugger::debugStringEvent(OUTPUT_DEBUG_STRING_INFO* debugString)
|
||||||
{
|
{
|
||||||
log("Debugger::debugStringEvent");
|
cbDebugStringEvent(debugString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::ripEvent(RIP_INFO* Rip)
|
void Debugger::ripEvent(RIP_INFO* rip)
|
||||||
{
|
{
|
||||||
log("Debugger::ripEvent");
|
cbRipEvent(rip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Debugger::Start()
|
void Debugger::Start()
|
||||||
|
|
|
||||||
|
|
@ -52,18 +52,27 @@ namespace GleeBug
|
||||||
const ProcessInfo & GetMainProcess();
|
const ProcessInfo & GetMainProcess();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void createProcessEvent(CREATE_PROCESS_DEBUG_INFO* CreateProcess);
|
virtual void cbCreateProcessEvent(CREATE_PROCESS_DEBUG_INFO* createProcess) {};
|
||||||
void exitProcessEvent(EXIT_PROCESS_DEBUG_INFO* ExitProcess);
|
virtual void cbExitProcessEvent(EXIT_PROCESS_DEBUG_INFO* exitProcess) {};
|
||||||
void createThreadEvent(CREATE_THREAD_DEBUG_INFO* CreateThread);
|
virtual void cbCreateThreadEvent(CREATE_THREAD_DEBUG_INFO* createThread) {};
|
||||||
void exitThreadEvent(EXIT_THREAD_DEBUG_INFO* ExitThread);
|
virtual void cbExitThreadEvent(EXIT_THREAD_DEBUG_INFO* exitThread) {};
|
||||||
void loadDllEvent(LOAD_DLL_DEBUG_INFO* LoadDll);
|
virtual void cbLoadDllEvent(LOAD_DLL_DEBUG_INFO* loadDll) {};
|
||||||
void unloadDllEvent(UNLOAD_DLL_DEBUG_INFO* UnloadDll);
|
virtual void cbUnloadDllEvent(UNLOAD_DLL_DEBUG_INFO* unloadDll) {};
|
||||||
void exceptionEvent(EXCEPTION_DEBUG_INFO* Exception);
|
virtual void cbExceptionEvent(EXCEPTION_DEBUG_INFO* exceptionInfo) {};
|
||||||
void debugStringEvent(OUTPUT_DEBUG_STRING_INFO* DebugString);
|
virtual void cbDebugStringEvent(OUTPUT_DEBUG_STRING_INFO* debugString) {};
|
||||||
void ripEvent(RIP_INFO* Rip);
|
virtual void cbRipEvent(RIP_INFO* rip) {};
|
||||||
void log(std::string msg);
|
|
||||||
|
virtual void createProcessEvent(CREATE_PROCESS_DEBUG_INFO* createProcess);
|
||||||
|
virtual void exitProcessEvent(EXIT_PROCESS_DEBUG_INFO* exitProcess);
|
||||||
|
virtual void createThreadEvent(CREATE_THREAD_DEBUG_INFO* createThread);
|
||||||
|
virtual void exitThreadEvent(EXIT_THREAD_DEBUG_INFO* exitThread);
|
||||||
|
virtual void loadDllEvent(LOAD_DLL_DEBUG_INFO* loadDll);
|
||||||
|
virtual void unloadDllEvent(UNLOAD_DLL_DEBUG_INFO* unloadDll);
|
||||||
|
virtual void exceptionEvent(EXCEPTION_DEBUG_INFO* exceptionInfo);
|
||||||
|
virtual void debugStringEvent(OUTPUT_DEBUG_STRING_INFO* debugString);
|
||||||
|
virtual void ripEvent(RIP_INFO* rip);
|
||||||
|
virtual void log(std::string msg);
|
||||||
|
|
||||||
private:
|
|
||||||
ProcessInfo _mainProcess;
|
ProcessInfo _mainProcess;
|
||||||
DWORD _continueStatus;
|
DWORD _continueStatus;
|
||||||
bool _breakDebugger;
|
bool _breakDebugger;
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
|
@ -118,6 +119,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
|
@ -135,6 +137,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Debugger.Data.h" />
|
<ClInclude Include="Debugger.Data.h" />
|
||||||
<ClInclude Include="Debugger.h" />
|
<ClInclude Include="Debugger.h" />
|
||||||
|
<ClInclude Include="MyDebugger.h" />
|
||||||
<ClInclude Include="_global.h" />
|
<ClInclude Include="_global.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|
|
||||||
|
|
@ -13,32 +13,41 @@
|
||||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="Header Files\GleeBug">
|
||||||
|
<UniqueIdentifier>{20ccba34-8c87-490a-8bd3-5195e625d009}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files\GleeBug">
|
||||||
|
<UniqueIdentifier>{91ea9bea-4704-4816-a885-8afd0e3ff974}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="main.cpp">
|
<ClCompile Include="main.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="_global.cpp">
|
<ClCompile Include="_global.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files\GleeBug</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="Debugger.cpp">
|
<ClCompile Include="Debugger.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files\GleeBug</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="Debugger.Loop.cpp">
|
<ClCompile Include="Debugger.Loop.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files\GleeBug</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="Debugger.Misc.cpp">
|
<ClCompile Include="Debugger.Misc.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files\GleeBug</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="_global.h">
|
<ClInclude Include="_global.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files\GleeBug</Filter>
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="Debugger.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="Debugger.Data.h">
|
<ClInclude Include="Debugger.Data.h">
|
||||||
|
<Filter>Header Files\GleeBug</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Debugger.h">
|
||||||
|
<Filter>Header Files\GleeBug</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="MyDebugger.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
#ifndef _MYDEBUGGER_H
|
||||||
|
#define _MYDEBUGGER_H
|
||||||
|
|
||||||
|
#include "Debugger.h"
|
||||||
|
|
||||||
|
class MyDebugger : public GleeBug::Debugger
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void cbCreateProcessEvent(CREATE_PROCESS_DEBUG_INFO* createProcess)
|
||||||
|
{
|
||||||
|
printf("Process %d created with entry 0x%p\n", _debugEvent.dwProcessId, createProcess->lpStartAddress);
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void cbExitProcessEvent(EXIT_PROCESS_DEBUG_INFO* exitProcess)
|
||||||
|
{
|
||||||
|
printf("Process %d terminated with exit code 0x%08X\n", _debugEvent.dwProcessId, exitProcess->dwExitCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void cbCreateThreadEvent(CREATE_THREAD_DEBUG_INFO* createThread)
|
||||||
|
{
|
||||||
|
printf("Thread %d created with entry 0x%p\n", _debugEvent.dwThreadId, createThread->lpStartAddress);
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void cbExitThreadEvent(EXIT_THREAD_DEBUG_INFO* exitThread)
|
||||||
|
{
|
||||||
|
printf("Thread %d terminated with exit code 0x%08X\n", _debugEvent.dwThreadId, exitThread->dwExitCode);
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void cbLoadDllEvent(LOAD_DLL_DEBUG_INFO* loadDll)
|
||||||
|
{
|
||||||
|
printf("DLL loaded at 0x%p\n", loadDll->lpBaseOfDll);
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void cbUnloadDllEvent(UNLOAD_DLL_DEBUG_INFO* unloadDll)
|
||||||
|
{
|
||||||
|
printf("DLL 0x%p unloaded\n", unloadDll->lpBaseOfDll);
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void cbExceptionEvent(EXCEPTION_DEBUG_INFO* exceptionInfo)
|
||||||
|
{
|
||||||
|
printf("Exception with code 0x%08X\n", exceptionInfo->ExceptionRecord);
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void cbDebugStringEvent(OUTPUT_DEBUG_STRING_INFO* debugString)
|
||||||
|
{
|
||||||
|
printf("Debug string at 0x%p with length %d\n", debugString->lpDebugStringData, debugString->nDebugStringLength);
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void cbRipEvent(RIP_INFO* rip)
|
||||||
|
{
|
||||||
|
printf("RIP event type 0x%X, error 0x%X", rip->dwType, rip->dwError);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //_MYDEBUGGER_H
|
||||||
|
|
@ -1,17 +1,20 @@
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include "Debugger.h"
|
#include "Debugger.h"
|
||||||
|
#include "MyDebugger.h"
|
||||||
|
|
||||||
|
using namespace GleeBug;
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
wchar_t szFilePath[256] = L"c:\\CodeBlocks\\arma_cert_bin_info\\bin\\arma_cert_bin_info.exe";
|
wchar_t szFilePath[256] = L"c:\\CodeBlocks\\arma_cert_bin_info\\bin\\arma_cert_bin_info.exe";
|
||||||
wchar_t szCommandLine[256] = L"";
|
wchar_t szCommandLine[256] = L"";
|
||||||
wchar_t szCurrentDir[256] = L"c:\\CodeBlocks\\arma_cert_bin_info\\bin";
|
wchar_t szCurrentDir[256] = L"c:\\CodeBlocks\\arma_cert_bin_info\\bin";
|
||||||
GleeBug::Debugger dbg;
|
MyDebugger dbg;
|
||||||
if (dbg.Init(szFilePath, szCommandLine, szCurrentDir))
|
if (dbg.Init(szFilePath, szCommandLine, szCurrentDir))
|
||||||
{
|
{
|
||||||
printf("Debugger::Init success! PID: %X\n", dbg.GetMainProcess().ProcessId);
|
puts("Debugger::Init success!");
|
||||||
dbg.Start();
|
dbg.Start();
|
||||||
printf("Debugger::Start finished!");
|
puts("Debugger::Start finished!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue