PDB符號檔案資訊

2022-03-02 02:18:37 字數 3863 閱讀 2384

**:

一、前言

這個方法是通過網上的一些方式自己學習列舉pdb檔案資訊。

二、**實現

首先列舉驅動檔案,這裡用psapi庫

#include "

psapi.h

"#pragma comment(lib,"psapi.lib")

void cenumpdbdlg::enummodule()

;

//獲得基位址

if( enumdevicedrivers(drivers, sizeof(drivers), &cbneeded) && cbneeded < sizeof

(drivers))}}

}

本來想看能不能列舉其他資訊,看psapi的匯出函式,沒有相關函式,那就只能通過驅動方式獲得了。

然後通過dbghelp庫列舉符號資訊,這個庫是winddk裡面的庫

#include #pragma comment(lib,"dbghelp.lib")
通過下面幾個函式就可以列舉pdb檔案資訊了

void enumfunc::enumfuncinformation()

symsetoptions(symopt_deferred_loads);

handle hprocess =getcurrentprocess();

syminitialize(hprocess,

0, false);

std::

string

strsymbolpath;

//#if _win64strsymbolpath = "

srv*d:\\study\\symbols_win7_x64*";

#else

strsymbolpath = "

srv*d:\\study\\symbols_winxp_x86*";

#endif

symsetsearchpath(hprocess, strsymbolpath.c_str());

//std::

string strsystempath = "

c:\\windows\\system32\\

"; //

這是驅動檔案路徑

strsystempath +=g_strpath;

handle hsystemfile = createfilea(strsystempath.c_str(), generic_read, file_share_read |file_share_write,

null, open_existing,

0, null);

dword dwfilesize = getfilesize(hsystemfile, null); //

獲得檔案大小

//傳入驅動檔案路徑,驅動基址,驅動大小,這裡也不知道**用了pdb檔案

dword64 dwbase =symloadmodule64(hprocess, null,strsystempath.c_str(), null,(dword64)g_baseaddress , dwfilesize);

//列舉所有的函式資訊,在**中顯示

symenumsymbols(hprocess, dwbase, 0, enumsymcallback, this

); symunloadmodule64(hprocess, dwbase);

symcleanup(hprocess);

}

bool callback  enumsymcallback(psymbol_info psyminfo, ulong symbolsize, pvoid usercontext)

下面是**

**:

一、前言

這個方法是通過網上的一些方式自己學習列舉pdb檔案資訊。

二、**實現

首先列舉驅動檔案,這裡用psapi庫

#include "

psapi.h

"#pragma comment(lib,"psapi.lib")

void cenumpdbdlg::enummodule()

;

//獲得基位址

if( enumdevicedrivers(drivers, sizeof(drivers), &cbneeded) && cbneeded < sizeof

(drivers))}}

}

本來想看能不能列舉其他資訊,看psapi的匯出函式,沒有相關函式,那就只能通過驅動方式獲得了。

然後通過dbghelp庫列舉符號資訊,這個庫是winddk裡面的庫

#include #pragma comment(lib,"dbghelp.lib")
通過下面幾個函式就可以列舉pdb檔案資訊了

void enumfunc::enumfuncinformation()

symsetoptions(symopt_deferred_loads);

handle hprocess =getcurrentprocess();

syminitialize(hprocess,

0, false);

std::

string

strsymbolpath;

//#if _win64strsymbolpath = "

srv*d:\\study\\symbols_win7_x64*";

#else

strsymbolpath = "

srv*d:\\study\\symbols_winxp_x86*";

#endif

symsetsearchpath(hprocess, strsymbolpath.c_str());

//std::

string strsystempath = "

c:\\windows\\system32\\

"; //

這是驅動檔案路徑

strsystempath +=g_strpath;

handle hsystemfile = createfilea(strsystempath.c_str(), generic_read, file_share_read |file_share_write,

null, open_existing,

0, null);

dword dwfilesize = getfilesize(hsystemfile, null); //

獲得檔案大小

//傳入驅動檔案路徑,驅動基址,驅動大小,這裡也不知道**用了pdb檔案

dword64 dwbase =symloadmodule64(hprocess, null,strsystempath.c_str(), null,(dword64)g_baseaddress , dwfilesize);

//列舉所有的函式資訊,在**中顯示

symenumsymbols(hprocess, dwbase, 0, enumsymcallback, this

); symunloadmodule64(hprocess, dwbase);

symcleanup(hprocess);

}

bool callback  enumsymcallback(psymbol_info psyminfo, ulong symbolsize, pvoid usercontext)

下面是**

pdb檔案 小結

pdb檔案,是vs生成的用於除錯的符號檔案 program database 儲存著除錯的資訊。在vs的工程屬性,c c 除錯資訊格式,設定 zi,那麼vs就會在構建專案時建立pdb檔案。在這裡要區分兩種情況 1 構建靜態庫時,可以在工程屬性 c c 輸出檔案 程式資料庫名 設定生成的pdb檔名稱,...

pdb檔案 小結

pdb檔案,是vs生成的用於除錯的符號檔案 program database 儲存著除錯的資訊。在vs的工程屬性,c c 除錯資訊格式,設定 zi,那麼vs就會在構建專案時建立pdb檔案。在這裡要區分兩種情況 1 構建靜態庫時,可以在工程屬性 c c 輸出檔案 程式資料庫名 設定生成的pdb檔名稱,...

PDB檔案詳解

原文 pdb檔案 每個開發人員都必須知道的 一 什麼是pdb檔案 大部分的開發人員應該都知道pdb檔案是用來幫助軟體的除錯的。但是他究竟是如何工作的呢,我們可能並不熟悉。本文描述了pdb檔案的儲存和內容。同時還描 述了debugger如何找到binay相應的pdb檔案,以及debugger如何找到與...