Linux GNU C 程序觀察
羅秋明
買這商品的人也買了...
-
$580$458 -
$580$458 -
$780$616 -
$414追蹤 Linux TCP\IP 代碼運行 -- 基於2.6內核
-
$354$336 -
$354$336 -
$354操作系統之編程觀察
-
$774Linux C 與 C++ 一線開發實踐
-
$354代碼里的世界觀 通往架構師之路
-
$620$465 -
$380$323 -
$580$458 -
$414精通 Vim : 用 Vim 8 和 Neovim 實現高效開發
-
$505第一行代碼 : Android, 3/e
-
$356K線圖量化分析:用大數據研判股票、期貨、外匯買賣點
-
$235案例驅動的C語言程序設計
-
$403現代電力電子學導論, 3/e (Introduction to Modern Power Electronics, 3/e)
-
$331C/C++語言程序設計(第2版)
-
$880$695 -
$594$564 -
$894$849 -
$735奔跑吧 Linux 內核入門篇, 2/e
-
$673嵌入式 C語言自我修養 — 從芯片、編譯器到操作系統
-
$954$906 -
$719$683
相關主題
商品描述
本書所討論的內容是“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庫相關的任務貫穿了各章,讀者通過這個連貫的練習將各章知識融會貫通。 本書可以作為電腦及相關專業高年級本科生或研究生學習Linux環境下的C程序設計教學用書,對希望深入瞭解Linux內核的讀者和相關開發人員也非常有參考價值。
目錄大綱
第1章 實驗環境構建
1.1 安裝Linux
l.1.1 下載CentOS7
1.1.2 CentOS7安裝
1.2 虛擬機安裝Linux
1.2.1 VirtualBox安裝
1.2.2 虛擬機配置
1.2.3 虛擬機安裝Linux
1.3 ssh遠程終端訪問
1.3.1 PuTTY客戶端
1.3.2 無密碼登錄
1.3.3 Xming圖形終端
1.4 初次接觸Linux
1.4.1 簡單操作
l.4.2 運行Hello World程序
1.5 小結
第2章 程序編譯與運行
2.1 編譯的各階段
2.1.1 源代碼
2.1.2 預處理
2.1.3 編譯
2.1.4 匯編
2.1.5 鏈接
2.1.6 GCC編譯驅動
2.2 GCC基本用法
2.2.1 C語言標準
2.2.2 庫的使用
2.2.3 搜索路徑
2.2.4 編譯警告
2.3 GDB調試
2.3.1 代碼準備
2.3.2 運行代碼
2.3.3 查看變量和內存
2.3.4 圖形前端TUI
2.4 小結
練習
第3章 數據、運算與控制
3.1 x86—64 ISA
3.1.1 寄存器
3.1.2 內存空間與I/O空間
3.2 數據
3.2.1 數據大小、字節序
3.2.2 數組、結構體和聯合體
3.2.3 數據佈局
3.3 運算
3.3.1 數據傳送
3.3.2 算術/邏輯運算
3.3.3 加載有效地址
3.4 控制
3.4.1 條件跳轉
3.4.2 函數調用
3.5 小結
練習
第4章 鏈接與可執行文件
4.1 生成可執行文件
4.1.1 樣例代碼
4.1.2 進程影像
4.1.3 ELF文件與裝入
4.2 可重定位目標文件
4.2.1 目標文件的節(section)
4.2.2 符號及重定位
4.2.3 符號表
4.3 靜態鏈接
4.3.1 佈局
4.3.2 符號解析
4.3.3 靜態重定位
4.4 動態鏈接
4.4.1 樣例代碼
4.4.2 動態鏈接庫
4.4.3 動態鏈接步驟
4.5 小結
練習
第5章 鏈接腳本與makefile
5.1 二進制工具和鏈接腳本
5.1.1 binutils
5.1.2 鏈接器腳本
5.2 makefile
5.2.1 makefile基本格式
5.2.2 makefile規則
5.2.3 makefile變量
5.2.4 文件指示
5.2.5 函數
5.2.6 make
5.3 小結
練習
第6章 程序運行
6.1 裝入與運行
6.1.1 ELF裝載器
6.1.2 內核代碼
6.1.3 進程與線程
6.1.4 工作環境
6.2 基本行為觀察
6.2.1 ptrace
6.2.2 strace
6.2.3 GDB斷點原理
6.2.4 ltrace
6.3 異常行為
6.3.1 非法操作
6.3.2 響應信號
6.3.3 core文件
6.4 小結
練習
第7章 性能剖析
7.1 打樁方法
7.1.1 源代碼預處理時
7.1.2 靜態鏈接時
7.1.3 運行加載時
7.2 gprof
7.2.1 工作原理
7.2.2 gprof示例
7.2.3 性能數據解讀
7.2.4 圖形化顯示(gprof2dot.py+graphviz)
7.3 gcov
7.3.1 基於函數分析的缺點
7.3.2 gcov逐行分析
7.4 其他分析工具
7.4.1 Valgrind
7.4.2 perf
7.5 小結
練習
第8章 綜合實例:HDFS中實現zlib庫的旁路
8.1 項目需求
8.2 系統分析
8.2.1 整體方案
8.2.2 Haddop的gzip JNI
8.2.3 zlib分析
8.2.4 測定z_stream成員大小
8.3 編碼實現
8.3.1 zlib日誌
8.3.2 Log4c
8.3.3 使用libcprss.so庫
8.4 功能驗證
8.4.1 準備輸入文件
8.4.2 zlib原生庫的壓縮
8.4.3 lmcprss.so庫的壓縮
8.5 小結
附錄