Linux GNU C 程式觀察

Linux GNU C 程式觀察

《Linux GNU C 程式觀察》是清華大學出版社2020年出版的圖書,作者是羅秋明。

基本介紹

  • 中文名:Linux GNU C 程式觀察
  • 作者:羅秋明
  • 出版時間:2020年
  • 出版社:清華大學出版社
內容簡介,作品目錄,

內容簡介

本書所討論的內容是“C語言程式設計”類課程的後續知識,涉及C程式在Linux環境下經過GCC編譯/連結生成執行檔以及在系統中運行的問題。本書能使讀者在面對C程式的工程實踐問題時,做到心中有數、處處不存疑。
全書共7章,第1章介紹環境準備,第2章介紹C程式的預處理、編譯、彙編和連結的全過程,並介紹了一點關於GCC編譯命令及編譯選項、GDB調試初步概念,第3章專注於編譯環節,即從C到彙編的轉換,第4章專注於連結過程,第5章介紹執行檔在系統中運行時,觀察進程與系統的關係、進程對庫的調用、程式異常行為等問題,第6、7章介紹一些性能剖析方法,包括GCC自帶工具、庫函式打樁方法、valgrind及perf工具的簡單使用等,第8章介紹一個綜合性的實例,即如何將HDFS檔案系統使用的gzip壓縮,從利用zlib庫在CPU上計算轉換成利用FPGA加速卡的過程。該實例涉及庫的使用和修改、makefile以及相應的C程式實現等多方面知識,讓讀者從一個工程需求的角度考察其方案與實現。每章後面都有一些練習題,其中有一個與zlib庫相關的任務貫穿了各章,讀者通過這個連貫的練習將各章知識融會貫通。

作品目錄

第1章實驗環境構建1
1.1安裝Linux1
1.1.1下載CentOS71
1.1.2CentOS7安裝2
1.2虛擬機安裝Linux9
1.2.1VirtualBox安裝9
1.2.2虛擬機配置13
1.2.3虛擬機安裝Linux20
1.3ssh遠程終端訪問20
1.3.1PuTTY客戶端21
1.3.2無密碼登錄24
1.3.3Xming圖形終端26
1.4初次接觸Linux28
1.4.1簡單操作28
1.4.2運行HelloWorld程式33
1.5小結37
第2章程式編譯與運行38
2.1編譯的各階段39
2.1.1原始碼39
2.1.2預處理40
2.1.3編譯44
2.1.4彙編46
2.1.5連結48
2.1.6GCC編譯驅動49
2.2GCC基本用法51
2.2.1C語言標準53
2.2.2庫的使用54
2.2.3搜尋路徑60
2.2.4編譯警告65
2.3GDB調試70
2.3.1代碼準備71
2.3.2運行代碼73
2.3.3查看變數和記憶體77
2.3.4圖形前端TUI83
2.4小結84
練習84
LinuxGNUC程式觀察目錄
第3章數據、運算與控制86
3.1x8664ISA86
3.1.1暫存器86
3.1.2記憶體空間與I/O空間91
3.2數據92
3.2.1數據大小、位元組序92
3.2.2數組、結構體和聯合體95
3.2.3數據布局98
3.3運算102
3.3.1數據傳送102
3.3.2算術/邏輯運算104
3.3.3載入有效地址106
3.4控制107
3.4.1條件跳轉107
3.4.2函式調用127
3.5小結159
練習159
第4章連結與執行檔161
4.1生成執行檔161
4.1.1樣例代碼162
4.1.2進程影像164
4.1.3ELF檔案與裝入168
4.2可重定位目標檔案182
4.2.1目標檔案的節(section)183
4.2.2符號及重定位187
4.2.3符號表196
4.3靜態連結200
4.3.1布局200
4.3.2符號解析205
4.3.3靜態重定位207
4.4動態連結214
4.4.1樣例代碼215
4.4.2動態程式庫216
4.4.3動態連結步驟230
4.5小結250
練習251
第5章連結腳本與makefile252
5.1二進制工具和連結腳本252
5.1.1binutils252
5.1.2連結器腳本254
5.2makefile267
5.2.1makefile基本格式267
5.2.2makefile規則270
5.2.3makefile變數274
5.2.4檔案指示277
5.2.5函式279
5.2.6make281
5.3小結282
練習283
第6章程式運行284
6.1裝入與運行284
6.1.1ELF裝載器284
6.1.2核心代碼285
6.1.3進程與執行緒285
6.1.4工作環境287
6.2基本行為觀察289
6.2.1ptrace289
6.2.2strace295
6.2.3GDB斷點原理300
6.2.4ltrace301
6.3異常行為304
6.3.1非法操作304
6.3.2回響信號309
6.3.3core檔案315
6.4小結325
練習326
第7章性能剖析327
7.1打樁方法327
7.1.1原始碼預處理時328
7.1.2靜態連結時330
7.1.3運行載入時332
7.2gprof334
7.2.1工作原理335
7.2.2gprof示例335
7.2.3性能數據解讀343
7.2.4圖形化顯示(gprof2dot.py+graphviz)348
7.3gcov349
7.3.1基於函式分析的缺點349
7.3.2gcov逐行分析351
7.4其他分析工具355
7.4.1Valgrind355
7.4.2perf368
7.5小結375
練習376
第8章綜合實例:HDFS中實現zlib庫的旁路377
8.1項目需求377
8.2系統分析378
8.2.1整體方案378
8.2.2Haddop的gzipJNI379
8.2.3zlib分析382
8.2.4測定z_stream成員大小385
8.3編碼實現387
8.3.1zlib日誌387
8.3.2Log4c388
8.3.3使用libcprss.so庫396
8.4功能驗證398
8.4.1準備輸入檔案399
8.4.2zlib原生庫的壓縮399
8.4.3libcprss.so庫的壓縮401
8.5小結401
附錄402

相關詞條

熱門詞條

聯絡我們