我目前正在尝试设计一个内存转储工具,它可以从另一个进程中获取崩溃进程的内存转储。但我对此完全陌生,我想借此机会深入了解内存转储技术。我想知道为崩溃进程创建内存转储的工作范例。我目前的天马行空的想象如下:当一个进程崩溃时,操作系统总是会知道(我不知道如何但它应该能够)。然后操作系统启动某种机制将崩溃进程的虚拟地址空间的内容复制到所谓的转储文件中。然后我们可以使用WinDbg对转储文件进行调试。我想知道,如果我们可以将崩溃进程的整个虚拟地址空间复制到转储文件中,文件会不会太大?或者我们可以指定要转储的虚拟地址空间(内核/用户)吗?任何人都可以提供一些引用资料供我开始使用,尤其是在以下方面:
以下是通过JNI从JavaJVM调用的C++代码的摘录:(JNIEnv*pJniEnv,jobject,jstringpDllName){stringdllName(pJniEnv->GetStringUTFChars(pDllName,NULL));//stuffhappensherelikeHINSTANCEloadedDll=LoadLibrary(dllName.c_str());pJniEnv->ReleaseStringUTFChars(pDllName,dllName.c_str());return...;}这在WindowsXP中有效,但在Windows7中崩溃并出现访
我们在分析在我们开发机器上的客户WindowsXP/32机器上创建的Windows故障转储时遇到了问题。我们的许多开发机器现在都是Win7/64机器,但在WindowsXP下生成的故障转储似乎无法完全解析它们的二进制依赖性,从而导致在VisualStudio(2005)中显示调用堆栈时出现警告。例如,在WindowsXP上生成转储时,从Win7机器加载时无法解析msvcr80.dll:在XP上,WinSxS路径似乎是C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989
我正在构建一个Win32GUI应用程序。在该应用程序中,我使用了一个旨在用于命令行应用程序的DLL。假设Foo.exe是我的GUI应用程序,而bar()是DLL中的一个函数,它将“hello”打印到标准输出。Foo.exe调用bar()。如果我从命令行运行Foo.exe,重定向(>)(即Foo.exe>out.txt),它将“hello”写入out.txt并正常退出(如预期的那样)。但是,如果我运行Foo.exe而不重定向(从cmd.exe或通过在Windows资源管理器中双击),它会在调用bar()时崩溃。如果我在调试器中运行Foo.exe,在命令行中使用重定向(通过项目的VS属性设
我编写了一个python脚本,使用请求库以json格式从网站检索数据,然后将其转储到一个json文件中。我已经使用这些数据编写了很多代码,并且仅在Windows中对其进行了测试。最近换了个linux系统,执行同样的python脚本时,json文件中key的顺序完全不一样。这是我正在使用的代码:API_request=requests.get('https://www.abcd.com/datarequest')alertJson_Data=API_request.json()#Toconvertreturneddatatojsonjson.dump(alertJson_Data,jso
我正在研究MySQL用户定义函数(UDF),它基本上是Windows系统函数的包装器。我的问题是UDF对于某些输入按预期工作,但会导致mysqld对于其他输入崩溃。UDF本身采用单个整数参数,该参数未经修改地作为ULONG参数传递给WinAPI函数。当这个整数小于某个数k时,一切正常;但是,当整数大于或等于k时,MySQL服务器进程(mysqld.exe)始终崩溃。我的64位Windows7机器总是生成“AppCrash”详细信息,其中包括MDUMP和HDUMP文件。有没有办法在VisualC++中打开这些文件中的任何一个来检查崩溃时的堆栈跟踪? 最佳答案
在MSVC中,如何使任何未处理的C++异常(例如std::runtime_error)使我的发布编译程序崩溃,以便它从异常抛出位置生成一个包含完整堆栈的转储?我已经在AeDebug注册表中安装了NTSD,并且可以为诸如内存访问冲突之类的事情生成良好的转储,所以我想这里的问题归结为正确地使程序崩溃。提前致谢。 最佳答案 我终于破解了它。使用set_terminate()函数为每个线程注册一个处理程序在您的mainfunction()中,使外部DLL(事件窗口')无法成功调用SetUnhandledExceptionFilter()。这
有没有办法在纯headless模式下使用WinDbg?我的用例是我应该能够在不启动WinDbgGUI的情况下为命令行上的小型转储模仿“!analyze-v”命令。 最佳答案 对于Windows调试工具,还有cdb,控制台调试器。要调试故障转储,请使用-z""选项。要立即运行命令,请使用-c"".要将所有内容输出到文件中,您可以使用常用的DOS重定向输出>或使用.logopen打开日志文件.要在分析后退出CDB,请使用q.您想确保符号设置正确,因此请包含.symfix;.reload.我更喜欢使用.symfix在命令中而不是-y,所以
我目前正在分析一位客户因蓝屏死机而产生的故障转储。出于保密原因,我无法提供故障转储,但我已经走到了死胡同。崩溃发生在DDK中的RtlSetBit函数中。这是上下文记录:rax=0000000000000000rbx=fffff8800282da00rcx=fffffa8007c10340rdx=0000000000000000rsi=0000000000000001rdi=fffffa8007c102e0rip=fffff8000168d0b4rsp=fffff880057478e8rbp=0000000000000000r8=0000000000000000r9=0000000000
一个.Net4.0应用程序不断为用户崩溃,但就他而言,我无法重现该错误。他附上了WindowsCrashReporter生成的WERInternalMetadata.xml文件。通过打开它,我发现它是一个System.IO.FileNotFoundException导致软件崩溃,但是,该函数中没有调用会抛出这种异常的函数,所以问题出在其他地方或更深。这是文件中“最有趣”的部分。它包含(十六进制)数字,但我无法找出它们的含义。CLR20r3rstvshowtracker.exe1.0.3842.332584c374e79mscorlib4.0.0.04ba1da6f162014Syste