精华内容
下载资源
问答
  • 内存转储文件可以删除
    2020-12-31 14:40:10

    gdb的基本使用

    一、基本指令

    最好在编译时加上-g选项生成Debug版本,否则会导致gdb部分指令无法使用。

    1、gdb 可执行文件 进入gdb调试。

    2、break + 行号/函数名 打断点。

    3、info break 查看断点信息。

    4、delte + 断点编号 删除断点。

    5、run让程序从头开始运行,遇到断点停止。

    6、continue让程序继续运行。当程序遇到断点停止想要继续运行时使用continue,使用run会让程序重新开始运行。

    7、print 变量名 查看当前状态下变量信息。

    8、list 查看当前执行到的语句附近的语句。

    9、bt 查看调用栈。

    10、next 单步执行下一条语句。

    11、quit 退出gdb调试器。

    二、核心转储文件

    当我们在ide中对于内存操作不当读取了不合法的内存后我们的程序会强制终止,并且ide会报错,那么我们在Linux中如果执行了类似于读取了非法的内存之类的内存使用不当的错误后会发生什么呢?

    将我们写好的错误代码编译之后执行。会发现出现了段错误(吐核) 的错误信息。对,这就是Linux下内存出错的表现。段错误是Linux内存出错的错误代称,我们暂时先不研究,那么后面的吐核是什么意思呢?所谓吐核就是生成一个错误报告告诉我们哪出错了,更像是车祸现场。但是我们查看这个目录下也没有新的文件生成啊,那么核吐到哪了呢?
      
    其实核普遍很大,因此不是想吐就能吐的除了来的,那么我们想要这个核能够吐出来该怎么做呢?

    执行指令 ulimit -a,然后再执行 ulimit -c unlimited 指令,之后再去运行我们有错的代码生成的可执行文件即可看到我们当前目录下多出了一个core文件,这个就是所谓的核,那么我们怎么查看这个核的信息呢?

    我们的每个核都对应一个可执行文件,因此为了查看到正确的信息,我们需要将可执行文件与核配对才能查看。因此执行以下命令即可用gdb查看核了: gdb 可执行文件 core文件名 。这个核也被称为核心转储文件。用gdb打开后即可发现gdb已经将报错的具体信息核代码的行数都列出来了。

    其实在实际编程中我们有很多情况下无法使用gdb进行调试,比如说遇到几率性bug,因此我们要学会用诸如输出的方式来进行调试,归根到底gdb不过是一个辅助我们调试的工具罢了,千万不要依赖于此调试工具,gdb往往更擅长于解决程序崩溃的问题。

    更多相关内容
  • 为服务器核心安装配置内存转储文件10/17/2017本文内容适用于: Windows server 2022、Windows server 2019 Windows Server 2016使用以下步骤为服务器核心安装配置内存转储。步骤1:禁用自动系统页文件管理第一步是...

    为服务器核心安装配置内存转储文件

    10/17/2017

    本文内容

    适用于: Windows server 2022、Windows server 2019 Windows Server 2016

    使用以下步骤为服务器核心安装配置内存转储。

    步骤1:禁用自动系统页文件管理

    第一步是手动配置系统故障和恢复选项。 这是完成剩余步骤所必需的。

    运行以下命令:

    wmic computersystem set AutomaticManagedPagefile=False

    步骤2:为内存转储配置目标路径

    不需要在安装操作系统的分区上安装页面文件。 若要将页面文件放在另一个分区上,必须创建名为 DedicatedDumpFile 的新注册表项。 您可以使用 DumpFileSize 注册表项定义页面文件的大小。 若要创建 DedicatedDumpFile 和 DumpFileSize 注册表项,请执行以下步骤:

    在命令提示符处,运行 regedit 命令以打开注册表编辑器。

    找到并单击以下注册表子项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

    单击 " 编辑" > "新 > 字符串值"。

    将新值命名为 DedicatedDumpFile,然后按 enter。

    右键单击 " DedicatedDumpFile",然后单击 " 修改"。

    在 "值数据 类型 : \ " 中,然后单击 "确定"。

    备注

    将替换为 具有足够的磁盘空间用于分页文件的驱动器,并将替换为 专用文件的完整路径。

    单击 " 编辑 > 新的 > DWORD 值"。

    键入 DumpFileSize,然后按 enter。

    右键单击 " DumpFileSize",然后单击 " 修改"。

    在 " 编辑 DWORD 值" 的 " 基本" 下,单击 " 十进制"。

    在 " 值数据" 中,键入适当的值,然后单击 "确定"。

    备注

    转储文件的大小为 mb (MB) 。

    退出注册表编辑器。

    确定内存转储的分区位置之后,请配置页面文件的目标路径。 若要查看页面文件的当前目标路径,请运行以下命令:

    wmic RECOVEROS get DebugFilePath

    DebugFilePath 的默认目标为%systemroot%\memory.dmp。 若要更改当前目标路径,请运行以下命令:

    wmic RECOVEROS set DebugFilePath =

    设置 为目标路径。 例如,以下命令将内存转储目标路径设置为 C:\WINDOWS\MEMORY。DMP

    wmic RECOVEROS set DebugFilePath = C:\WINDOWS\MEMORY.DMP

    步骤3:设置内存转储类型

    确定要为服务器配置的内存转储类型。 若要查看当前的内存转储类型,请运行以下命令:

    wmic RECOVEROS get DebugInfoType

    若要更改当前内存转储类型,请运行以下命令:

    wmic RECOVEROS set DebugInfoType =

    可以为0、1、2或3,如下所示。

    0:禁用内存转储的删除。

    1:完全内存转储。 当计算机意外停止时,记录系统内存的所有内容。 完整内存转储可能包含收集内存转储时正在运行的进程的数据。

    2:内核内存转储 (默认) 。 仅记录内核内存。 这会在计算机意外停止时加快将信息记录到日志文件中的过程。

    3:小内存转储。 记录可帮助识别计算机意外停止原因的最小有用信息集。

    步骤4:将服务器配置为在生成内存转储后自动重新启动

    默认情况下,在生成内存转储后,服务器将自动重新启动。 若要查看当前配置,请运行以下命令:

    wmic RECOVEROS get AutoReboot

    如果 AutoReboot 的值为 TRUE,则在生成内存转储后,服务器将自动重新启动。 不需要任何配置,你可以继续下一步。

    如果 AutoReboot 的值为 FALSE,则服务器不会自动重新启动。 运行以下命令以更改值:

    wmic RECOVEROS set AutoReboot = true

    步骤5:将服务器配置为覆盖现有的内存转储文件

    默认情况下,当创建新文件时,服务器将覆盖现有的内存转储文件。 若要确定现有内存转储文件是否已配置为要覆盖,请运行以下命令:

    wmic RECOVEROS get OverwriteExistingDebugFile

    如果值为1,则服务器将覆盖现有的内存转储文件。 不需要配置,你可以继续下一步。

    如果该值为0,则服务器不会覆盖现有的内存转储文件。 运行以下命令以更改值:

    wmic RECOVEROS set OverwriteExistingDebugFile = 1

    步骤6:设置管理警报

    确定是否适合管理警报,并相应地设置 SendAdminAlert 。 若要查看 SendAdminAlert 的当前值,请运行以下命令:

    wmic RECOVEROS get SendAdminAlert

    SendAdminAlert 的可能值为 TRUE 或 FALSE。 若要修改现有 SendAdminAlert 值为 true,请运行以下命令:

    wmic RECOVEROS set SendAdminAlert = true

    步骤7:设置内存转储的页面文件大小

    若要检查当前页面文件设置,请运行以下命令之一:

    wmic.exe pagefile

    wmic.exe pagefile list /format:list

    例如,运行以下命令来配置页面文件的初始大小和最大大小:

    wmic pagefileset where name="c:\\pagefile.sys" set InitialSize=1000,MaximumSize=5000

    步骤8:配置服务器以生成手动内存转储

    可以使用 PS/2 键盘手动生成内存转储。 默认情况下,此功能处于禁用状态,并且不能用于通用串行总线 (USB) 键盘。

    若要使用 PS/2 键盘启用手动内存转储,请运行以下命令:

    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /v CrashOnCtrlScroll /t REG_DWORD /d 1 /f

    若要确定是否已正确启用此功能,请运行以下命令:

    Reg query HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ i8042prt \ Parameters / v CrashOnCtrlScroll

    您必须重新启动服务器才能使更改生效。 可以通过运行以下命令来重新启动服务器:

    Shutdown / r / t 0

    你可以使用连接到服务器的 PS/2 键盘来生成手动内存转储,方法是在按下右 CTRL 键的同时按住滚动锁定键两次。 这会使计算机 bug 检查并出现错误代码0xE2。 重新启动服务器后,会在步骤2中创建的目标路径中显示一个新的转储文件。

    步骤9:验证是否正确创建了内存转储文件

    你可以使用 dumpchk.exe utlity 来验证是否正确创建了内存转储文件。 dumpchk.exe 实用程序未随 Server Core 安装选项一起安装,因此你必须从具有桌面体验的服务器或从 Windows 10 中运行它。 此外,必须安装 Windows 产品的调试工具。

    使用 dumpchk.exe 实用程序,你可以使用所选的媒体将内存转储文件从 Windows server 2008 的服务器核心安装传输到其他计算机。

    警告

    页面文件可能非常大,因此请仔细考虑传输方法和该方法所需的资源。

    其他参考

    有关使用内存转储文件的常规信息,请参阅Windows 的内存转储文件选项概述。

    展开全文
  • 建立内存文件系统 在内存中建立一个虚拟磁盘; 建立文件系统; 设计合理的数据结构,管理虚拟磁盘中已分配和未分配的盘块; 设计相应的目录结构,文件控制块等来... 实现磁盘转储功能,使文件可以从虚拟磁盘转入内存
  • 我将进行最后的清除,并删除多余的代码,然后我将进行最后的提交。 联系人: wiresharkGD@gmail.com || @Hexploitable ##指示 在反汇编程序中打开目标应用程序,获取要挂接的方法的前〜16个字节(您可以自定义...
  • 有时,当我运行代码时,通过Ctrl + 终止程序会生成一个核心转储文件。 文件名的格式为core.*。 该程序不会突然终止,并且没有分段错误。 我相信它是SIGQUIT而不是SIGABRT或SIGSEGV。 如果我尝试Ctrl + C或Ctrl + Z,...

    有时,当我运行代码时,通过Ctrl + 终止程序会生成一个核心转储文件。 文件名的格式为core.*。 该程序不会突然终止,并且没有分段错误。 我相信它是SIGQUIT而不是SIGABRT或SIGSEGV。 如果我尝试Ctrl + C或Ctrl + Z,则不会生成。

    谁能说出为什么仅在按下Ctrl + 时才生成它? 如何避免生成此核心转储文件? 核心转储文件有什么用?

    当您说"运行我的代码"时,您是在谈论运行make的时间吗? 还是运行编译后的二进制文件?

    只是一小部分:至少有一个答案可以解释为什么SIGINT不创建内核,但是我乍看之下没有任何关于SIGTSTP的讨论(这是ctrl + z的默认操作)-它暂停了该过程。 内置的jobs shell将向您显示已暂停的进程。 另请参见help fg(如果至少使用bash可以使用)。 您也可以通过以下命令生成此内容:kill -SIGTSTP。 还请注意,您可以重新定义默认情况下发送的控件组合(即:如果需要,可以将SIGTSTP定义为ctrl + j)。 stty -a将向您显示配置-和其他信息。

    当进程由于程序故障而被操作系统终止时,进程将转储核心。发生这种情况的最典型原因是因为程序访问了无效的指针值。鉴于您有一个零星的转储,很可能您使用的是未初始化的指针。

    您可以张贴导致故障的代码吗?除了模棱两可的概括之外,很难在不实际看到代码的情况下猜测出了什么问题。

    至于什么是核心转储,请查看以下Wi??kipedia文章:

    http://en.wikipedia.org/wiki/Core_dump

    在Linux中,即使程序没有故障并且在终止时运行正常,Ctrl + 也会导致核心转储。

    更具体地说,当进程超出其内存空间(读/写)时。还有另一个原因(尽管我不反对它可能是与指针相关的错误的建议)似乎会发生随机崩溃:进程会覆盖内存,但不会耗尽其内存空间。然后,稍后在该过程中,在错误发生很长时间之后,您将获得已废弃的堆栈。它可能会引起各种各样的问题,并且可能是噩梦般的追踪-尽管它的某些版本控制可以帮助您找到经验。

    @ely如果配置为SIGQUIT,则为yes(默认为)。但这是因为SIGQUIT的默认处理程序是转储核心。 Iirc不会引起UB忽略SIGQUIT,这意味着您可以防止这种情况。

    正如其他人所说,核心转储是程序故障的结果。

    您可以使用ulimit命令配置是否要生成核心转储。进入

    ulimit -c 0

    禁用活动外壳中的核心文件生成。

    如果生成内核的程序是使用符号信息构建的,则可以执行事后调试会话,如下所示:

    gdb --core

    当进程接收到诸如SIGSEGV之类的某些信号时,将生成内核转储,内核在访问其地址空间之外的内存时将其发送给内核。通常,发生这种情况是由于指针使用方式错误。这意味着程序中存在错误。

    核心转储对于发现错误很有用。它是问题发生时进程内存的映像,因此可以使用诸如gdb之类的调试器来查看程序当时正在做什么。调试器甚至可以访问(有时)程序中变量的值。

    您可以使用ulimit命令防止发生核心转储。

    ctrl +将信号SIGQUIT发送到进程。根据POSIX.1标准,此信号的默认操作是生成内核。

    当系统将生成内核时,SIGILL,SIGABRT,SIGFPE,SIGSEGV是其他情况。

    有关更多详细信息,请参考系统上的" man 7信号"。

    真正。应该注意的是,除了SIGILL之外,还有SIGKILL。 SIGKILL默认情况下不会生成coredump,但是就像SIGSTOP一样,它不能被捕获,忽略或阻止。我指出这一点是因为它很容易将SIGILL理解为SIGKILL-特别是如果您不知道两者都存在的话。

    在信号处理程序上,请注意UB:根据POSIX,在忽略非由kill(2)或raise(3)生成的SIGFPE,SIGILL或SIGSEGV信号之后,进程的行为是不确定的。整数除以零将产生不确定的结果。在某些架构上,它将生成SIGFPE信号。 (也将最大负整数除以-1可能会生成SIGFPE。)忽略此信号可能会导致无限循环。

    它是一个工具,可以帮助调试性能不佳的应用程序。它之所以大,是因为它包含死亡时所有应用程序物理内存的内容,以及所有线程的寄存器状态和堆栈。

    它们在内核因执行恶意操作而杀死应用程序时生成,例如生成分段违规或总线错误。

    嗡嗡声...它仅包含进程内存的转储,但仍然可以是很多内存。

    邪恶?那将意味着犯错是邪恶的。也许是有意的夸张,但那是一个巨大的夸张。大小随进程(文件)的大小而变化。从技术上讲,它本身不会产生段错误,而是触发一个。

    您可以通过编写不会崩溃的代码来避免创建核心转储文件:)

    认真地说,核心转储很有用,因为您可以查看程序崩溃时的状态,以进行"事后验验"调试。您可以在gdb中打开它们并检查程序的状态(尤其是如果它是通过调试构建的)。

    通常,如果程序具有SIGSEGV(通常是由无效的指针解引用引起的),SIGABRT(如果您调用abort()或在C ++中由默认的terate()处理函数在析构函数中的异常等情况下发生的话),则会发生核心转储。其他故障。您还可以使用调试器显式地或以编程方式触发它们。

    如果您已修复所有错误,并且已完善,则可以将其删除。另外,如果您以任何方式更改了程序(并重新编译了程序),那么它们将变得无用,因为调试信息现在与核心转储中的内容不匹配,因此您也可以删除它们。

    实际上,即使您不重新编译,也会发生这种情况,因为源文件的行信息不再匹配。因此,如果您在更改源代码时使用coredump进行调试,则很有可能会犯错。甚至一行都可以使事情复杂化。

    Ctrl + 的目的是生成核心转储。这就是SIGQUIT的作用。如果不希望生成它,请改用Ctrl + C(SIGINT)。如果有问题的程序没有响应SIGINT,但是您需要从终端将其杀死,则说明您或开发人员在做错什么。

    设计为不使用Ctrl + C从终端杀死的程序仍应正常响应SIGTERM,这可以通过kill -TERM ...在另一个终端中触发。如果其他所有方法均失败,则SIGKILL将强制立即终止。

    或更改SIGQUIT的默认行为。

    展开全文
  • 前言 我们在内核转储,开抓啦!这篇文章里介绍了一个关键的系统设置。设置好后可以让系统在蓝屏(Blue Screen of Death,简称 BSOD)的时候自动保存转储文件。当时只是简单...

    前言

    我们在内核转储,开抓啦!这篇文章里介绍了一个关键的系统设置。设置好后可以让系统在蓝屏(Blue Screen of Death,简称 BSOD)的时候自动保存转储文件。当时只是简单的介绍了设置步骤,本文力求详细的介绍相关内容。

    我们先根据下面的动图回顾一下设置步骤:

    系统转储设置

    不知道大家有没有想过这些设置保存在哪里了呢?我猜保存在注册表里。是不是呢?我们一起来看看吧。

    保存位置

    为了找到这些设置保存的位置,我特意用 process monitor 捕获了整个设置过程,并录制了一段视频。

    转储设置保存位置调查

    根据调查结果可知,转储类型 保存在注册表如下位置:HKLM\System\CurrentControlSet\Control\CrashControl\CrashDumpEnabled 。每一项对应的值如下表:

    中文名英文名
    (无)(None)0
    小内存转储(256KB)Small memory dump3
    核心内存转储Kernel memory dump2
    完全内存转储Complete memory dump1
    自动内存转储Automatic memory dump7
    活动内存转储Active memory dump1

    我们可以发现, 完全内存转储活动内存转储 设置的 CrashDumpEnabled 的值居然一样,都是 1。肯定有其它地方不一样。把过滤条件改为 Path  begins with  HKLM\System\CurrentControlSet\Control\CrashControl

    更改过滤条件

    继续观察,得到的对比结果如下。

    结果对比

    经过对比我们发现,当设置为 活动内存转储 时,会设置注册表项HKLM\System\CurrentControlSet\Control\CrashControl\FilterPages 的值为 1,当设置为 完全内存转储 时,会删除 FilterPages 子项。

    说明:

    win7 及更早的系统中没有 自动内存转储活动内存转储 选项。自动内存转储 是从 win8 开始引入的。活动内存转储 是从 win10 开始引入的。

    win7 系统转储设置

    其它相关设置

    除了指定转储类型,我们还可以进行其它设置。

    • 转储文件: 指定转储文件保存的位置。

      对于小内存转储,指定的是转储文件保存的目录,默认是 %SystemRoot%\Minidump\。对于其它几种转储类型,指定的是转储文件的保存路径,默认是 %SystemRoot%\MEMORY.DMP

    • 自动重新启动(R) 选项:如果勾选,可以让系统在蓝屏后自动重启。

    • 将事件写入系统日志(W) 选项:如果勾选,可以把蓝屏事件记录到系统日志里。

    • 覆盖任何现有文件(O) 选项:如果勾选,覆盖已存在的同名文件,否则不覆盖(如果已经有同名文件,本次蓝屏的转储文件不会生成)。此选项对小内存转储不生效。

    • 禁止在磁盘空间不足时自动删除内存转储(A) 选项:如果勾选,即使在磁盘空间不足时也不删除之前保存的转储文件。此选项在 win7 中不存在,是在更高版本的操作系统中引入的。

    每一项在注册表中的对应位置,请参考如下代码。保存为 .reg 文件,双击即可导入。

    Windows Registry Editor Version 5.00
    
    ; 将事件写入系统日志。1 表示写入,0 表示不写入
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "LogEvent"=dword:00000000
    
    ; 是否自动重启。1 表示自动重启,0 表示不自动重启
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "AutoReboot"=dword:00000000
    
    ; 转储类型。每个值的意义参考上表
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "CrashDumpEnabled"=dword:00000001
    
    ; 转储文件的保存路径。以二进制形式表示的 UNICODE 路径。默认值是 %SystemRoot%\MEMORY.DMP
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "DumpFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
      74,00,25,00,5c,00,4d,00,45,00,4d,00,4f,00,52,00,59,00,2e,00,44,00,4d,00,50,\
      00,00,00
    
    ; 小内存转储文件保存路径。以二进制形式表示的 UNICODE 路径。默认值是 %SystemRoot%\MEMORY.DMP
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "MinidumpDir"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\
      00,74,00,25,00,5c,00,4d,00,69,00,6e,00,69,00,64,00,75,00,6d,00,70,00,00,00
    
    ; 小内存转储文件保存的最大个数。如果转储文件数量超过此值,则删除最旧的那个。
    ; 界面上没有对应的设置,只能通过注册表修改。
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "MinidumpsCount"=dword:00000005
    
    ; 覆盖任何现有文件。1 表示覆盖,0 表示不覆盖。对小内存转储不生效。
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "Overwrite"=dword:00000001
    
    ; 禁止在磁盘空间不足时自动删除内存转储。1 表示不删除,0 表示删除
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "AlwaysKeepMemoryDump"=dword:00000000
    

    各种转储类型介绍

    关于这几种转储类型的介绍,主要翻译自微软官方文档,但不完全是。喜欢看英文文档的小伙伴儿请参考微软官方文档。

    • 完全内存转储

      包含操作系统使用的所有物理内存。默认不包含平台固件占用的物理内存。为了确保转储文件可以顺利生成,请确保引导盘上的页面文件大小至少是物理内存大小 + 1 MB(写转储文件时需要一些头信息)。假设,物理内存是 4GB,我们需要保证初始大小至少是 4097MB。当然设置成更大的值也没关系。我们可以按下图进行设置:

      手动设置分页文件大小
    • 活动内存转储

      活动内存转储 类似于 完整内存转储,但是会过滤掉不太可能与排除故障相关的页面。由于这种过滤,产生的转储文件通常比 完整内存转储 小得多。

      这种类型的转储文件包含分配给用户模式应用程序的任何内存。它还包括分配给 Windows 内核和硬件抽象层(HAL)的内存,以及分配给内核模式驱动程序和其他内核模式程序的内存。转储文件包括映射到内核或用户空间的对调试有用的活动页面,还包括选择的以分页文件为后备的转换、备用和修改页面,比如使用 VirtualAlloc 或以分页文件为后备的内存区域。活动内存转储 不包括空闲列表、零列表、文件缓存、客户虚拟机页面和其他各种类型的不太可能对调试有用的内存。

      当目标系统中托管了虚拟机的时候,活动内存转储 特别有用。完全内存转储会包含所有虚拟机占用的内存,而活动内存转储 不会。

      活动内存转储 在 Windows 10 或更高版本的系统中可用。

    • 核心内存转储

      包含了系统崩溃时内核所使用的物理内存。

      这种转储文件比完整内存转储小得多。

      核心内存转储 不包括未分配的内存,或分配给用户态应用程序的任何内存。它只包括分配给 Windows 内核和硬件抽象层(HAL)的内存,以及分配给内核模式驱动程序和其他内核模式程序的内存。

      大多数情况下,这种类型的崩溃转储是最有用的。它比完全内存转储小得多,但是它只忽略了那些不太可能涉及崩溃的内存部分。

      由于这种转储文件不包含崩溃时驻留在内存中的任何用户模式可执行文件的映像,所以如果这些可执行文件非常重要,您可能还需要设置可执行映像路径。

    • 自动内存转储

      自动内存转储内核内存转储 包含相同的信息。两者的区别不在于转储文件本身,而在于 Windows 设置系统分页文件大小的方式。

      如果系统分页文件大小设置为 系统管理的大小(Y),转储类型设置为 自动内存转储,那么 Windows 可以将分页文件大小设置的比物理内存还要小。在这种情况下,Windows 将分页文件的大小设置得足够大,以确保在大多数情况下可以捕获内核内存转储。

      如果系统崩溃,而分页文件的大小不足以保存内核内存转储,则 Windows 会将分页文件的尺寸增加到至少物理内存的大小。此事件(增大分页文件尺寸的事件)发生的时间会被记录在注册表项HKLM\SYSTEM\CurrentControlSet\Control\CrashControl\LastCrashTime 中。

      增加后的分页文件大小将保持 4 周,然后恢复到之前较小的值。如果希望在 4 周之前就恢复到之前较小的值,可以删除此注册表项。

      自动内存转储在 Windows 8 或更高版本的系统中可用。

    • 小内存转储(256KB)

      小内存转储包含如下内容:

      • 错误检查信息和参数,以及其它蓝屏数据。

      • 崩溃的处理器上下文(PRCB)。

      • 崩溃进程的进程信息和内核上下文(EPROCESS)。

      • 崩溃线程的线程信息和内核上下文(ETHREAD)。

      • 崩溃线程的内核模式调用堆栈。如果它大于 16 KB,则只包含最前面的 16 KB

      • 加载的驱动程序列表。

    Windows XPWindows 的后续版本中,还包括以下内容:

      • 已加载模块和已卸载模块的列表。

      • 调试器数据块。它包含关于系统的基本调试信息。

      • Windows 标识为对调试失败有用的任何附加内存页。这包括发生崩溃时寄存器所指向的内存页,以及故障组件特别请求的其他内存页。

      • Windows Server 2003 及更高版本)The Windows SKU —— 比如,"Professional" 或者 "Server"。

        关于 Windows SKU 可以参考链接 https://www.thewindowsclub.com/windows-7-versions-sku

    总结

    • 小内存转储(256KB) 默认会保存到 %SystemRoot%\Minidump 文件夹下,其它几种类型的转储文件默认保存到 %SystemRoot%\Memory.dmp

    • 各种转储类型产生的转储文件中包含的信息不一样,根据自己的需要选择。产生的转储文件大小排序如下:完全内存转储 > 活动内存转储 > 核心内存转储 = 自动内存转储 > 小内存转储

    • 系统蓝屏后是否自动重启,是否保存转储文件,是否覆盖现有文件,转储文件保存类型,转储文件保存位置等相关设置都在注册表项 HKLM\System\CurrentControlSet\Control\CrashControl\ 下,可以根据需要修改本文中的代码,并另存为 .reg 文件,双击导入系统即可。注意需要重启生效。

    • 如果在调试的时候遇到了 missing page 错误,可以使用 .ignore_missing_pages 命令。

    • process monitor 的帮助下,没查看任何帮助文档就把各个类型的转储文件对应的值及保存位置调查清楚了!process monitor 真是调查此类问题的神兵利器!你值得拥有!

    参考资料

    • https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-179-Manually-Forcing-a-Crash-Dump

    • https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/varieties-of-kernel-mode-dump-files

    • https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/complete-memory-dump

    • https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/active-memory-dump

    • https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/kernel-memory-dump

    • https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/automatic-memory-dump

    • https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/small-memory-dump

    猜你喜欢:

    转储文件系列:

    转储文件知多少

    你需要知道的 N 种抓取 dump 的工具

    你生成的转储文件有问题吗?

    向大厂看齐!为自己的程序增加自动转储的功能!

    内核转储,开抓啦!

    调试系列:

    调试实战——你知道怎么使用DebugView查看调试信息吗?

    调试实战——程序CPU占用率飙升,你知道如何快速定位吗?

    调试实战——崩溃在ComFriendlyWaitMtaThreadProc

    调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs

    调试实战——调试PInvoke导致的内存破坏

    调试实战——调试excel启动时死锁

    调试实战——调试DLL卸载时的死锁

    调试实战——调试TerminateThread导致的死锁

    排错系列:

    排错实战——VS清空最近打开的工程记录

    排错实战——拯救加载调试符号失败的IDA

    排错实战——你知道拖动窗口时只显示虚框怎么设置吗?

    排错实战——解决Tekla通过.tsep安装插件失败的问题

    排错实战——使用process explorer替换任务管理器

    排错实战——通过对比分析sysinternals事件修复程序功能异常

    展开全文
  • 手动内核或完整内存转储文件在解决若干问题时很有用,因为进程在崩溃时捕获系统内存记录。设置页面文件有关 系统崩溃转储的页面 文件大小要求,请参阅支持系统故障转储。启用内存转储设置您必须以管理员或安全组管理...
  • 目录 问题如下: 解决: 总结: 问题如下: 脱壳的时候我下了硬件断点:在PUSHAD的下一步查看ESP,OD的左下角...但是内存转储出来的exe打开无效果不运行,在110版本的OD中提示:“hasentrypointoutsidethecode...
  • 文章目录 一、调试环境准备 二、使用crash分析vmcore 1、bt命令 2、log命令 3、dis命令 ...我们在Kdump-内核崩溃转储服务中,介绍了kdump服务可以在系统崩溃时,生成崩溃转储文件vmcore,.
  • 内存分析器变体 IBM Java监视和诊断工具-内存分析器通过使用IBM Java诊断工具... DTFJ使用操作系统级转储和IBM可移植堆转储来启用Java堆分析。 IBM变体是IBM Support Assistant(ISA)的一部分。 DTFJ插件可用于...
  • 内存文件系统

    2013-07-05 10:20:58
    内存文件系统:建立基于内存文件系统。 首先在内存中建立虚拟磁盘; 在该磁盘上建立相应的文件系统; 为该文件系统设计相应的数据结构来管理目录、虚拟磁盘的空闲空间、已分配空间等。 提供文件的创建、删除、移位...
  • 在Node.js开发中,核心转储分析可以帮助调试程序崩溃和内存泄漏。 IBM SDK for Node.js通过IBM监视和诊断工具-交互式诊断数据资源管理器 (IDDE)为Node.js应用程序提供了一种新的核心转储分析和调试方法。 IDDE是...
  • # jps 14370 jar 2022 QuorumPeerMain 2072 Bootstrap 2169 Bootstrap 16446 Jps # 将live进程生成java堆转储快照 [root@localhost ~]# jmap -dump:live,file=b.heap 32239 Dumping heap to /root/b.heap ......
  • 建立基于内存文件系统

    热门讨论 2011-12-26 17:04:06
    内存文件系统:建立基于内存文件系统。 首先分配一定容量的内存,建立虚拟磁盘; 在该磁盘上建立相应的文件系统; 为该文件系统设计相应的数据结构来管理目录、虚拟磁盘的空闲空间、已分配空间等。 提供文件的创建...
  • 它允许人们转储SYSTEM,SECURITY和SAM注册表配置单元,一旦复制到攻击者计算机上,就提供了删除这些文件以清除跟踪的选项。 通常,这是一个重复的过程,一旦攻击者在受到感染的主机上获得系统级访问权限,则转储配置...
  • 转储及调试

    千次阅读 2015-12-05 13:27:26
    一、概念 1. 内核转储作用   (1) 内核转储的最大好处是能够保存问题发生时的状态...请问WIN7创建转储文件在哪? 最佳答案: 在C盘-用户-我的文档中,直接删除就行了. 如何调试? http://www.cnblogs.com/l
  • 当redis触发rdb的持久化之后,如果内存中的redis数据太大,会临时存储到temp-pid.rdb文件,最后再从temp-pid.rdb文件copy到你redis设置的rdb持久化文件中。 查看redis进程 $ls -l /proc/$(pidof redis-server)/...
  • 内存转储

    千次阅读 2011-11-24 11:27:04
    小内存转储 目录 什么是小内存转储如何设置解决蓝屏故障 ... 内存转储是用于系统崩溃时,...小内存转储,就是只保存内存前64KB的基本空间数据的内存转储文件。这样可以节省磁盘空间,也方便文件的查看。 如何设置
  •   gcore 命令可以从命令行直接生成内核转储文件。在命令行使用 gcore pid,其中 pid 为进程号。该命令无须停止正在运行的程序以获得内核转储文件,当需要在其他机器上单独分析问题原因,或是分析客户现场发生的...
  • 一、Oracle跟踪文件 Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动、关闭和运行期间后台进程的活动情况,如表空间创建、回滚段创建、某些alter命令、日志切换、错误消息等。在数据库出现...
  • Oracle 跟踪文件文件转储(dump) 一、Oracle跟踪文件分类 Oracle跟踪文件分为三种类型,如下: 一种是后台报警日志文件,记录数据库在启动、关闭和运行期间后台进程的活动情况,如表空间创建、回滚段...
  • 一个文件映射可以有多个映射区域,以便用户可以文件的各个部分与进程的地址空间关联起来,而不必将整个文件映射到地址空间中,因为文件可以大于整个地址空间过程(通常的32位系统中的9GB DVD映像文件)。...
  • 1. 修改注册表 当程序崩溃时 产生崩溃转储文件(dmp) a) OpenDump.bat - 自动生成dmp文件 b) 注册表 参数说明: c) CloseDump.bat - 关闭此功能 2. 在程序中加入代码 3. 任务管理器 - 适用崩溃未立即退出 4. ...
  • 有没有办法将一个numpy数组转储到csv文件中?我有一个2d numpy数组,需要以人类可读的格式转储它。numpy.savetxt将数组保存到文本文件中。import numpya = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])numpy....
  • java 文件保存在内存 通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用! 您花费了无数小时来解决Java应用程序中的错误并在需要的地方获得其性能。 ...
  • PCILeech还支持本地捕获内存和多种内存转储文件格式。 PCILeech支持多个内存采集设备。 基于硬件和软件。 基于USB3380的硬件只能本地读取4GB内存,但是如果首先将内核模块(KMD)插入目标系统内核,则可以读取所有...
  • 我试图从RCP程序中打开一个word文件(已经创建了“ test.docx”)。 我已使用jacob.jar (CLASSPATH)和jacob.ddl (PATH)来打开文件-我已按照本教程中的说明进行操作。 但是,当我运行该程序时,word文件弹出,但突然...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,353
精华内容 8,941
关键字:

内存转储文件可以删除