Example #1
0
        /// <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);