安全圈 | 专注于最新网络信息安全讯息新闻

首页

github

作者 gigliotti 时间 2020-02-26
all

此repo包含Microsoft有關PDB(程式資料庫)符號檔案格式的資訊。

[當前不會生成。在回購完成之前,存在一個cvdump.exe。pdb.h在langapi資料夾中]

這裡的目的是提供程式碼來顯示所有二進位級別的格式和可以使用pdb的簡單工具。

簡單地說…我們將盡最大努力在新的編譯器和工具中扮演這個角色,我們在每個版本中都會發佈這些新的編譯器和工具。我們將繼續創新和改變所有微軟平臺的二進位API和ABI,我們將努力通過保持PDB回購與剛剛發佈的最新零售產品(編譯器、連結器、調試器)同步,將社區包括進來。

通過發佈此原始程式碼,我們將傳遞我們提供的公開檔案化API,該API僅用於讀取PDB,即DIAhttps://msdn.microsoft.com/en-us/library/x93ctkx8.aspx

有了這些資訊,我們現在正在為其他編譯器(和工具)構建有效地編寫PDB的資訊。

PDB格式還沒有正式的檔案記錄,這給其他希望使用Windows或Visual Studio調試器的編譯器和工具集(如Clang/LLVM)帶來了挑戰。我們希望幫助開源編譯器進入Windows平臺。

此repo上的大多數內容顯示為來自VC++編譯器工具集的實際原始檔案。原始程式碼是最終的檔案:-)我們希望您會發現它有幫助。如果您發現您需要其他資訊才能成功完成您的項目,請輸入anIssue,讓我們知道您需要什麼資訊。

##從這裡開始檔案pdb.h(在langapi中為on)為mscorpdb.dll提供了API表面,我們將隨每個編譯器和工具集一起提供。

要點:

•Mscorpdb.dll是我們的連結器和編譯器用來創建PDB檔案的檔案。•Mscorpdb.dll實現“流”抽象。

另外,我們還提供了另一個檔案,該檔案應允許您確定是否正確生成了一個“空”PDB,該PDB包含允許其他工具打開並正確解析該“空”檔案的最小編碼。“Empty”實際上是指一個格式正確的檔案,其中的部分包含正確的資訊以訓示零記錄或符號是presentA工具,我認為我們還提供了該工具,可以很容易地驗證您的“Empty”PDB檔案是dia2dump.exe

總之,通過在pdb.h中使用外部定義的函數入口點,您可以調用mscorpdb.dll。

##什麼是PDB

pdb是包含多個信息流的檔案。您幾乎可以假設每個流都是一個單獨的檔案,只是將它們存儲為單獨的檔案是浪費和不方便的,囙此這種多流方法。但PDB流不是NTFS流。它們可以作為NTFS流來實現,但是由於它們也可以在Win9X上提供,所以它們使用自製的實現。該實現允許兩階段提交協定的原始形式。PDB檔案的編寫者可以在PDB中寫入他們想要的內容,但是在發出顯式提交之前不會提交。這允許用戶端有相當大的靈活性——例如,如果編譯器在用戶原始程式碼中遇到錯誤,它可以繼續編寫資訊,而不提交資訊。

每個流都用唯一的流號和可選名稱標識。簡而言之,PDB是這樣的-