callbacks

This commit is contained in:
Mr. eXoDia 2015-03-25 03:19:35 +01:00
parent 187bdeff1d
commit 1ae8b5633a
6 changed files with 119 additions and 40 deletions

View File

@ -2,53 +2,53 @@
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)
{
_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()

View File

@ -52,18 +52,27 @@ namespace GleeBug
const ProcessInfo & GetMainProcess();
protected:
void createProcessEvent(CREATE_PROCESS_DEBUG_INFO* CreateProcess);
void exitProcessEvent(EXIT_PROCESS_DEBUG_INFO* ExitProcess);
void createThreadEvent(CREATE_THREAD_DEBUG_INFO* CreateThread);
void exitThreadEvent(EXIT_THREAD_DEBUG_INFO* ExitThread);
void loadDllEvent(LOAD_DLL_DEBUG_INFO* LoadDll);
void unloadDllEvent(UNLOAD_DLL_DEBUG_INFO* UnloadDll);
void exceptionEvent(EXCEPTION_DEBUG_INFO* Exception);
void debugStringEvent(OUTPUT_DEBUG_STRING_INFO* DebugString);
void ripEvent(RIP_INFO* Rip);
void log(std::string msg);
virtual void cbCreateProcessEvent(CREATE_PROCESS_DEBUG_INFO* createProcess) {};
virtual void cbExitProcessEvent(EXIT_PROCESS_DEBUG_INFO* exitProcess) {};
virtual void cbCreateThreadEvent(CREATE_THREAD_DEBUG_INFO* createThread) {};
virtual void cbExitThreadEvent(EXIT_THREAD_DEBUG_INFO* exitThread) {};
virtual void cbLoadDllEvent(LOAD_DLL_DEBUG_INFO* loadDll) {};
virtual void cbUnloadDllEvent(UNLOAD_DLL_DEBUG_INFO* unloadDll) {};
virtual void cbExceptionEvent(EXCEPTION_DEBUG_INFO* exceptionInfo) {};
virtual void cbDebugStringEvent(OUTPUT_DEBUG_STRING_INFO* debugString) {};
virtual void cbRipEvent(RIP_INFO* rip) {};
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;
DWORD _continueStatus;
bool _breakDebugger;

View File

@ -104,6 +104,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -118,6 +119,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -135,6 +137,7 @@
<ItemGroup>
<ClInclude Include="Debugger.Data.h" />
<ClInclude Include="Debugger.h" />
<ClInclude Include="MyDebugger.h" />
<ClInclude Include="_global.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -13,32 +13,41 @@
<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>
</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>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="_global.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\GleeBug</Filter>
</ClCompile>
<ClCompile Include="Debugger.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\GleeBug</Filter>
</ClCompile>
<ClCompile Include="Debugger.Loop.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\GleeBug</Filter>
</ClCompile>
<ClCompile Include="Debugger.Misc.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\GleeBug</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="_global.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Debugger.h">
<Filter>Header Files</Filter>
<Filter>Header Files\GleeBug</Filter>
</ClInclude>
<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>
</ClInclude>
</ItemGroup>

55
GleeBug/MyDebugger.h Normal file
View File

@ -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

View File

@ -1,17 +1,20 @@
#include <cstdio>
#include "Debugger.h"
#include "MyDebugger.h"
using namespace GleeBug;
int main()
{
wchar_t szFilePath[256] = L"c:\\CodeBlocks\\arma_cert_bin_info\\bin\\arma_cert_bin_info.exe";
wchar_t szCommandLine[256] = L"";
wchar_t szCurrentDir[256] = L"c:\\CodeBlocks\\arma_cert_bin_info\\bin";
GleeBug::Debugger dbg;
MyDebugger dbg;
if (dbg.Init(szFilePath, szCommandLine, szCurrentDir))
{
printf("Debugger::Init success! PID: %X\n", dbg.GetMainProcess().ProcessId);
puts("Debugger::Init success!");
dbg.Start();
printf("Debugger::Start finished!");
puts("Debugger::Start finished!");
}
else
{