/****************************************************************** * pe_load_debug_info * */ BOOL pe_load_debug_info(const struct process* pcs, struct module* module) { BOOL ret = FALSE; if (!(dbghelp_options & SYMOPT_PUBLICS_ONLY)) { ret = pe_load_stabs(pcs, module); ret = pe_load_dwarf(module) || ret; #ifndef DBGHELP_STATIC_LIB ret = pe_load_msc_debug_info(pcs, module) || ret; ret = pe_load_rsym(module) || ret; #endif ret = ret || pe_load_coff_symbol_table(module); /* FIXME */ /* if we still have no debug info (we could only get SymExport at this * point), then do the SymExport except if we have an ELF container, * in which case we'll rely on the export's on the ELF side */ } /* FIXME shouldn't we check that? if (!module_get_debug(pcs, module)) */ if (pe_load_export_debug_info(pcs, module) && !ret) ret = TRUE; return ret; }
/****************************************************************** * pe_load_debug_info * */ BOOL pe_load_debug_info(const struct process* pcs, struct module* module) { BOOL ret = FALSE; HANDLE hFile; HANDLE hMap; void* mapping; IMAGE_NT_HEADERS* nth; hFile = CreateFileW(module->module.LoadedImageName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) return ret; if ((hMap = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0, NULL)) != 0) { if ((mapping = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0)) != NULL) { nth = RtlImageNtHeader(mapping); if (!(dbghelp_options & SYMOPT_PUBLICS_ONLY)) { ret = pe_load_stabs(pcs, module, mapping, nth) || pe_load_msc_debug_info(pcs, module, mapping, nth); /* if we still have no debug info (we could only get SymExport at this * point), then do the SymExport except if we have an ELF container, * in which case we'll rely on the export's on the ELF side */ } /* FIXME shouldn't we check that? if (!module_get_debug(pcs, module))l */ if (pe_load_export_debug_info(pcs, module, mapping, nth) && !ret) ret = TRUE; UnmapViewOfFile(mapping); } CloseHandle(hMap); } CloseHandle(hFile); return ret; }