【操作系統】Windows平臺捕獲崩潰現場底層原理,附代碼親測MiniDumpWriteDump

MiniDumpWriteDump 是一個Windows API函數,它屬于DbgHelp.dll庫,用于生成程序崩潰時的內存轉儲文件(MiniDump)。這個函數是Windows平臺下用于捕獲程序崩潰時的內存狀態的常用方法之一。以下是MiniDumpWriteDump函數的原理和工作流程:

  1. 函數調用
    當程序崩潰時,操作系統會捕獲到一個異常信號(如EXCEPTION_ACCESS_VIOLATIONEXCEPTION_INT_DIVIDE_BY_ZERO等),并根據配置決定是否生成轉儲文件。如果配置允許,操作系統會調用MiniDumpWriteDump函數。

  2. 參數準備
    MiniDumpWriteDump函數需要幾個關鍵參數:

    • hProcess:表示要轉儲的進程的句柄。
    • ProcessId:表示要轉儲的進程的ID。
    • hFile:表示要寫入轉儲數據的文件句柄。
    • DumpType:指定轉儲文件的類型,例如MiniDumpNormalMiniDumpWithFullMemoryMiniDumpWithHandleData等。
    • ExceptionParam:指向異常信息的指針,如果是因為異常而生成轉儲文件,這個參數會提供異常的詳細信息。
    • UserStreamParam:指向用戶流信息的指針,可以用來添加額外的用戶定義信息到轉儲文件中。
    • CallbackParam:指向回調函數的指針,如果提供了回調函數,它會在轉儲過程中被調用。
  3. 內存轉儲
    MiniDumpWriteDump函數會遍歷進程的內存空間,根據DumpType參數的設置,決定哪些內存區域需要被轉儲。例如,如果設置了MiniDumpWithFullMemory,則會轉儲整個進程的內存空間;如果設置了MiniDumpWithHandleData,則會轉儲進程的句柄信息。

  4. 文件寫入
    轉儲的數據會被寫入到由hFile參數指定的文件中。這個文件就是最終生成的MiniDump文件,它包含了崩潰時的內存快照、寄存器狀態、線程信息等。

  5. 結束轉儲
    當所有需要的數據都被寫入文件后,MiniDumpWriteDump函數會返回,轉儲過程結束。

  6. 后續處理
    生成的MiniDump文件可以被開發者使用調試工具(如WinDbg)打開和分析,以幫助診斷程序崩潰的原因。

MiniDumpWriteDump函數是Windows平臺上進行程序崩潰分析的重要工具,它允許開發者在程序崩潰時捕獲到程序的完整狀態,從而進行深入的調試和問題定位。

#include <windows.h>
#include <dbghelp.h>void GenerateMiniDump(const char* dumpPath) {HANDLE hProcess = GetCurrentProcess();HANDLE hFile = CreateFile(dumpPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {return;}MINIDUMP_EXCEPTION_INFORMATION mei;mei.ThreadId = GetCurrentThreadId();mei.ExceptionPointers = NULL;mei.ClientPointers = FALSE;MINIDUMP_USER_STREAM_INFORMATION musi;musi.UserStreamCount = 0;musi.UserStreamArray = NULL;MINIDUMP_CALLBACK_INFORMATION mci;mci.CallbackRoutine = NULL;mci.CallbackParam = NULL;BOOL result = MiniDumpWriteDump(hProcess, GetCurrentProcessId(), hFile, MiniDumpNormal, &mei, &musi, &mci);if (result) {// Dump file generated successfully} else {// Error occurred while generating the dump file}CloseHandle(hFile);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21048.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21048.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21048.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++】ios::sync_with_stdio(false) 與 cin.tie(nullptr) 加速 IO

一、前言 之前寫題遇到大數據量&#xff08;cin、cout 數據量級達到 1e5、1e6 &#xff09;&#xff0c;因為考慮 IO 性能報錯 TLE&#xff0c;故選擇 scanf、printf 替代 cin、cout&#xff0c;以解決問題。一直以來沒有深入研究其中原因&#xff0c;只知關鍵詞——同步&…

