initial work on memory breakpoints

This commit is contained in:
mrexodia 2016-08-05 14:48:48 +02:00
parent 688fe89439
commit 3d385178da
4 changed files with 16 additions and 5 deletions

View File

@ -49,6 +49,14 @@ namespace GleeBug
Execute Execute
}; };
struct MemoryBreakpointInfo
{
struct
{
uint32 offset;
} info[PAGE_SIZE];
};
/** /**
\brief Structure describing internal breakpoint info. \brief Structure describing internal breakpoint info.
*/ */
@ -73,6 +81,7 @@ namespace GleeBug
{ {
MemoryType type; MemoryType type;
ptr size; ptr size;
MemoryBreakpointInfo* info;
} memory; } memory;
}; };
}; };

View File

@ -5,6 +5,7 @@
//defines //defines
#define GLEEBUG_HWBP_COUNT 4 #define GLEEBUG_HWBP_COUNT 4
#define GLEEBUG_PAGE_SIZE 0x1000
namespace GleeBug namespace GleeBug
{ {
@ -18,6 +19,7 @@ namespace GleeBug
//constants //constants
const int HWBP_COUNT = GLEEBUG_HWBP_COUNT; const int HWBP_COUNT = GLEEBUG_HWBP_COUNT;
const int PAGE_SIZE = GLEEBUG_PAGE_SIZE;
//key typedefs //key typedefs
typedef std::pair<BreakpointType, ptr> BreakpointKey; typedef std::pair<BreakpointType, ptr> BreakpointKey;

View File

@ -12,7 +12,7 @@ protected:
{ {
printf("Reached entry breakpoint! GIP: 0x%p\n", printf("Reached entry breakpoint! GIP: 0x%p\n",
mRegisters->Gip()); mRegisters->Gip());
if (mProcess->DeleteBreakpoint(info.address)) /*if (mProcess->DeleteBreakpoint(info.address))
printf("Entry breakpoint deleted!\n"); printf("Entry breakpoint deleted!\n");
else else
printf("Failed to delete entry breakpoint...\n"); printf("Failed to delete entry breakpoint...\n");
@ -20,7 +20,7 @@ protected:
{ {
printf("Step after entry breakpoint! GIP: 0x%p\n", printf("Step after entry breakpoint! GIP: 0x%p\n",
mRegisters->Gip()); mRegisters->Gip());
}); });*/
} }
void cbEntryHardwareBreakpoint(const BreakpointInfo & info) void cbEntryHardwareBreakpoint(const BreakpointInfo & info)
@ -61,7 +61,7 @@ protected:
else else
printf("No free hardware breakpoint slot...\n");*/ printf("No free hardware breakpoint slot...\n");*/
if(mProcess->SetBreakpoint(entry, this, &MyDebugger::cbEntryBreakpoint)) if(mProcess->SetBreakpoint(entry, this, &MyDebugger::cbEntryBreakpoint, true))
printf("Breakpoint set at 0x%p!\n", entry); printf("Breakpoint set at 0x%p!\n", entry);
else else
printf("Failed to set breakpoint at 0x%p...\b", entry); printf("Failed to set breakpoint at 0x%p...\b", entry);

View File

@ -7,7 +7,7 @@
static void testDebugger() static void testDebugger()
{ {
#ifdef _WIN64 #ifdef _WIN64
wchar_t szFilePath[256] = L"c:\\test64.exe"; wchar_t szFilePath[256] = L"c:\\MembpTest_x64.exe";
#else //x86 #else //x86
wchar_t szFilePath[256] = L"c:\\test32.exe"; wchar_t szFilePath[256] = L"c:\\test32.exe";
#endif //_WIN64 #endif //_WIN64
@ -161,7 +161,7 @@ static void testCorkami()
int main() int main()
{ {
testPeFile(L"C:\\test64.exe"); testDebugger();
//testCorkami(); //testCorkami();
//testPeFile(L"c:\\!exclude\\pe\\bin\\appendedhdr.exe"); //testPeFile(L"c:\\!exclude\\pe\\bin\\appendedhdr.exe");
puts(""); puts("");