BOOL WINAPI SymEnumerateModules64(HANDLE hProcess, PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, PVOID UserContext) { struct enum_modW64_64 x; x.cb = EnumModulesCallback; x.user = UserContext; return SymEnumerateModulesW64(hProcess, enum_modW64_64, &x); }
/*********************************************************************** * break_add_break_from_lineno * * Add a breakpoint from a line number in current file */ void break_add_break_from_lineno(const char *filename, int lineno, BOOL swbp) { struct cb_break_lineno bkln; bkln.addr.Offset = 0; bkln.lineno = lineno; if (!filename) { DWORD disp; ADDRESS64 curr; IMAGEHLP_LINE64 il; DWORD_PTR linear; memory_get_current_pc(&curr); linear = (DWORD_PTR)memory_to_linear_addr(&curr); il.SizeOfStruct = sizeof(il); if (!SymGetLineFromAddr64(dbg_curr_process->handle, linear, &disp, &il)) { dbg_printf("Unable to add breakpoint (unknown address %lx)\n", linear); return; } filename = il.FileName; SymEnumLines(dbg_curr_process->handle, linear, NULL, filename, line_cb, &bkln); } else { /* we have to enumerate across modules */ bkln.filename = filename; SymEnumerateModulesW64(dbg_curr_process->handle, mcb, &bkln); } if (bkln.addr.Offset) break_add_break(&bkln.addr, TRUE, swbp); else dbg_printf("Unknown line number\n" "(either out of file, or no code at given line number)\n"); }