設計模式(十三)行為型模式---命令模式

文章目錄 命令模式簡介結構UML圖具體實現UML圖代碼實現 命令模式簡介 命令模式&#xff08;command pattern&#xff09;也叫動作模式或者事務模式。它是將請求&#xff08;命令&#xff09;封裝成對象&#xff0c;使得可以用不同的請求對客戶端進行參數化&#xff0c;具體的請…

MD中 面料的物理屬性參數

該圖片是Marvelous Designer軟件中"Fabric Physical Properties"(面料物理屬性)面板的截圖,用于調整面料在彎曲、折疊時的硬度(Buckling Stiffness)。 目標部分解釋了調整Buckling Stiffness的作用:通過調整該百分比值來決定面料角落處的硬度。進入80%的Buckling St…

筆記-anaconda配置Python環境

查看環境 conda env list 創建python name環境,python版本為3.9&#xff1a; conda create -n name python3.9 激活&#xff1a; conda activate name 去掉激活&#xff1a; conda deactivate name 進入pandas目錄&#xff1a; cd D:\學習\pyton\antpy代碼\ant-learn-…

NXP RT1060學習總結 - CANFD功能

1、RT1060-CAN FD功能簡介 這里使用RT1060系列的1064芯片進行開發&#xff0c;測試板是官方提供的開發板&#xff1b;RT1060系列支持3路CAN功能&#xff0c;CAN1和CAN2只能最為普通的CAN外設&#xff0c;支持CAN2.0&#xff0c;而CAN3支持CAN-FD功能&#xff1b;CAN-FD功能這里…

【LeetCode 77. 組合】

1. 題目 2. 分析 本題有個難點在于如何保存深搜得到的結果&#xff1f;總結了一下&#xff0c;深搜處理的代碼&#xff0c;關于返回值有三大類。 第一類&#xff1a;層層傳遞&#xff0c;將最深層的結果傳上來&#xff1b;這類題有&#xff1a;【反轉鏈表】 第二類&#xff1…

域名/子域名接管漏洞

域名/子域名接管漏洞 1.域接管2.子域接管子域接管概述使用BBOT掃描可劫持的子域通過DNS通配符生成子域接管 3.利用子域接管4.子域名接管防御手段 1.域接管 如果您發現某個域名被某個服務使用&#xff0c;但公司已經失去了對其的所有權&#xff0c;您可以嘗試注冊它&#xff08…

默認路由,直接路由,靜態路由,動態路由

對于華為設備&#xff0c;如華為路由器或交換機&#xff0c;設置這些路由類型需要通過設備的管理界面或命令行界面進行配置。以下是一般情況下如何在華為設備上設置這些路由類型的指導&#xff1a; 默認路由&#xff1a; 使用命令行界面&#xff08;CLI&#xff09;&#xff0c…

QMatrix詳解

一、定義 QMatrix是Qt框架中的一個類&#xff0c;它表示一個2x3的變換矩陣&#xff0c;通常用于進行二維圖形的幾何變換。這個類允許你對圖形進行平移、縮放、旋轉和剪切等操作。 二、功能 QMatrix的主要功能是提供一個便捷的方式來對二維圖形進行線性變換。通過構建一個變換…

CS和msf的權限傳遞,利用mimikatz抓取win10明文密碼

一、Cobaltstrike的安裝 http://t.csdnimg.cn/yhZin 安裝CobaltStrike&#xff0c;瀏覽博主的上篇文章即可&#xff01;&#xff01;&#xff01; 這里我在自己的本機win11上執行了Client去連接kali中的Server端&#xff0c;直接執行.cmd文件即可&#xff01;&#xff01;&…

【vscode】ctrl+shift+end選中以下所有行刪除

