/// <summary> /// Enumerates all symbols of the given file /// </summary> /// <param name="fileName">The file</param> /// <param name="callback">The callback to be called for every smybol</param> public static void EnumSymbols(string fileName, SymEnumerateSymbolsProc64 callback) { var ptr = Process.GetCurrentProcess().Handle; var result = UnsafeNativeMethods.SymInitialize(ptr, null, false); if (!result) { throw new Win32ErrorException(); } var baseOfDll = UnsafeNativeMethods.SymLoadModuleEx(ptr, IntPtr.Zero, fileName, null, 0, 0, IntPtr.Zero, 0); var error = Marshal.GetLastWin32Error(); if ((baseOfDll == 0) && (error != 0)) { UnsafeNativeMethods.SymCleanup(ptr); throw new Win32ErrorException(error); } if (UnsafeNativeMethods.SymEnumerateSymbols64(ptr, baseOfDll, callback, IntPtr.Zero) == false) { throw new Exception("Failed to enum symbols"); } UnsafeNativeMethods.SymCleanup(ptr); }
private static extern bool SymEnumerateSymbols64(IntPtr hProcess, ulong baseOfDll, SymEnumerateSymbolsProc64 enumSymbolsCallback, IntPtr userContext);
public static extern bool SymEnumerateSymbols64(IntPtr hProcess, ulong BaseOfDll, SymEnumerateSymbolsProc64 EnumSymbolsCallback, IntPtr UserContext);