21#ifndef DBGHELP_STATIC_LIB
75#ifndef DBGHELP_STATIC_LIB
81#ifndef DBGHELP_STATIC_LIB
114 if (
sizeof(
void*) ==
sizeof(
int) && (
addr >> 32))
141#ifndef DBGHELP_STATIC_LIB
144 if (!
addr)
return "(null)";
163#ifndef DBGHELP_STATIC_LIB
170#if defined(__i386__) || defined(DBGHELP_STATIC_LIB)
172#elif defined(__x86_64__)
174#elif defined(__arm__)
176#elif defined(__aarch64__)
179#error define support for your CPU
198 unsigned sym_path_len;
199 unsigned alt_sym_path_len;
208 (1 + sym_path_len + alt_sym_path_len + 1) *
sizeof(
WCHAR));
209 if (!search_path)
return NULL;
217 p += sym_path_len - 1;
220 if (alt_sym_path_len)
224 p += alt_sym_path_len - 1;
238 WCHAR* search_path_buffer;
240 if (!pcs)
return FALSE;
246 if (!search_path_buffer)
return FALSE;
247 lstrcpyW(search_path_buffer, searchPath);
252 if (!search_path_buffer)
return FALSE;
287 DWORD SearchPathLength)
290 if (!pcs)
return FALSE;
300 DWORD SearchPathLength)
310 szSearchPath, SearchPathLength,
NULL,
NULL);
316#ifndef DBGHELP_STATIC_LIB
345 if (!
wcsnicmp(iter,
name, name_len) && iter[name_len] ==
'=')
346 return iter + name_len + 1;
394 size_t buf_size = 0,
i, last_null = -1;
403 if (!(new_buf =
realloc(
buf, buf_size + read_size)))
break;
406 else if(!(
buf =
malloc(read_size)))
break;
409 for (
i = buf_size /
sizeof(
WCHAR);
i < (buf_size + read_size) /
sizeof(
WCHAR);
i++)
411 if (
buf[
i])
continue;
412 if (last_null + 1 ==
i)
421 buf_size += read_size;
429 TRACE(
"got debug info address %#lx from PEB %p\n",
base,
pbi.PebBaseAddress);
432 WARN(
"couldn't load process debug info at %#lx\n",
base);
473 WARN(
"the symbols for this process have already been initialized!\n");
487 if (!pcs)
return FALSE;
490 pcs->
is_64bit = (
sizeof(
void *) == 8 ||
wow64) && !child_wow64;
509#ifndef DBGHELP_STATIC_LIB
514 if (pcs->
loader) pcs->
loader->synchronize_module_list(pcs);
516 else if (fInvadeProcess)
569 free((*ppcs)->environment);
570 next = (*ppcs)->next;
577 ERR(
"this process has not had SymInitialize() called for it!\n");
662 if (!pcs)
return FALSE;
668 TRACE(
"Setting same frame {rtn=%s frm=%s stk=%s}\n",
694 if (!pcs)
return FALSE;
786 if (!pcs)
return FALSE;
802 TRACE(
"(%p, %p, %p)\n",
814 TRACE(
"(%p, %p, %s)\n",
826 TRACE(
"(%p, %p, %s)\n",
847 if (!AppVersion)
return NULL;
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void user(int argc, const char *argv[])
DECLSPEC_HIDDEN struct cpu cpu_arm
DECLSPEC_HIDDEN struct cpu cpu_i386
DECLSPEC_HIDDEN struct cpu cpu_x86_64
static LPCWSTR LPCWSTR LPCWSTR env
LPAPI_VERSION WINAPI ImagehlpApiVersion(void)
static BOOL read_process_memory(const struct process *process, UINT64 addr, void *buf, size_t size)
BOOL elf_read_wine_loader_dbg_info(struct process *pcs, ULONG_PTR addr) DECLSPEC_HIDDEN
BOOL macho_read_wine_loader_dbg_info(struct process *pcs, ULONG_PTR addr) DECLSPEC_HIDDEN
BOOL module_remove(struct process *pcs, struct module *module) DECLSPEC_HIDDEN
static HINSTANCE instance
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
const char * wine_dbg_sprintf(const char *format,...)
#define ReadProcessMemory(a, b, c, d, e)
#define ERROR_INVALID_PARAMETER
#define GetModuleFileNameExW(w, x, y, z)
#define DLL_PROCESS_ATTACH
BOOL(CALLBACK * PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID)
#define CBA_DUPLICATE_SYMBOL
IMAGEHLP_EXTENDED_OPTIONS
@ SYMOPT_EX_WINE_NATIVE_MODULES
#define CBA_SYMBOLS_UNLOADED
#define GetEnvironmentVariableW(x, y, z)
#define ReadFile(a, b, c, d, e)
#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define GetCurrentProcess()
#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE
#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL
BOOL(CALLBACK * PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64)
#define HeapFree(x, y, z)
#define ERROR_INVALID_HANDLE
#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL
#define WideCharToMultiByte
#define CBA_DEFERRED_SYMBOL_LOAD_START
#define GetEnvironmentVariableA(x, y, z)
#define MultiByteToWideChar
DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD)
#define ERROR_ACCESS_DENIED
BOOL WINAPI SymGetSearchPathW(HANDLE hProcess, PWSTR szSearchPath, DWORD SearchPathLength)
BOOL WINAPI SymSetContext(HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame, PIMAGEHLP_CONTEXT Context)
static struct process * process_first
LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion)
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
DWORD calc_crc32(HANDLE handle)
BOOL WINAPI SymSetSearchPath(HANDLE hProcess, PCSTR searchPath)
const char * wine_dbgstr_addr(const ADDRESS64 *addr)
BOOL WINAPI SymCleanup(HANDLE hProcess)
BOOL WINAPI SymInitialize(HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess)
static BOOL CALLBACK reg_cb64to32(HANDLE hProcess, ULONG action, ULONG64 data, ULONG64 user)
static WCHAR * make_default_search_path(void)
LPEXT_API_VERSION WINAPI ExtensionApiVersion(void)
BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeProcess)
struct cpu * cpu_find(DWORD machine)
BOOL WINAPI SymRegisterCallbackW64(HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, ULONG64 UserContext)
void WINAPI WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS lpExtensionApis, unsigned short major, unsigned short minor)
BOOL validate_addr64(DWORD64 addr)
DWORD WINAPI SymGetOptions(void)
BOOL WINAPI SymGetSearchPath(HANDLE hProcess, PSTR szSearchPath, DWORD SearchPathLength)
BOOL WINAPI SymRegisterCallback64(HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, ULONG64 UserContext)
BOOL WINAPI SymSetParentWindow(HWND hwnd)
BOOL pcs_callback(const struct process *pcs, ULONG action, void *data)
static BOOL WINAPI process_invade_cb(PCWSTR name, ULONG64 base, ULONG size, PVOID user)
static BOOL check_live_target(struct process *pcs)
struct cpu cpu_i386 cpu_x86_64 cpu_arm cpu_arm64
struct process * process_find_by_handle(HANDLE hProcess)
BOOL WINAPI SymGetExtendedOption(IMAGEHLP_EXTENDED_OPTIONS option)
static API_VERSION api_version
void * fetch_buffer(struct process *pcs, unsigned size)
BOOL WINAPI SymSetExtendedOption(IMAGEHLP_EXTENDED_OPTIONS option, BOOL value)
static struct cpu * dbghelp_cpus[]
BOOL WINAPI SymRegisterCallback(HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK CallbackFunction, PVOID UserContext)
static BOOL sym_register_cb(HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK64 cb, PSYMBOL_REGISTERED_CALLBACK cb32, DWORD64 user, BOOL unicode)
DWORD WINAPI SymSetOptions(DWORD opts)
BOOL WINAPI SymSetSearchPathW(HANDLE hProcess, PCWSTR searchPath)
struct cpu * dbghelp_current_cpu
const WCHAR * process_getenv(const struct process *process, const WCHAR *name)
BOOL WINAPI EnumerateLoadedModulesW64(HANDLE hProcess, PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback, PVOID UserContext)
const struct loader_ops no_loader_ops
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
@ ProcessBasicInformation
_In_ BOOL _In_ HANDLE hProcess
#define memcpy(s1, s2, n)
PVOID PVOID PWCHAR PVOID Environment
static HMODULE MODULEINFO DWORD cb
static const char machine[]
NTSTATUS NTAPI NtQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)
static unsigned __int64 next
WCHAR FileName[MAX_PATH+1]
ULONG64 InstructionOffset
PRTL_USER_PROCESS_PARAMETERS ProcessParameters
DWORD dwAllocationGranularity
const struct loader_ops * loader
IMAGEHLP_STACK_FRAME ctx_frame
PSYMBOL_REGISTERED_CALLBACK64 reg_cb
PSYMBOL_REGISTERED_CALLBACK reg_cb32
#define FIELD_OFFSET(t, f)
_Inout_ PERBANDINFO * pbi
_In_ PCALLBACK_FUNCTION CallbackFunction