diff --git a/GleeBug/Debugger.Dll.cpp b/GleeBug/Debugger.Dll.cpp new file mode 100644 index 0000000..0fc593a --- /dev/null +++ b/GleeBug/Debugger.Dll.cpp @@ -0,0 +1,15 @@ +#include "Debugger.Dll.h" + +namespace GleeBug +{ + DllInfo::DllInfo() + { + } + + DllInfo::DllInfo(LPVOID lpBaseOfDll, DWORD sizeOfImage, LPVOID entryPoint) + { + this->lpBaseOfDll = (ULONG_PTR)lpBaseOfDll; + this->sizeOfImage = sizeOfImage; + this->entryPoint = (ULONG_PTR)entryPoint; + } +}; \ No newline at end of file diff --git a/GleeBug/Debugger.Dll.h b/GleeBug/Debugger.Dll.h index 0b79313..810c4d0 100644 --- a/GleeBug/Debugger.Dll.h +++ b/GleeBug/Debugger.Dll.h @@ -14,14 +14,8 @@ namespace GleeBug DWORD sizeOfImage; ULONG_PTR entryPoint; - DllInfo() {} - - DllInfo(LPVOID lpBaseOfDll, DWORD sizeOfImage, LPVOID entryPoint) - { - this->lpBaseOfDll = (ULONG_PTR)lpBaseOfDll; - this->sizeOfImage = sizeOfImage; - this->entryPoint = (ULONG_PTR)entryPoint; - } + DllInfo(); + DllInfo(LPVOID lpBaseOfDll, DWORD sizeOfImage, LPVOID entryPoint); }; typedef std::map DllMap; diff --git a/GleeBug/Debugger.Loop.cpp b/GleeBug/Debugger.Loop.cpp index cdded68..50f932e 100644 --- a/GleeBug/Debugger.Loop.cpp +++ b/GleeBug/Debugger.Loop.cpp @@ -5,9 +5,7 @@ namespace GleeBug void Debugger::createProcessEvent(const CREATE_PROCESS_DEBUG_INFO & createProcess) { //process housekeeping - ProcessInfo process(createProcess.hProcess, - createProcess.hThread, - _debugEvent.dwProcessId, + ProcessInfo process(_debugEvent.dwProcessId, _debugEvent.dwThreadId); _processes.insert({ process.dwProcessId, process }); @@ -41,7 +39,7 @@ namespace GleeBug void Debugger::createThreadEvent(const CREATE_THREAD_DEBUG_INFO & createThread) { //thread housekeeping - ThreadInfo thread(_debugEvent.dwThreadId, createThread.hThread, createThread.lpThreadLocalBase, createThread.lpStartAddress); + ThreadInfo thread(_debugEvent.dwThreadId, createThread.lpThreadLocalBase, createThread.lpStartAddress); _curProcess->threads.insert({ thread.dwThreadId, thread }); //set the current thread diff --git a/GleeBug/Debugger.Process.cpp b/GleeBug/Debugger.Process.cpp new file mode 100644 index 0000000..68434bb --- /dev/null +++ b/GleeBug/Debugger.Process.cpp @@ -0,0 +1,24 @@ +#include "Debugger.Process.h" + +namespace GleeBug +{ + ProcessInfo::ProcessInfo() + { + this->curThread = nullptr; + this->hProcess = INVALID_HANDLE_VALUE; + } + + ProcessInfo::ProcessInfo(DWORD dwProcessId, DWORD dwMainThreadId) + { + this->hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId); + this->dwProcessId = dwProcessId; + this->dwMainThreadId = dwMainThreadId; + this->threads.clear(); + } + + ProcessInfo::~ProcessInfo() + { + if (this->hProcess != INVALID_HANDLE_VALUE) + CloseHandle(hProcess); + } +}; \ No newline at end of file diff --git a/GleeBug/Debugger.Process.h b/GleeBug/Debugger.Process.h index df5616f..f3e8f10 100644 --- a/GleeBug/Debugger.Process.h +++ b/GleeBug/Debugger.Process.h @@ -13,7 +13,6 @@ namespace GleeBug struct ProcessInfo { HANDLE hProcess; - HANDLE hThread; DWORD dwProcessId; DWORD dwMainThreadId; @@ -21,16 +20,9 @@ namespace GleeBug ThreadInfo* curThread; DllMap dlls; - ProcessInfo() {} //fixes a 'no default constructor available' error - - ProcessInfo(HANDLE hProcess, HANDLE hThread, DWORD dwProcessId, DWORD dwMainThreadId) - { - this->hProcess = hProcess; - this->hThread = hThread; - this->dwProcessId = dwProcessId; - this->dwMainThreadId = dwMainThreadId; - this->threads.clear(); - } + ProcessInfo(); + ProcessInfo(DWORD dwProcessId, DWORD dwMainThreadId); + ~ProcessInfo(); }; typedef std::map ProcessMap; diff --git a/GleeBug/Debugger.Thread.cpp b/GleeBug/Debugger.Thread.cpp new file mode 100644 index 0000000..5c9f3ff --- /dev/null +++ b/GleeBug/Debugger.Thread.cpp @@ -0,0 +1,23 @@ +#include "Debugger.Thread.h" + +namespace GleeBug +{ + ThreadInfo::ThreadInfo() + { + this->hThread = INVALID_HANDLE_VALUE; + } + + ThreadInfo::ThreadInfo(DWORD dwThreadId, LPVOID lpThreadLocalBase, LPVOID lpStartAddress) + { + this->dwThreadId = dwThreadId; + this->hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, dwThreadId); + this->lpThreadLocalBase = (ULONG_PTR)lpThreadLocalBase; + this->lpStartAddress = (ULONG_PTR)lpStartAddress; + } + + ThreadInfo::~ThreadInfo() + { + if (this->hThread != INVALID_HANDLE_VALUE) + CloseHandle(hThread); + } +}; \ No newline at end of file diff --git a/GleeBug/Debugger.Thread.h b/GleeBug/Debugger.Thread.h index 7bb15c2..1ea2ae9 100644 --- a/GleeBug/Debugger.Thread.h +++ b/GleeBug/Debugger.Thread.h @@ -15,15 +15,9 @@ namespace GleeBug ULONG_PTR lpThreadLocalBase; ULONG_PTR lpStartAddress; - ThreadInfo() {} - - ThreadInfo(DWORD dwThreadId, HANDLE hThread, LPVOID lpThreadLocalBase, LPVOID lpStartAddress) - { - this->dwThreadId = dwThreadId; - this->hThread = hThread; - this->lpThreadLocalBase = (ULONG_PTR)lpThreadLocalBase; - this->lpStartAddress = (ULONG_PTR)lpStartAddress; - } + ThreadInfo(); + ThreadInfo(DWORD dwThreadId, LPVOID lpThreadLocalBase, LPVOID lpStartAddress); + ~ThreadInfo(); }; typedef std::map ThreadMap; diff --git a/GleeBug/GleeBug.vcxproj b/GleeBug/GleeBug.vcxproj index 23e52aa..01c5a9b 100644 --- a/GleeBug/GleeBug.vcxproj +++ b/GleeBug/GleeBug.vcxproj @@ -147,7 +147,10 @@ + + + diff --git a/GleeBug/GleeBug.vcxproj.filters b/GleeBug/GleeBug.vcxproj.filters index 8d837a2..b53def9 100644 --- a/GleeBug/GleeBug.vcxproj.filters +++ b/GleeBug/GleeBug.vcxproj.filters @@ -21,6 +21,15 @@ Source Files + + Source Files + + + Source Files + + + Source Files +