**:
一、前言
這個方法是通過網上的一些方式自己學習列舉pdb檔案資訊。
二、**實現
首先列舉驅動檔案,這裡用psapi庫
#include "psapi.h
"#pragma comment(lib,"psapi.lib")
void cenumpdbdlg::enummodule()本來想看能不能列舉其他資訊,看psapi的匯出函式,沒有相關函式,那就只能通過驅動方式獲得了。;
//獲得基位址
if( enumdevicedrivers(drivers, sizeof(drivers), &cbneeded) && cbneeded < sizeof
(drivers))}}
}
然後通過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()本來想看能不能列舉其他資訊,看psapi的匯出函式,沒有相關函式,那就只能通過驅動方式獲得了。;
//獲得基位址
if( enumdevicedrivers(drivers, sizeof(drivers), &cbneeded) && cbneeded < sizeof
(drivers))}}
}
然後通過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如何找到與...