Win32CallstackResolver::AddrInfo Win32CallstackResolver::GetAddrInfoForModule(uint32_t moduleId, DWORD64 addr) { wchar_t msg[1024]; swprintf_s(msg, L"getaddr %d %llu", moduleId, addr); AddrInfo *info = (AddrInfo *)SendRecvPipeMessage(msg); return info == NULL ? AddrInfo() : *info; }
uint32_t Win32CallstackResolver::GetModuleID(wstring pdbName, GUID guid, DWORD age) { wchar_t msg[1024] = {0}; swprintf_s(msg, L"getmodule %d %d %d %d %d %d %d %d %d %d %d %d %ls", age, guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7], pdbName.c_str()); uint32_t *modID = (uint32_t *)SendRecvPipeMessage(msg); return modID == NULL ? 0 : *modID; }
std::wstring Win32CallstackResolver::LookupModule(wchar_t *modName, GUID guid, DWORD age) { wchar_t msg[1024] = {0}; swprintf_s(msg, L"lookup %d %d %d %d %d %d %d %d %d %d %d %d %ls", age, guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7], modName); wchar_t *ret = (wchar_t *)SendRecvPipeMessage(msg); wstring result = (ret == NULL ? L"" : ret); if(result == L"Not Found") result = L""; return result; }
void Win32CallstackResolver::SetModuleBaseAddress(uint32_t moduleId, DWORD64 base) { wchar_t msg[1024]; swprintf_s(msg, L"baseaddr %d %llu", moduleId, base); SendRecvPipeMessage(msg); }