【揭祕VC CRT庫Intel模塊】-- 開篇

        在本博客開啓時,就有打算寫這塊的衝動,直到現在,直到今晚,突然一股勁讓我開了這個系列,寫下開篇。

        近段時間一直忙於工作,潛下心來做自己的研究也少了很多,每天下班回家都10點多了,很累。一般就洗洗睡覺了,遠遠比不得幾年前的精力和狀態了。看來我得好好調整一下時間,讓時間用在刀刃上。

        切入正題,本系列主要針對vc的crt庫中的intel版本asm源碼進行逐個剖析,前面已經有大概兩篇文章已經涉及到了這個系列的研究範圍。一篇是《深入C/C++之基於Cookie的安全檢查(VS2005)》,這篇裏面提到了secchk.c這個用於安全檢查的源文件。另一篇是《【動態分配棧內存】之alloca內幕》,裏面剖析了alloca16.asm和chkstk.asm這兩個源文件。因此,爲了進一步將這類crt源碼進行剖析,特地開設本系列博文,同時給自己一個對以往的研究進行總結的機會。

        本系列同樣在vs2008(vc9)環境下進行,我對比了一下各個版本vc下的crt,對於這個intel模塊下的源碼差異很小。在之後有碰到差異時,再進行詳細區分。這個intel模塊的目錄在vc安裝目錄下的:VC\crt\src\intel目錄裏。這個目錄裏有很多asm源碼,通過文件名,我想大家都能知道一些常見的函數。當然有一些相對陌生的函數,我們在之後再一步一步研究。另外,可以發現這個目錄下有4個xxx_lib的目錄,它們分別是:dll_lib、mt_lib、xdll_lib和xmt_lib。這幾個文件夾下面有很多.obj和一些lib文件,想必它們是不同版本的crt中間文件和lib。的確如此,相對於VC的工程屬性下“C/C++->常規->代碼生成->運行庫”的設置,dll_lib對應於多線程DLL (/MD),mt_lib對應於多線程(/MT),xdll_lib對應於多線程調試DLL (/MDd),xmt_lib對應於多線程調試(/MTd),不同的運行庫選擇,會鏈接不同的lib。這裏的4個文件夾裏面的obj分別被編譯到msvcrt.liblibcmt.libmsvcrtd.liblibcmtd.lib中(當然還有其他的lib,這裏不再累述)。這幾個lib位於VC安裝目錄下的VC\lib目錄裏。通過我們的編譯器設置而鏈接相應的靜態庫。如果你想試驗一下,你可以在選擇前面提到的4種運行庫之後,在鏈接器的輸入選項卡下,在忽略特定庫選項裏添上對應的lib庫名(如:選擇了/MD運行庫時,忽略msvcrt.lib),你會發現鏈接會失敗。

        在工作這麼些年的以來,發現很多擁有幾年甚至十多年經驗的cc++程序員,對於crt庫的相關設置都會有一絲懼怕,例如在設置了某些運行時庫後,在鏈接時碰到一些重定義,乃至一大篇的LNK2001錯誤時,就不知所措了。更有甚者,就害怕各種lib之間的鏈接,害怕dll之間的依賴。我個人認爲,VC給出的信息已經很多很清晰了,關鍵在於平時我們是否用心去觀察,用心去挖掘其中的原委。當你清楚了其中的關係時,當你知曉了crt的相關常見函數時,這些鏈接錯誤,重定義錯誤就顯得很明瞭了。有種運籌帷幄之中的感覺。不管是crt還是自己寫的動態庫靜態庫,都是大同小異的。

        對於上面提到的種種現象,我想,這也算是我寫這個系列的一個動力吧。很多時候,我們相信crt,相信其優秀,相信其性能。那麼相信的同時,作爲一個追根究底,樂於思考的程序員來說,我想,肯定會有去研究深入的衝動。我也算是這麼一個人吧。當然,你如果看到這裏,發現這樣做沒什麼必要,或者覺得這是在浪費時間,那我只能認爲是每個人的追求不一樣吧,當然這裏的追求沒有高低好壞對錯之分,只是路不同罷了。人活在這個世界上,恐怕連自己都很難說清楚自己到底是要追求什麼,可能是長久的,可能是短暫的,這一切都在於當前的認知是否適合做什麼。扯遠了,回到正題,只想說明一點,本系列的所有文章僅代表我個人觀點。

        最後,歸納一下本系列的相關環境和說明:

                環境:Microsoft Visual Studio 2008

                OS:Microsoft Windows 7

                申明:本系列隻立足於VS2008及windows平臺,無特殊說明,不涉及跨平臺。因此,對於crt的相關研究,例如性能、優化等在無特殊說明時,都只針對於windows平臺,microsoft編譯器。

        有激情肯追求的朋友,一起研究吧。對於大牛們,我只想說:“親,你完全可以略過,如果能提個意見留個腳印,我甚是感謝!” :)

        ****************如需轉載,請註明出處:http://blog.csdn.net/masefee,謝謝**********************

【揭祕VC CRT庫Intel模塊】目錄

【揭祕VC CRT庫Intel模塊】-- 開篇

【揭祕VC CRT庫Intel模塊】-- strlen

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章