草庐IT

windows - 如何转储可执行文件的所有函数名称?

有没有办法(最好是命令行)转储可执行文件的所有函数名称(而不仅仅是导出/导入)?有问题的可执行文件是MicrosoftEXE/DLL,因此应该可以从MicrosoftSymbolServer获取符号。 最佳答案 请注意,微软决定要发布多少个符号。仅仅因为有符号服务器并不意味着您可以获得私有(private)符号。您可以在WinDbg中完成:打开故障转储...(不是打开可执行文件)选择DLL/可执行文件.symfix.reloadx*!*您可以使用cdb从命令行执行此操作:cdb-z"c:\windows\system32\notep

windows - 在 windbg 中调试 "release-mode"二进制文件/转储

我还没有找到在windbg中调试RELEASE模式二进制文件或转储的好资源。据我了解,启用编译器优化后,调试会变得更加受限。但有时我别无选择——例如,对不可重现的问题进行故障转储分析。如果有一些文章描述发布二进制文件的可能性(或注意事项),那就太好了。有人知道这样的资源吗?我正在寻找类似this的内容,但有更多的细节。我希望AdvancedWindowsDebugging会有一些东西,但没有这样的运气。 最佳答案 第一条规则:保留来自您发布的每个构建的所有pdb:来自exe和您生成的任何其他dll第二条规则:尝试获得重现步骤,因为能

windows - 如何查看我的程序堆栈跟踪?

我正在尝试学习WinDbg。在简单的程序中,我在CriticalSection上无限等待。我的程序挂起,我使用任务管理器获取程序转储。现在,每当我使用kc或k命令获取堆栈跟踪时,它都会给我以下堆栈跟踪。wow64cpu!CpupSyscallStubwow64cpu!Thunk0ArgReloadStatewow64!RunCpuSimulationwow64!Wow64LdrpInitializentdll!LdrpInitializeProcessntdll!_LdrpInitializentdll!LdrInitializeThunk现在,为什么它不显示我实际代码的堆栈跟踪。我如

windows - 在 Windows 下故意使外部进程崩溃

我想合成一个本地代码错误。这样一来,我们就可以看到发生这种情况时,特别是将某些调试输出放在哪里。Pskill(来自Sys-Internals)导致正常退出。Microsoft似乎不再直接提供DotCrash.exe。有什么方法可以从外部导致进程崩溃? 最佳答案 我在使用windbg之前通过以下方式完成了此操作:开始流程使用windbg附加到进程在我的应用程序的一个函数上设置断点运行应用程序直到遇到断点在windbg中,将局部变量设置为会导致访问冲突的内容(例如,将指针设置为0xFFFFFFFF或破坏寄存器值)按F5,应用程序应该会崩

c++ - 进程终止 C++

我有以下问题:我有一个用C++编写的应用程序(永不结束的服务器)作为服务运行,在主线程中还包含3个线程(主要执行IO)。在主循环中,我捕获了所有可能的异常。进程终止,主循环或线程本身没有打印任何内容。我在事件日志中看到进程以代码1000停止。Windows是否像在unix中一样创建核心文件?如果我从事件日志中得到一个内存地址,是否有任何方法可以知道它发生在应用程序的哪个部分?也许这是一个线索:在它发生的同时我启动了另一个应用程序(不同类型)。 最佳答案 尝试将windbg设置为事后调试器。安装windbg从命令行执行“windbg-

windows - 调用 LoadLibrary(...) 失败,Win32 错误 0n126 使用 Windows 调试器工具 windbg; w3wp.exe IIS 工作进程故障

我正在使用windbg分析来自转储文件来源的单独计算机上的内存转储。在该工具的命令行中,我输入了以下内容:.loadbyw3corew3core这是错误:调用LoadLibrary(c:\windows\system32\inetsrv\w3core.dll)失败,Win32错误0n126“找不到指定的模块。”请检查您的调试器配置和/或网络访问权限更新:我创建转储文件的进程是w3wp.exe。我认为这是针对IIS的。这是IIS工作进程。所以,w3core.dll一定与IISWorkerProcess有关。为了回顾我的步骤,我使用了调试诊断工具来监视计算机A上特定进程的崩溃。(计算机A正

windows - WinDbg:尝试附加到进程时 dbghelp.dll 的版本不匹配

一年多以前,我已经使用WinDbg和DebugDiag来查找我们在Java中使用的JNInativeDLL中的内存泄漏。现在我正在寻找线程句柄泄漏。我使用ProcessExplorer创建了一个内存转储,并尝试在DebugDiag中对其进行分析,但我得到的只是脚本错误:我也尝试过WinDbg,但它无法再附加到进程。我总是收到错误消息“dbghelp.dll的版本与调试器不匹配”:(“UnbekannterFehler”的意思是“未知错误”)我卸载了DebugDiag和WindowsSDK,然后下载了最新版本并安装了WindowsSDK8和DebugDiag1.2(x86)。问题保持不变

windows - 当 Cygwin 的 Perl 启动带有反引号的程序时,无法触发系统调试器转储核心

我有使用反引号启动任意进程的脚本。偶尔会发生崩溃(例如,零除法),并且在发生这种情况时需要获取核心转储以进行分析。我已经在操作系统中注册了一个perl脚本作为崩溃处理程序(这在Windows7中——我知道你想知道),它会使用崩溃的PID进行调用;处理程序附加了Microsoft的“cdb”调试器,它创建了所需的转储。我的测试“crasher”程序是一个C++可执行文件,它执行除零(Crasher.exe)。问题:当我使用Cygwin的Perl实现时,程序崩溃永远不会触发崩溃处理程序。我怀疑Perl正在捕捉问题并默默地放弃它。使用来自ActiveState的Perl一切正常。问题:我怎样

windows - Windbg <未分类> 内存区域

我想确定eax寄存器实际指向[Stack或Heap]的位置。在下面的windbgoutput!addressoutput中显示它未分类。0:014>reax=01198ce8ebx=00000000ecx=01198bf8edx=00000000esi=01196ed8edi=01198160eip=0710a501esp=01e8fdc8ebp=01e8fe28iopl=0nvupeiplnznaponccs=001bss=0023ds=0023es=0023fs=0038gs=0000efl=00000202libmp4v2!MP4GetVideoProfileLevel+0x3b

windows - 内存范围内的 Windbg 中断

如何为特定内存范围设置访问中断?ba只接受一个地址。除非没有其他办法,否则我宁愿不写脚本。 最佳答案 您必须开发一个插件才能在Windbg中执行此操作。Thispage描述了开发此类插件的逻辑。或者您可以尝试Ollydbg,因为最新版本能够为内存范围设置断点。 关于windows-内存范围内的Windbg中断,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/20168228/