程序員的自我修養:鏈接、裝載與庫

程序員的自我修養:鏈接、裝載與庫
定價:390
NT $ 390
 

內容簡介

本書主要介紹系統軟件的運行機制和原理,涉及在Windows和Linux兩個系統平台上,一個應用程序在編譯、鏈接和運行時刻所發生的各種事項,包括:代碼指令是如何保存的,庫文件如何與應用程序代碼靜態鏈接,應用程序如何被裝載到內存中並開始運行,動態鏈接如何實現,C/C++運行庫的工作原理,以及操作系統提供的系統服務是如何被調用的。每個技術專題都配備了大量圖、表和代碼實例,力求將復雜的機制以簡潔的形式表達出來。本書最后還提供了一個小巧且跨平台的C/C++運行庫MiniCRT,綜合展示了與運行庫相關的各種技術。

  本書對裝載、鏈接和庫進行了深入淺出的剖析,並且輔以大量的例子和圖表,可以作為計算機軟件專業和其他相關專業大學本科高年級學生深入學習系統軟件的參考書。同時,還可作為各行業從事軟件開發的工程師、研究人員以及其他對系統軟件實現機制和技術感興趣者的自學教材。
 

目錄

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

兩年前,我在浙江大學的一著名BBS的C++板塊上擔任版主,而俞甲子則是板上的資深版友(以及前版主)。那時候我對鏈接裝載、運行庫等內容比較感興趣,自己摸索着在博客上寫了一篇關於鏈接的入門文章,而這就是一切的開始.

我猜想俞甲子可能對寫這麼一本書早有想法,看到我的文章正好找到了同路人。他找到了我和潘愛民老師,我們 拍即合,就開始了這長達兩年的寫作歷程。考慮到當時俞甲子已經在鏈接部分有了相當的積累,因此我不得不放棄最有興趣的一部分轉而在運行環境上做文章。我把glibcfUmsvcrt的源代碼翻了個底朝天,了解到了許多平時不可能接觸到的內幕和技術細節。事實上,這基本是一個現學現賣的過程,我一邊學習着新的知識,一邊把新知識組織整理寫成文字。讀者在看某些章節的時候,會發現這些章節的講解過程就是一個源代碼的挖掘過程,這實際上也就是我的學習過程.學習研究他人的代碼是枯燥而耗時的,我很高興能夠做這樣一個先行者,將我的經驗寫進書里,讓讀者能夠避免重復勞動,直接獲得其中的經驗和關鍵技術。

本書所講的內容不是活躍在當今IT舞台上的高新技術,也不是雄踞計算機某個領域的王牌霸主,而是默默服務於所有計算機應用的掃地僧.也許閱讀本書不能夠直接在平時學習工作中的生產力上得到體現,但了解計算機的台前幕后會對讀者產生潛移默化的影響。當你的程序無法啟動的時候,你可能會在腦海里多設想一種可能性;當你的代碼鏈接失敗的時候,你可能會更快地意識到問題的所在;當你的程序發生非法操作的時候,你可能不至於面刈微軟的錯誤報告毫無頭緒。有人總愛用「時效性」評價當今的IT技術。仿佛一項技術的生存期就只伯兒年.我不能說這樣的想法是錯誤的,如今的技術的確在飛速地更替和發展.但是本書所講的技術,大多是成型在十年前,乃至二十年前,它們是整個計算機行業技術的根本,也幾乎是現在所有計算機應用的基礎。在當今的計算機技術發生根本性變革之前,這些技術還將繼續存在並保持活力.

我很榮幸能夠有機會和讀者分享這些技術,但寫作水平有限(我在語文課上歷來不是個好學生),最終在文字和結構上頗有缺憾,只能在這里說一聲抱歉。在這里要感謝我小學、初中和高中的語文老師,謝謝你們當初刈我的教導,盡管最終可能辜負了你們的希望。感謝潘老師、博文視點的編輯及所有支持我們的朋友們,謝謝你們的幫助。最后要感謝我的父母,沒有你們,我永遠不可能走到今天這一步。
網路書店 類別 折扣 價格
  1. 新書
    $390