// Queries for all debugger interfaces. extern "C" HRESULT ExtQuery(PDEBUG_CLIENT4 Client) { HRESULT Status; if ((Status = Client->QueryInterface(__uuidof(IDebugControl), (void **)&g_ExtControl)) != S_OK) { goto Fail; } if ((Status = Client->QueryInterface(__uuidof(IDebugSymbols3), (void **)&g_ExtSymbols)) != S_OK) { goto Fail; } if ((Status = Client->QueryInterface(__uuidof(IDebugSystemObjects2), (void **)&g_ExtSystem)) != S_OK) { goto Fail; } if ((Status = Client->QueryInterface(__uuidof(IDebugDataSpaces), (void **)&g_ExtData)) != S_OK){ goto Fail; } g_ExtClient = Client; return S_OK; Fail: dprintf("F**k..."); ExtRelease(); return Status; }
// Queries for all debugger interfaces. extern "C" HRESULT ExtQuery(PDEBUG_CLIENT4 Client) { HRESULT Status; if ((Status = Client->QueryInterface(__uuidof(IDebugControl), (void **)&g_ExtControl)) != S_OK) { goto Fail; } if ((Status = Client->QueryInterface(__uuidof(IDebugSymbols2), (void **)&g_ExtSymbols)) != S_OK) { goto Fail; } if ((Status = Client->QueryInterface(__uuidof(IDebugAdvanced), (void **)&g_ExtAdanced)) != S_OK) { goto Fail; } if ((Status = Client->QueryInterface(__uuidof(IDebugRegisters), (void **)&g_ExtRegister)) != S_OK) { goto Fail; } g_ExtClient = Client; return S_OK; Fail: ExtRelease(); return Status; }
// Queries for all debugger interfaces. extern "C" HRESULT ExtQuery(PDEBUG_CLIENT4 Client) { HRESULT hRes=S_OK; if(g_ExtClient!=NULL) return S_OK; if (FAILED(hRes = Client->QueryInterface(__uuidof(IDebugControl), (void **)&g_ExtControl))) goto Fail; #if VERBOSE >= 2 dprintf("[sync] IDebugControl loaded\n"); #endif if (FAILED(hRes = Client->QueryInterface(__uuidof(IDebugSymbols), (void **)&g_ExtSymbols))) goto Fail; #if VERBOSE >= 2 dprintf("[sync] IDebugSymbols loaded\n"); #endif if (FAILED(hRes = Client->QueryInterface(__uuidof(IDebugSymbols2), (void **)&g_ExtSymbols2))) goto Fail; #if VERBOSE >= 2 dprintf("[sync] IDebugSymbols2 loaded\n"); #endif if (FAILED(hRes = Client->QueryInterface(__uuidof(IDebugSymbols3), (void **)&g_ExtSymbols3))) goto Fail; #if VERBOSE >= 2 dprintf("[sync] IDebugSymbols3 loaded\n"); #endif if (FAILED(hRes = Client->QueryInterface(__uuidof(IDebugRegisters), (void **)&g_ExtRegisters))) goto Fail; #if VERBOSE >= 2 dprintf("[sync] IDebugRegisters loaded\n"); #endif g_ExtClient = Client; return S_OK; Fail: ExtRelease(); return hRes; }
HRESULT CALLBACK testext(PDEBUG_CLIENT4 Client, PCSTR args) { PDEBUG_OUTPUT_CALLBACKS prev; PDEBUG_CONTROL Control; char cmd[256]; sprintf(cmd, "!E:\\talk\\demo\\Debug\\dbgexts.plusplus %s", args); Client->GetOutputCallbacks(&prev); Client->SetOutputCallbacks(&g_OutputCb); Client->QueryInterface(__uuidof(IDebugControl), (void **)&Control); Control->Execute(DEBUG_OUTCTL_ALL_CLIENTS | DEBUG_OUTCTL_OVERRIDE_MASK | DEBUG_OUTCTL_NOT_LOGGED, cmd, // Command to be executed DEBUG_EXECUTE_DEFAULT ); Control->Release(); Client->SetOutputCallbacks(prev); return S_OK; }
static bool enter_command(PDEBUG_CLIENT4 Client) { gDebugClient4 = Client; if (!gDebugSymbols3 && Client->QueryInterface(__uuidof(IDebugSymbols3), (void **)&gDebugSymbols3) != S_OK) return false; if (!gDebugControl && Client->QueryInterface(__uuidof(IDebugControl), (void **)&gDebugControl) != S_OK) return false; if (!gDebugSystemObjects && Client->QueryInterface(__uuidof(IDebugSystemObjects), (void **)&gDebugSystemObjects) != S_OK) return false; if (!gDebugAdvanced2 && Client->QueryInterface(__uuidof(IDebugAdvanced2), (void **)&gDebugAdvanced2) != S_OK) return false; if (!gDebugDataSpaces4 && Client->QueryInterface(__uuidof(IDebugDataSpaces4), (void **)&gDebugDataSpaces4) != S_OK) return false; if (!gDebugRegisters2 && Client->QueryInterface(__uuidof(IDebugRegisters2), (void **)&gDebugRegisters2) != S_OK) return false; // Get the current scope if (gDebugSymbols3->GetScope(&intr, &stack_frame, &context, sizeof(context)) != S_OK) return false; g_debug_context.tid = engine_tid; g_debug_context.frame_level = stack_frame.FrameNumber; g_debug_context.sp = stack_frame.StackOffset; if (!update_memory_segments_and_heaps()) return false; return true; }