| 1285 | } |
| 1286 | |
| 1287 | BOOL StackWalker::ShowObject(LPVOID pObject) |
| 1288 | { |
| 1289 | // Load modules if not done yet |
| 1290 | if (m_modulesLoaded == FALSE) |
| 1291 | this->LoadModules(); // ignore the result... |
| 1292 | |
| 1293 | // Verify that the DebugHelp.dll was actually found |
| 1294 | if (this->m_sw->m_hDbhHelp == NULL) |
| 1295 | { |
| 1296 | SetLastError(ERROR_DLL_INIT_FAILED); |
| 1297 | return FALSE; |
| 1298 | } |
| 1299 | |
| 1300 | // SymGetSymFromAddr64() is required |
| 1301 | if (this->m_sw->pSGSFA == NULL) |
| 1302 | return FALSE; |
| 1303 | |
| 1304 | // Show object info (SymGetSymFromAddr64()) |
| 1305 | DWORD64 dwAddress = DWORD64(pObject); |
| 1306 | DWORD64 dwDisplacement = 0; |
| 1307 | IMAGEHLP_SYMBOL64* pSym = |
| 1308 | (IMAGEHLP_SYMBOL64*)malloc(sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN); |
| 1309 | memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN); |
| 1310 | pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); |
| 1311 | pSym->MaxNameLength = STACKWALK_MAX_NAMELEN; |
| 1312 | if (this->m_sw->pSGSFA(this->m_hProcess, dwAddress, &dwDisplacement, pSym) == FALSE) |
| 1313 | { |
| 1314 | this->OnDbgHelpErr("SymGetSymFromAddr64", GetLastError(), dwAddress); |
| 1315 | return FALSE; |
| 1316 | } |
| 1317 | // Object name output |
| 1318 | this->OnOutput(pSym->Name); |
| 1319 | |
| 1320 | free(pSym); |
| 1321 | return TRUE; |
| 1322 | }; |
| 1323 | |
| 1324 | BOOL __stdcall StackWalker::myReadProcMem(HANDLE hProcess, |
| 1325 | DWORD64 qwBaseAddress, |
no test coverage detected