各種編譯器有哪些泄露開發者隱私的"後門"?

比如VC下在程序的末端會有類似"E:...*.pdb"這樣泄露路徑的鏈接目錄

注意,後門打了引號


"E:...*.pdb" 這個不是「泄露」的「後門」,而是為了調試。

當你的程序崩潰,只有一個 .dmp 的轉儲,你如何查看當時的現場,分析崩潰原因?

當然是拿 WinDbg 或其它的什麼調試器打開這個 .dmp。

調試器怎麼去把崩潰現場和你的源碼匹配上?

正是靠這條 "E:...*.pdb" 的信息去找 PDB。

如果你確實不想要這個,在工程選項里關掉 PDB 的生成就是了,別把這個和「隱私」扯上關係。


來來來,此處有很多windows os官方後門可以下載:

Download Windows Symbol Packages


以下僅限vc++,如果算是隱私的話:

1、pdb路徑往往代表編譯這個程序時源代碼所在的大體位置。之所以是「大體」,是因為這隻標示出了pdb文件的路徑,而這是可以在編譯器中配置的。

ps:有人說release版就沒有pdb路徑,這是不正確的。pdb是否存在是由編譯器中是否配置了生成調試符號決定的。vc中默認的release配置不生成pdb文件,但是可以配置為生成,而且最好這麼做。

ps:pdb路徑有時候是完整路徑,有時候是單獨的文件名,這和編譯器有關。微軟的系統組件一般屬於後一種情況,其他的程序一般屬於前一種情況。

ps:為什麼要有pdb路徑存儲在程序中?其實是為了快速定位符號文件,尤其是在本機調試的時候,不需要額外配置符號搜索路徑,調試器也能很快找到符號的位置,因為程序中記錄了符號的全路徑。

2、pe文件中可以查到程序的編譯時間

3、pe文件中記錄了鏈接器的版本,這往往代表了開發者用得什麼版本的vs版本,6.0代表vc6,9.0代表vc2008等

4、pe中攜帶的資源包括圖片、對話框、菜單等可以看到一些信息

5、用文本編輯器打開pe文件,可以看到許多可讀的字元串,這是編程時程序中出現的常量字元串,調試信息啦、警告信息啦、訪問的文件路徑啦之類。如果是unicode版本的程序,可以用unicode方式打開查看。


推薦閱讀:

對於一個visual studio重度依賴者,有什麼推薦的代碼閱讀工具嗎?
用vs2015編寫c++調試為什麼顯示找不到指定文件?
visual studio 2017用來編譯c的話應該怎麼安裝?
VS 2015 update 1比VS 2013 update 5新增了哪些C++11/14特性?
為什麼Visual Studio 2015中代碼定義窗口完全失效了?

TAG:互聯網 | 計算機科學 | C | MicrosoftVisualStudio | 編譯原理 |