程序員的自我修養(yǎng)

出版時間:2009-4  出版社:電子工業(yè)出版社  作者:俞甲子,石凡,潘愛民  頁數(shù):459  
Tag標簽:無  

前言

作者序1兩年前,甲子跟我提起,他在考慮寫一本講述計算機程序基本工作原理的書,由于代碼背后的許多細節(jié)現(xiàn)在難以找到完整而又實用的資料,因此,系統(tǒng)性地講述這些技術(shù)要素一定非常有意義。這是我非常感興趣的話題,因為最近幾年來,我每次給學生講課或作技術(shù)報告時,經(jīng)常會提到程序背后的一些細節(jié)知識,而當有人請我推薦一些參考資料時,我很難想得出有什么恰當?shù)膮⒖紩晒W習。我自己也曾想過要寫一點這方面的書,只是一直下不了決心做這件事情。甲子的提議讓我意識到,寫這樣一本書的機會來了。于是,我們認真規(guī)劃了書的選題。按我的建議,這應該是三卷本的書,每卷獨立,合起來成一體系。第一卷是基礎篇,介紹程序的基本運行過程,即是您現(xiàn)在看到的這本書。其他兩卷還需要時日和機緣。在過去兩年中,我曾經(jīng)以“Inside Windows Programs”為題在多所高校作過報告,旨在介紹Windows程序背后的一些支撐技術(shù)。對于正在學習計算機或軟件專業(yè)的學生,或者正在從事軟件開發(fā)的工程師們,我認為理解這些支撐技術(shù)是很有必要的。試想,即使一個簡單的“Hello World!”程序,也依賴于背后的輸入輸出庫(或流庫)及系統(tǒng)提供的模塊,這種依賴性已經(jīng)成為現(xiàn)代軟件在操作系統(tǒng)環(huán)境下運行的一個必要條件。然而,有關(guān)這些支撐技術(shù)的系統(tǒng)性資料卻少而又少,雖然Internet上并不缺乏任何一方面的細節(jié)信息,但是,能將程序的編譯和運行過程所涉及的各種技術(shù)全面地串連起來介紹的,卻尚未有先例。甲子曾經(jīng)在2006年夏天跟我實習過兩個月,他幫我搭建了一個在Windows已有體系結(jié)構(gòu)下將交換空間重定向到遠程機器物理內(nèi)存的原型系統(tǒng)。完成這一系統(tǒng)并非易事,而且甲子事前并無Windows內(nèi)核編程經(jīng)驗,但是,他憑借扎實的計算機系統(tǒng)軟件功底,成功地打通了從頁面錯誤(page fault)異常例程到遠程機器內(nèi)存管理器之間的數(shù)據(jù)通路。在這一段實習經(jīng)歷中,我不僅看到了他駕馭代碼和系統(tǒng)的能力,也感受到他做事認真負責的態(tài)度。因此,當他提出要寫一本介紹程序基礎的書時,我認為他是非常合適的人選??紤]到寫書的艱巨性,他推薦石凡同學加入進來,這才有了我們?nèi)齻€人的組合。我原先擔心寫作的進度,畢竟寫這樣一本書需要大量的時間投入。幸運的是,在甲子和石凡的不懈努力下,這本書終于面市了。本書講解的內(nèi)容,涉及在Windows和Linux兩個系統(tǒng)平臺上,一個應用程序在編譯、鏈接和運行時刻所發(fā)生的各種事項,包括:代碼指令是如何保存的,庫文件如何與應用程序代碼靜態(tài)鏈接,應用程序如何被裝載到內(nèi)存中并開始運行,動態(tài)鏈接如何實現(xiàn),C/C++運行庫如何工作,以及操作系統(tǒng)提供的系統(tǒng)服務是如何被調(diào)用的。每個技術(shù)專題都配備了大量圖示和代碼實例,力求將復雜的機制以簡潔的形式表達出來。本書最后還提供了一個小巧且跨平臺的C/C++運行庫MiniCRT,綜合展示了與運行庫相關(guān)的各種技術(shù)。關(guān)于寫作這本書的功勞,我不敢掠美。在創(chuàng)作之初,包括擬定提綱及甄選內(nèi)容方面,我跟甲子有過認真而細致的討論;在寫作過程中,我對甲子和石凡的初稿提出過一些建議,尤其在表述方面,同時我也協(xié)助他們與編輯進行了溝通和交流。對于正文的內(nèi)容,我并無實質(zhì)性的貢獻,但基于我對甲子和石凡兩位年輕人的了解,我相信他們自身的技術(shù)實踐功底,以及足夠的技術(shù)闡釋能力。我期待這本書能夠真正地提升程序員的自我修養(yǎng),讓程序員總是生活在“知其然,更知其所以然”的代碼曼妙中。最后,我要感謝這本書的四位編輯,他們是何艷、方舟、劉鐵鋒和陳元玉,謝謝他們?yōu)檫@本書付出的努力。還要感謝博文視點團隊的負責人周筠女士,謝謝她給予兩位年輕作者的扶持和關(guān)愛。潘愛民2009年2月于北京微軟七、作者序2兩年前,我在浙江大學的一著名BBS的C++板塊上擔任版主,而俞甲子則是板上的資深版友(以及前版主)。那時候我對鏈接裝載、運行庫等內(nèi)容比較感興趣,自己摸索著在博客上寫了一篇關(guān)于鏈接的入門文章,而這就是一切的開始。我猜想俞甲子可能對寫這么一本書早有想法,看到我的文章正好找到了同路人。他找到了我和潘愛民老師,我們一拍即合,就開始了這長達兩年的寫作歷程??紤]到當時俞甲子已經(jīng)在鏈接部分有了相當?shù)姆e累,因此我不得不放棄我最有興趣的一部分轉(zhuǎn)而在運行環(huán)境上做文章。我把glibc和msvcrt的源代碼翻了個底朝天,了解到了許多平時不可能接觸到的內(nèi)幕和技術(shù)細節(jié)。事實上,這基本是一個現(xiàn)學現(xiàn)賣的過程,我一邊學習著新的知識,一邊把新知識組織整理寫成文字。讀者在看某些章節(jié)的時候,會發(fā)現(xiàn)這些章節(jié)的講解過程就是一個源代碼的挖掘過程,這實際上也就是我的學習過程。學習研究他人的代碼是枯燥而耗時的,我很高興能夠做這樣一個先行者,將我的經(jīng)驗寫進書里,讓讀者能夠避免重復勞動,直接獲得其中的經(jīng)驗和關(guān)鍵技術(shù)。本書所講的內(nèi)容不是活躍在當今IT舞臺上的高新技術(shù),也不是雄踞計算機某個領(lǐng)域的王牌霸主,而是默默服務于所有計算機應用的掃地僧。也許閱讀本書不能夠直接在平時學習工作中的生產(chǎn)力上得到體現(xiàn),但了解計算機的臺前幕后會對讀者產(chǎn)生潛移默化的影響。當你的程序無法啟動的時候,你可能會在腦海里多設想一種可能性;當你的代碼鏈接失敗的時候,你可能會更快地意識到問題的所在;當你的程序發(fā)生非法操作的時候,你可能不至于面對微軟的錯誤報告毫無頭緒。有人總愛用“時效性”評價當今的IT技術(shù)。仿佛一項技術(shù)的生存期就只有幾年。我不能說這樣的想法是錯誤的,如今的技術(shù)的確在飛速地更替和發(fā)展。但是本書所講的技術(shù),大多是成型在十年前,乃至二十年前,它們是整個計算機行業(yè)技術(shù)的根本,也幾乎是現(xiàn)在所有計算機應用的基礎。在當今的計算機技術(shù)發(fā)生根本性變革之前,這些技術(shù)還將繼續(xù)存在并保持活力。我很榮幸能夠有機會和讀者分享這些技術(shù),但寫作水平有限(我在語文課上歷來不是個好學生),最終在文字和結(jié)構(gòu)上頗有缺憾,只能在這里說一聲抱歉。在這里要感謝我小學、初中和高中的語文老師,謝謝你們當初對我的教導,盡管最終可能辜負了你們的希望。感謝潘老師、博文視點的編輯及所有支持我們的朋友們,謝謝你們對我們的幫助。最后要感謝我的父母,沒有你們,我永遠不可能走到今天這一步。石凡2009年2月于杭州八、作者序3CPU體系結(jié)構(gòu)、匯編、C語言(包括C++)和操作系統(tǒng),永遠都是編程大師們的護身法寶,就如同少林寺的《易筋經(jīng)》,是最為上乘的武功;學會了《易筋經(jīng)》,你將無所不能,任你創(chuàng)造武功;學會了編程“易筋經(jīng)”,大師們可以任意開發(fā)操作系統(tǒng)、編譯器,甚至是開發(fā)一種新的程序設計語言!——佚名念書的時候,作為標準的愛好技術(shù)的宅男,每天掃一遍各大高校BBS的技術(shù)版面,基本好比一日三餐一樣平常。我對計算機技術(shù)方面的口味很雜,從匯編版到C++到Linux內(nèi)核開發(fā)、Linux應用開發(fā)、游戲開發(fā)、網(wǎng)絡、編程語言、體系結(jié)構(gòu)、移動開發(fā)、開源閉源我都會參上一腳。我始終認為技術(shù)優(yōu)劣取決于需求,與很多持有“編程語言血統(tǒng)論”的程序開發(fā)者不同,我不認為C++或Java本身有什么直接可比性,或者OOP與函數(shù)式編程誰優(yōu)誰劣,我始終堅持認為作為開發(fā)者,MOP(Market/Money Oriented Programming)才是唯一不變的編程范式。于是我往往不參與那些技術(shù)、平臺、語言教派之間的宗教戰(zhàn)爭,這種論戰(zhàn)基本上每周都會有,我很佩服論戰(zhàn)各方見多識廣、旁征博引、高屋建瓴的論斷,但我往往只是灌灌水調(diào)節(jié)一下思緒。相反,我很關(guān)注一些與語言、平臺等相對獨立的基本的系統(tǒng)概念方面的問題,這些問題比較具體,也比較實用,比如:為什么程序是從main開始執(zhí)行?“malloc分配的空間是連續(xù)的嗎?”“PE/ELF文件里面存的是什么?”“我想寫一個不需要操作系統(tǒng)可以直接在硬件上跑的程序該怎么做?”“目標文件是什么?鏈接又是什么?”“為什么這段程序鏈接時報錯?”“句柄到底是什么東西?”這些問題看似很簡單但實際上有很多值得深入挖掘的地方,比如第一個問題圍繞著main函數(shù)執(zhí)行前后可以延伸出一大堆問題:程序入口、運行庫初始化、全局/靜態(tài)對象構(gòu)造析構(gòu)、靜態(tài)和動態(tài)鏈接時程序的初始化和裝載等。我們把這些問題歸結(jié)起來,發(fā)現(xiàn)主要是三個很大的而且連貫的主題,那就是“鏈接、裝載和庫”。事實上,現(xiàn)在市面上和網(wǎng)絡上能找到的計算機技術(shù)方面的書籍和資料中,什么都很齊全,唯獨關(guān)于這三個主題的討論十分稀缺,即使能找到一些也是猶如殘缺的典籍,不僅不完整而且很多已經(jīng)過時了。關(guān)于現(xiàn)在通用的Windows和Linux平臺的鏈接、裝載及PE/ELF文件的詳細分析,實在很少見。這個領(lǐng)域中,最為完整、也最為權(quán)威的莫過于John R. Levine的《Linkers & Loaders》,這本書我也前前后后通讀了好幾遍,雖然它對鏈接和裝載方面的描述較為完整,但是過于理論化,對于實際的系統(tǒng)機制描述則過于簡略。我始終認為對于一個問題比較好的描述方式,是由一個很小很簡單的問題或示例入手,層層剝開深入挖掘,不僅探究每個機制“怎么做”,而且要理解它們“為什么這樣做”,力求深入淺出、圖文并茂,盡力把每一步細節(jié)都呈現(xiàn)給讀者。這是我一貫的想法,也是我們在本書中努力試圖達到的效果。第一次有想寫這樣一本書的念頭是在2006年底,當時我正在念研一,想起未來還有一年多漫長而又相對空閑的研究生生涯,覺得寫一本這樣的書大概是比較好的“消遣活動”。于是我第一時間想到了在微軟研究院實習時的導師潘愛民老師,潘老師在寫作技術(shù)書籍方面有很深的功底和豐富的經(jīng)驗。我把想法告訴潘老師以后,他十分支持,于是我又找到了當時剛好保送研究生、時間上也相對充裕的石凡,我們?nèi)齻€都對這個選題十分感興趣,可謂一拍即合。當時也沒多想,以為寫書大概也就跟BBS發(fā)帖連載差不多吧。一旦寫起來才發(fā)現(xiàn)自己完全輕視了寫書的工作量。書中的每一個章節(jié)、每一個小段、每一個例子甚至每一個用詞有時候都要斟酌很久,生怕用得不恰當誤導了讀者?!罢`人子弟”這四個字罪名可不輕,大有推出午門斬首五遍以儆效尤之過。寫書的時間的確很倉促,雖然我們都是在讀研時寫的,按理說相對于已經(jīng)工作的作者來講,已經(jīng)是有很多閑余的時間了,但還是經(jīng)常手忙腳亂。想到以前看書看到作者寫的序里,經(jīng)常使用“時間倉促,水平有限”的話,推想作者不過是出于謙虛不免要客套一下?,F(xiàn)在輪到自己寫序了,終于感覺到了這八個字的分量。即使到現(xiàn)在已近完稿,我們還是心里十分忐忑,因為還有不少地方的確寫得不夠完善。也聽到了很多第一批讀者的反饋意見,很多建議都正中這本書的軟肋,我們也根據(jù)大家的意見又一次進行了修改,這已經(jīng)是反反復復的第N次修訂了。這本書前前后后花了兩年多的時間一直沒有完稿,由于截稿時間快到了,我們才終于定稿,因為實在沒有辦法做到完美,只能向無限接近完美努力。最后,我們在“著”和“編著”之間猶豫了很久,想到本書凝聚了我們很多的心血,還是誠惶誠恐地寫上了“著”字,權(quán)當給自己壯膽了。我們也相信,本書雖然沒做到完美,但是它一定會給你帶來一些你以前想看、想了解而又找不到的東西?;蛘咭郧霸诰幊踢^程中困惑了你很久,但始終沒有找到解釋的問題,當在本書中終于找到答案且大呼“原來如此!”時,我們也就很欣慰了!關(guān)于本書的書名筆者們也討論了很久,征詢過很多意見,最終還是決定用“程序員的自我修養(yǎng)”作為書名,將“鏈接、裝載與庫”作為副標題。書名源自于俄羅斯的演員斯坦尼斯拉夫斯基創(chuàng)作的《演員的自我修養(yǎng)》,作者為了寫這本書前前后后修改了三十年之久,臨終前才同意不再修改,拿去出版。使用這個書名一方面是本書的內(nèi)容的確不是介紹一門新的編程語言或展示一些實用的編程技術(shù),而是介紹程序運行背后的機制和由來,可以看作是程序員的一種“修養(yǎng)”;另一方面是向斯坦尼斯拉夫斯基致敬,向他對作品精益求精的精神致敬。在本書的創(chuàng)作過程中,很多人對我們的支持和幫助難以言表。這里我要感謝博文視點的幾位編輯何艷、方舟、劉鐵鋒和陳元玉等,他們?yōu)楸緯冻隽撕芏嘈难?;特別要感謝博文視點的周筠老師,這本書能夠面世離不開她的支持和努力。另外也要感謝浙江大學的張曉龍博士,他為本書提出了很多建議,并且貢獻了“DLL HELL”一節(jié)。俞甲子2009年2月于杭州

內(nèi)容概要

本書主要介紹系統(tǒng)軟件的運行機制和原理,涉及在Windows和Linux兩個系統(tǒng)平臺上,一個應用程序在編譯、鏈接和運行時刻所發(fā)生的各種事項,包括:代碼指令是如何保存的,庫文件如何與應用程序代碼靜態(tài)鏈接,應用程序如何被裝載到內(nèi)存中并開始運行,動態(tài)鏈接如何實現(xiàn),C/C++運行庫的工作原理,以及操作系統(tǒng)提供的系統(tǒng)服務是如何被調(diào)用的。每個技術(shù)專題都配備了大量圖、表和代碼實例,力求將復雜的機制以簡潔的形式表達出來。本書最后還提供了一個小巧且跨平臺的C/C++運行庫MiniCRT,綜合展示了與運行庫相關(guān)的各種技術(shù)?! ”緯鴮ρb載、鏈接和庫進行了深入淺出的剖析,并且輔以大量的例子和圖表,可以作為計算機軟件專業(yè)和其他相關(guān)專業(yè)大學本科高年級學生深入學習系統(tǒng)軟件的參考書。同時,還可作為各行業(yè)從事軟件開發(fā)的工程師、研究人員以及其他對系統(tǒng)軟件實現(xiàn)機制和技術(shù)感興趣者的自學教材。

書籍目錄

第1部分 簡介   第1章 溫故而知新   1.1 從HELLO WORLD 說起    1.2 萬變不離其宗   1.3 站得高,望得遠     1.4 操作系統(tǒng)做什么   1.5 內(nèi)存不夠怎么辦   1.6 眾人拾柴火焰高   1.7 本章小結(jié) 第2部分 靜態(tài)鏈接  第2章 編譯和鏈接   2.1 被隱藏了的過程   2.2 編譯器做了什么   2.3 鏈接器年齡比編譯器長   2.4 模塊拼裝——靜態(tài)鏈接   2.5 本章小結(jié)  第3章 目標文件里有什么    3.1 目標文件的格式   3.2 目標文件是什么樣的   3.3 挖掘SIMPLESECTION.O    3.4 ELF 文件結(jié)構(gòu)描述  3.5 鏈接的接口——符號    3.6 調(diào)試信息   3.7 本章小結(jié)  第4章 靜態(tài)鏈接    4.1 空間與地址分配   4.2 符號解析與重定位   4.3 COMMON 塊   4.4 C++相關(guān)問題    4.5 靜態(tài)庫鏈接   4.6 鏈接過程控制   4.7 BFD 庫   4.8 本章小結(jié)  第5章 WINDOWS PE/COFF    5.1 WINDOWS 的二進制文件格式PE/COFF  134   5.2 PE 的前身——COFF    5.3 鏈接指示信息    5.4 調(diào)試信息    5.5 大家都有符號表    5.6 WINDOWS 下的ELF——PE    5.7 本章小結(jié)  第3部分 裝載與動態(tài)鏈接   第6章 可執(zhí)行文件的裝載與進程    6.1 進程虛擬地址空間    6.2 裝載的方式    6.3 從操作系統(tǒng)角度看可執(zhí)行文件的裝載    6.4 進程虛存空間分布    6.5 LINUX 內(nèi)核裝載ELF 過程簡介    6.6 WINDOWS PE 的裝載    6.7 本章小結(jié)   第7章 動態(tài)鏈接    7.1 為什么要動態(tài)鏈接    7.2 簡單的動態(tài)鏈接例子    7.3 地址無關(guān)代碼    7.4 延遲綁定(PLT)    7.5 動態(tài)鏈接相關(guān)結(jié)構(gòu)    7.6 動態(tài)鏈接的步驟和實現(xiàn)    7.7 顯式運行時鏈接    7.8 本章小結(jié)   第8章 LINUX 共享庫的組織   8.1 共享庫版本    8.2 符號版本    8.3 共享庫系統(tǒng)路徑    8.4 共享庫查找過程    8.5 環(huán)境變量    8.6 共享庫的創(chuàng)建和安裝    8.7 本章小結(jié)   第9章 WINDOWS 下的動態(tài)鏈接   9.1 DLL 簡介    9.2 符號導出導入表    9.3 DLL 優(yōu)化    9.4 C++與動態(tài)鏈接    9.5 DLL HELL    9.6 本章小結(jié)  第4部分 庫與運行庫   第10章 內(nèi)存    10.1 程序的內(nèi)存布局    10.2 棧與調(diào)用慣例    10.3 堆與內(nèi)存管理    10.4 本章小結(jié)  第11章 運行庫    11.1 入口函數(shù)和程序初始化   11.2 C/C++運行庫    11.3 運行庫與多線程    11.4 C++全局構(gòu)造與析構(gòu)    11.5 FREAD 實現(xiàn)    11.6 本章小結(jié)   第12章 系統(tǒng)調(diào)用與API  12.1 系統(tǒng)調(diào)用介紹    12.2 系統(tǒng)調(diào)用原理    12.3 WINDOWS API    12.4 本章小結(jié)  第13章 運行庫實現(xiàn)    13.1 C 語言運行庫    13.2 如何使用MINI CRT    13.3 C++運行庫實現(xiàn)    13.4 如何使用MINI CRT++    13.5 本章小結(jié)  附錄A   A.1 字節(jié)序(BYTE ORDER)   A.2 ELF 常見段   A.3 常用開發(fā)工具命令行參考  索引

章節(jié)摘錄

第1部分 簡介   第1章 溫故而知新   1.2 萬變不離其宗計算機是個非常廣泛的概念,大到占用數(shù)層樓的用于科學計算的超級計算機,小到手機上的嵌入式芯片都可以被稱為計算機。雖然它們的外形、結(jié)構(gòu)和性能都千差萬別,但至少它們都有“計算”這個概念。在本書里面,我們將計算機的范圍限定在最為流行、使用最廣泛的PC機,更具體地講是采用兼容x86指令集的32位CPU的個人計算機。原因很簡單:因為筆者手上目前只有這種類型的計算機可供操作和實驗,不過相信90%以上的讀者也是,所以在這一點上我們很快能達成共識。其實選擇具體哪種平臺并不是最關(guān)鍵的,雖然各種平臺的軟硬件差別很多,但是本質(zhì)上它們的基本概念和工作原理都是一樣的,只要我們能夠掌握一種平臺上的技術(shù),那么其他的平臺都是大同小異的,很輕松地可以舉一反三。所以我們相信,只有你能夠深刻地理解x86平臺下的系統(tǒng)軟件背后的機理,當有一天你需要在MIPS指令集的嵌入式平臺上做開發(fā),或者需要為64位的Windows或tinux開發(fā)應用程序的時候,你很快就能找到它們之間的相通之處。撇開計算機硬件中紛繁復雜的各種設備、芯片及外圍接口等,站在軟件開發(fā)者的角度看,我們只須抓住硬件的幾個關(guān)鍵部件。對于系統(tǒng)程序開發(fā)者來說,計算機多如牛毛的硬件設備中,有三個部件最為關(guān)鍵,它們分別是中央處理器CPU、內(nèi)存和I/O控制芯片,這三個部件幾乎就是計算機的核心了;對于普通應用程序開發(fā)者來說,他們似乎除了要關(guān)心CPU以外,其他的硬件細節(jié)基本不用關(guān)心,對于一些高級平臺的開發(fā)者來說(如Java、.NET或腳本語言開發(fā)者),連CPU都不需要關(guān)心,因為這些平臺為它們提供了一個通用的抽象的計算機,他們只要關(guān)心這個象的計算機就可以了?!  ?/pre>

媒體關(guān)注與評論

這是一本深人闡述鏈接、裝載和庫等問題的優(yōu)秀圖書,讀來讓人愉悅,你從巾可以清晰地了解程序的前世今生,徹底理解敲人的代碼如何變成程序任系統(tǒng)中運行。通讀本書不管對于開發(fā)還是trouble shootin9都會很有幫助。建議每一位希望從事系統(tǒng)開發(fā)、或希望更實務地理解操作系統(tǒng)和編譯器、或不滿足于只寫代碼的優(yōu)秀程序員都擁有這樣一本書。         ——鄒飛,趨勢科技(中國)研發(fā)中心資深軟件要程師本書從大處著眼,小處著手,以通俗易懂的語言,深入淺出地對系統(tǒng)軟件的底層形成機制進行條分縷析,正合藥山禪師所謂“高高山頂立,深深海底行”。循著作者的思緒一路走來,有如醍醐灌頂。暢快淋漓。非常高興有預覽此書初稿的寶貴機會,我在瀏覽書稿和查核相關(guān)資料的過程中,學到了很多以前未知或知之不深的內(nèi)容?!         T亮,阿里巴巴(中國)網(wǎng)絡技術(shù)有限公司運維部系統(tǒng)架構(gòu)師

編輯推薦

《程序員的自我修養(yǎng):鏈接、裝載與庫》深入淺出地對系統(tǒng)軟件的底層形成機制進行條分縷析真正提升程序員的自我修養(yǎng)

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    程序員的自我修養(yǎng) PDF格式下載


用戶評論 (總計162條)

 
 

  •   這本書寫得非常好。現(xiàn)在編程IDE的發(fā)展已經(jīng)屏蔽了程序之所以為可執(zhí)行文件的過程:編譯、鏈接、裝載。它分析了Unix/Linux和Windows下的不同之處,比如說so和dll的不同。我覺得難能可貴的是,它在書的最后幾章重點討論了運行庫、系統(tǒng)調(diào)用、包裝API等在Unix/Linux下和在Windows下的原理和原理的不同之處。最后一章還演示了一個自己實現(xiàn)的Mini CRT 示例,看了以后覺得作者功底確實很深厚,不得不推薦一下這本書。

    另外,三位作者的語言使用很得當,解釋枯燥的原理時經(jīng)常會有幽默性的語句出現(xiàn),插圖比喻也顯得很生活化。從這點來看,我能在一個星期內(nèi)讀完這本書,幾位作者對文字的駕馭也起到了很大的作用。

    讀完后關(guān)閉書卷,作者們?yōu)槲移饰龅牟僮飨到y(tǒng)、運行庫、鏈接、裝載、運行庫 等一系列概念如一副副立體畫一樣,展現(xiàn)在眼前。雖然在大學的時候計算機類教材很枯燥,幸虧工作后能遇到這種好書,為我等程序員們歸納知識提供了很大的便利。<程序員的自我修養(yǎng)>這個標題名至實歸。
  •   書本身解釋的還是不錯的,同時買了《操作系統(tǒng):精髓與設計原理》和《程序員的自我修養(yǎng)—鏈接、裝載與庫》兩本都不錯,個人感覺后一本更好一些。
  •   以最快的速度看完了這本書,對動態(tài)庫的裝載鏈接原理有了更深的認識,尤其是對在工作中碰到的相關(guān)問題處理起來更加得心應手。
  •   將鏈接編譯,運行庫,可執(zhí)行文件等基礎講的很清楚,真不錯。
  •   C到底怎么運行、操作系統(tǒng)如何裝載,這本書是從操作系統(tǒng)的角度剖析一段代碼如何運行,屬于硬基本功,當然啃起來很吃力,但是心里很滿足
  •   是一本學習鏈接、裝載和庫的好書。值得珍藏
  •   鏈接、裝載與庫——正是自己想要的,希望看完能有所收獲
  •   這本書讓我了解了在編譯、鏈接過程中是怎樣執(zhí)行的,這對于想深入研究嵌入式是很有幫助的,還有書中后面關(guān)于庫的一些我還沒有去了解,相信會和前半部分一樣會有更加深刻的理解的。
  •   一個程序從代碼一直到運行這個過程是怎樣的?這本書里面有很多我想知道的答案,而且深入程度適中,我覺得這本書適合大部分想了解不多不少底層運作知識的程序員。
  •   對于編譯,鏈接和加載,之前只是一知半解,看了這本書全明白了,由于其中對于動態(tài)庫&amp;amp;ldquo;全局符號介入&amp;amp;rdquo;的問題,項目上需要注意??!
  •   從操作系統(tǒng)和編譯鏈接角度讓開發(fā)人員更理解自己所寫的代碼會發(fā)生哪些變化,如何維護和編寫更高效的代碼,絕對是本好書,但不適合初學者。
  •   作者深入剖析了程序的裝載與鏈接的過程,很有啟發(fā)意義
  •   這本書對鏈接、庫介紹說明的比較詳細,我是初學者,某些地方看起來還是有點暈,不過通過學習還是可以理解的
  •   一本深入學習鏈接庫的好書
  •   工作幾年了卻一直是在做應用層系統(tǒng)。每當遇到一些底層的問題時,總是不得其法。說不懂,其實也了解一些,但也說不出所以然。這本書我還沒有讀完,目前的理解是:它是一本關(guān)于程序“本質(zhì)”的書——程序從我們寫的高級語言代碼,到底層的機器碼,中間的過程是如何進行的。讀完之后相信我會對這個過程有個更系統(tǒng)更深入的理解。當然它不一定適合所有的人。想我這樣對于系統(tǒng)底層理解不夠深刻的菜鳥,需要結(jié)合看一些操作系統(tǒng)的書,并反復學習。總之學無止境啊。
  •   操作系統(tǒng)底層的一些東東,對了解軟件運行很有幫助
  •   個人覺得真正的程序員是應該對底層底層的東西有必要的了解的,正所謂本書所強調(diào)的程序員的自我修養(yǎng)。若想了解程序的是怎么加載運行的,那么這本書是你所需要的!強烈推薦!
  •   這本書關(guān)于程序從編寫到運行的機制
  •   書很好,內(nèi)容很不錯,不過一直沒有時間看完,在看的過程中,補了很計算機基礎的東西,想深入學習下程序運行的原理的同學可以讀一下,收獲挺大的
  •   學習編程的人看了會有很大的幫助。能理解程序運行的內(nèi)層原理。
  •   從代碼到16進制數(shù),很棒的書~優(yōu)秀的程序員必須了解自己程序的每個字符~這就是自我修養(yǎng)
  •   把編譯和運行這個階段的事情,闡述的很清楚,對提高對系統(tǒng)的理解、排錯能力很有好處。
  •   很少又講連接正在與庫的書,經(jīng)典
  •   嘿嘿,拿到手中迫不及待的讀完了,受益匪淺,原來對連接、庫等很模糊的概念,讀完書后清晰了,強烈推薦給大家
  •   國內(nèi)經(jīng)典的計算機書籍不多,這本可謂是很有深度,尤其是對于那些喜歡鉆研,喜歡了解底層的家伙來說,我閱讀這本書已經(jīng)是第二遍了,從電子書,到從圖書館借來的書,再到自己去買。每次讀都有新的收獲,尤其是邊看代碼,邊讀書。
  •   深入淺出,對鏈接、加載有較清晰的講解
  •   可以讓讀者了解代碼如何轉(zhuǎn)換成可執(zhí)行程序的一本好書,易懂,目前看了一半,值得推薦
  •   之前看了別人寫的鏈接腳本不懂,所以買來看看,看了再評書的好壞。。。
  •   對鏈接等原理講述得比較詳細。
  •   1,很喜歡
    2,原因是這本書就像是一把鑰匙,打開了一扇正確的門,對于任何想深入了解系統(tǒng)方面知識的程序員,這本書絕對是入門的好書
    3,作者得寫作態(tài)度非常端正,尊重讀者的作者同樣會獲得讀者的尊重
  •   我的數(shù)據(jù)庫老師在課上曾經(jīng)推薦過這本書,這本書的作者我也認識,現(xiàn)在作者已經(jīng)開了公司,干得還不錯。最近重讀這本書,感覺作者對連接這部分講解的不錯,但是裝載處理的不是很好,可能和這部分細節(jié)不多吧
  •   這本書很不錯。是我目前見過的關(guān)于C編程的比較出色的一本,對程序的實現(xiàn)有了很好的講解,有助于對編程的理解。
  •   寫得非常不錯,的確是一本國內(nèi)不多見的優(yōu)秀原創(chuàng)書。大家都抄來抄去,能有這么一本好書不容易,我們要愛護。我一口氣讀了100多頁,是位年輕的作者。盡管他打著潘愛民的旗號,但是作者的探索精神,“打破砂鍋紋(問)到底”的精神,都超過了潘愛民。該書適合各路人士(新手和老手)。非常希望作者能對這本書的文字和布局再仔細錘煉一下,不要趕時髦,僅保留重要的內(nèi)容,以書名闡述的“修養(yǎng)”的嚴謹態(tài)度,剃除原文中那些“博克”習氣的文字,文字再精煉些,修正一些編輯性錯誤。還有,補充書中各種論點的參考文獻和閱讀書目,提高可信行。那樣,我覺得每位學習計算機專業(yè)的人都該在案頭備這么一本書,這本書有望成長為一本該領(lǐng)域的圣經(jīng)。各位,先睹為快!
  •   這本書不會讓你的編程水平突飛猛進, 但是對底層數(shù)據(jù)模型更加了解的人會對代碼更加有發(fā)言權(quán)
  •   對想了解一些底層技術(shù)和原理實現(xiàn)的很有幫助,寫的也很清晰,易讀,讀后收獲不小,雖然我的電子版的,但還是買一本
  •   難得看到的國人寫的一本計算機的好參考書。這本書雖然內(nèi)容不多,一兩天可以看完,但是讓我感覺把很多知識都復習了一遍,頗有神清氣爽的感覺~

    一個小細節(jié)是書里的示意圖繪圖質(zhì)量都很高,這種細節(jié)上認真的態(tài)度我感覺很難得——好吧,我只是個普通讀者,不是特別的什么粉或者什么黑什么的——前段時間看了《C語言深度解剖--解開程序員面試筆試的秘密》,覺得水平和態(tài)度都比這本書差不少=,=
  •   這本書太贊了!?。? 內(nèi)容非常 具體深入 是學習程序開發(fā)的人 值得推薦的
  •   內(nèi)容很豐富,是程序員提高自身編程素質(zhì)的一劑良藥,很實用,力薦?。?!
  •   書籍以linux講解為主,windows平臺為鋪。總體不錯。
  •   這本書真的很好,解釋了我所有的疑惑(--夸張了?)云風推薦的我覺得很值
  •   這本書是一個程序員真正需要的東西。不要等到用到的時候再去看
  •   作為程序員以及IT技術(shù)人員確實應該好好讀一讀
  •   系統(tǒng)的梳理了整個編譯過程,把以前零散的知識點串了起來
  •   很棒,很精彩,即使不需要精通,了解一下也還是必要到的,適合所有沒有系統(tǒng)了解過這方面的人
  •   作者對系統(tǒng)下層很熟,我學到了不少東西。很少能看到這樣的好書。
  •   推薦程序員閱讀,提高自身修養(yǎng)
  •   這是本非常不錯的書,看了之后就不會問編譯之類的問題了,對程序的執(zhí)行過程講的非常好,使編程知其然,也知知其所以然
  •   對于想了解底層一點的東西而基礎又不是很好的人非常適合。力薦!
  •   作為一個程序員有必要了解一下。
  •   講的原理很多,還有實例。
  •   看過電子檔,感覺太好了,就買下了,很同學一起買了兩本。學嵌入式的,尤其是基于linux的,特別有用。
  •   程序員非常經(jīng)典的一本書,不可不讀。程序員以后發(fā)展非常有好處。
  •   很好的一本書,很適合程序員讀
  •   本書的講解很詳細,又很精練,信息收集得很全面,解惑相當?shù)轿?。推薦購買,尤其是想了解內(nèi)部原理的編程者?,F(xiàn)在還只看了前面的幾章,就感覺非常不錯。
  •   看了電子版的,再看實物,比想象中厚很多啊,很給力
  •   涉及到了我們學習中的不少困惑之處,很多教科書都不展開闡述的一些內(nèi)容,被作者寫的很生動,便于理解。讀起來一氣呵成??上Ш蟀氩糠值奈墓P差了一大截,讀起來有點拗口,并且思維跳躍性太大。估計是兩個作者的緣故吧。
  •   知識點深入剖析,令人豁然開朗~
  •   程序員練級精品。提高內(nèi)功好幫手。
  •   好書自然要推薦,程序員必看。
  •   書的質(zhì)量還是很好的,內(nèi)容還沒怎么看。但是拿在手上沉甸甸的。印刷質(zhì)量很好,對于C++程序員的一些底層的困惑,解釋的很清楚。期待后續(xù)版
  •   書保證是正品這是堅持一直在當當買書的原因,這本書是同事讓幫忙買的,具體內(nèi)容還沒看,先給個物流和當當?shù)姆战o個好評先
  •   這本書看了好久了,價格有點高,不錯內(nèi)容很不錯,最后狠心自己買了,以后要認真看。
  •   擴充知識面,提高自身修養(yǎng)
  •   修養(yǎng)之途,歷練!
  •   這本書真的很不錯,之前是在圖書館看到的,稍微瀏覽了一下,書講的很通俗,但是很深入
  •   書非常好 ,公司工程師看的。
  •   好書,值得深入研究。
  •   絕對的經(jīng)典啊,了解編譯pe文件等的不二選擇
  •   借別人的看過一遍,感覺不錯,就自己買一本,雙十一,第二天就到了,物流還是很給力的
  •   我認識這本書的主要作者,
    正如作者的性格一樣,這本書有扎實的功底、清晰的思路、睿智又不失風趣
    拜讀此書,受益匪淺。
  •   自我修煉的好書
  •   已買待看再待分享
  •   剛買到書,還沒來得及看。稍后再上評論
  •   很底層的一本書,前輩們推薦,細細品嘗中……
  •   對書中的很多細節(jié)還是不理解,學習了編程好幾年,從來沒想過底層的方面~~
  •   想買這本書已經(jīng)很久了,今天終于到了,雖然到的有點晚,催了幾次,但書確實是好書。
  •   這本書非常好!可以幫助很好理解底層方面的知識!
  •   之前找別人結(jié)果這本書看,覺得相當不錯,所以自己也買一本啊
  •   很不錯的一本書,需要慢慢看
  •   如果你想了解底層,那么非常建議您看這本書
  •   很不錯的一本書,買過了,等著看
  •   非常不錯的一本書,還沒看,不過已經(jīng)是經(jīng)典了。
  •   很好的一本書,值得慢慢品味!
  •   是本好書,目前國內(nèi)書市上也就這本書可以了
  •   看到這本書居然是本科生寫的,確實有點震驚,不過書確實寫的不錯
  •   以前陸陸續(xù)續(xù)看了很多書,這本書能將看過的聯(lián)系到一起來
    作者很清楚初學者所缺乏的知識點,比較推薦功底還不是很深的人細看,如果搭配其他的書就更牛了
  •   這本書在網(wǎng)上初看了一下,挺好的,值得珍藏!
  •   發(fā)貨挺快,物流也挺好的。書是朋友推薦的,很好的一本書~
  •   對于日常編程可能沒注意或來不及思考的問題,這本書可能會讓你思考得更遠。
  •   當我拿起這本書的時候,有一種莫名的激動
  •   這本書不錯,講得比較低層
  •   沒想到是學生寫的。。真的不容易。。非常的好。。。鼓勵鼓勵。。
  •   非常好看的書,研究底層知識的人值得一看。
  •   感覺很不錯,值得學習參悟
  •   非常基礎的書,從底層學習
  •   國人寫的書,很少有我覺得不錯的!這書確實不錯,值得學習和推薦!!
  •   書內(nèi)容很新,書很好,適合想學習的
  •   書很好,得好好看
  •   書沒得說,經(jīng)典好書,包裝要是好點就好了
  •   老師推薦,買了看看,感覺不錯,不過一直沒看完
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7