總結&#xff0c;ctrlshiftend選中以下所有行 以下由chatgpt生成 在 Visual Studio Code&#xff08;VS Code&#xff09;中&#xff0c;如果你想要選中當前光標所在的一行及之后的所有行并刪除它們&#xff0c;可以通過組合鍵操作來實現。這種功能在編輯大型文件時特別有用&am…

【計算機畢業設計】基于SSM++jsp的校園驛站管理系統【源碼+lw+部署文檔】

目錄 第1章 緒論 1.1 課題背景 1.2 課題意義 1.3 研究內容 第2章 開發環境與技術 2.1 MYSQL數據庫 2.2 JSP技術 2.3 SSM框架 第3章 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 經濟可行性 3.1.3 操作可行性 3.2 系統流程 3.2.1 操作流程 3.2.2 登錄流程 3.2.3 刪除信息流…

node會話管理詳解(cookie、session、token)

在Node.js中&#xff0c;cookie、session和token都是用于會話管理的機制&#xff0c;但它們各自有不同的使用場景和特性。 一、cookie 命令&#xff1a;npm install cookie-parser -save -save 參數表示將這個模塊添加到項目的 package.json 文件的 dependencies 部分&#x…

C語言| 輸出菱形*

C語言| 輸出*三角形-CSDN博客 輸出菱形。 【分析思路】 學會輸出*的三角形之后輸出菱形就很簡單了。我們分析一下&#xff0c;菱形是由兩個對稱的三角形組成的&#xff0c;也因為是對稱的&#xff0c;所以輸出的菱形的行數肯定是一個奇數。 1 我們在編程的時候&#xff0c;要…

基于卷積-小波神經網絡的SAR圖像海冰變化檢測方法(MATLAB R2018A)

海冰是冰凍圈的重要組成部分&#xff0c;海冰的變化信息對航行安全和自然資源開采等非常重要&#xff0c;許多船舶沒有加固防冰設備&#xff0c;因此&#xff0c;必須避開所有的冰區。尤其當冰壓很高時&#xff0c;即使破冰船也很難在冰層中前行。為了安全航行&#xff0c;獲取…

leetCode.89. 格雷編碼

leetCode.89. 格雷編碼 題目思路 代碼 class Solution { public:vector<int> grayCode(int n) {vector<int> res(1,0); // n 0時&#xff0c;之后一位0while (n--) {// 想要實現對象超下來&#xff0c;就從末尾開始&#xff0c;讓vector里面 加 元素for (int i …

Stable Diffusion Webui--安裝與使用

最近進行的課程匯報&#xff0c;學習了2023年的CVPR文章《DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation》&#xff0c;因此嘗試使用了幾種方法對這篇文章的工作進行了一定的復現。本文主要介紹Stable Diffusion Web UI(webui)的安裝…

【因果推斷python】10_分組和虛擬變量回歸1

目錄 分組數據回歸 分組數據回歸 并非所有數據點都是一樣的。 如果我們再次查看我們的 ENEM 數據集&#xff0c;相比小規模學校的分數&#xff0c;我們更相信規模較大的學校的分數。 這并不是說大型學校更好或什么&#xff0c; 而只是因為它們的較大規模意味著更小的方差。 i…

bootstrap5-學習筆記1-容器+布局+按鈕+工具

參考&#xff1a; Bootstrap5 教程 | 菜鳥教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Spacing Bootstrap v5 中文文檔 v5.3 | Bootstrap 中文網 https://v5.bootcss.com/docs/utilities/spacing/ 之前用bootstrap2和3比較多&#xff0c;最近用到了5&a…

SRE視角下的DevOps構建之道

引言&#xff1a; 隨著數字化時代的飛速發展&#xff0c;軟件成為了企業競爭力的核心。為了更高效地交付高質量的軟件&#xff0c;DevOps&#xff08;Development和Operations的組合&#xff09;作為一種文化、實踐和工具集的集合&#xff0c;逐漸成為了行業內的熱門話題。然而…