eBPF開發(fā)指南 從原理到應(yīng)用 版權(quán)信息
- ISBN:9787115643605
- 條形碼:9787115643605 ; 978-7-115-64360-5
- 裝幀:平裝-膠訂
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>>
eBPF開發(fā)指南 從原理到應(yīng)用 本書特色
面對 Linux 系統(tǒng)監(jiān)控與性能分析的復(fù)雜挑戰(zhàn),你是否感到困惑與無助?遭遇線上服難題時(shí),你是否渴望一把解鎖內(nèi)核與應(yīng)用運(yùn)行奧秘的鑰匙?不用擔(dān)心,eBPF 技術(shù)便是你的新選擇。本書將是你在這場探索之旅中的指南針,引領(lǐng)你穿越內(nèi)核的復(fù)雜迷宮,發(fā)掘 eBPF 的強(qiáng)大功能。從基礎(chǔ)到高級,從監(jiān)控網(wǎng)絡(luò)流量到優(yōu)化應(yīng)用性能,本書不僅傳授理論,更提供實(shí)踐指南。讓我們攜手,借助eBPF 的力量,開啟系統(tǒng)架構(gòu)的新時(shí)代。
eBPF開發(fā)指南 從原理到應(yīng)用 內(nèi)容簡介
本書詳細(xì)介紹了eBPF核心技術(shù)及其應(yīng)用。全書可分為eBPF基礎(chǔ)知識、進(jìn)階應(yīng)用和實(shí)際案例三大部分,覆蓋了eBPF的編程接口、架構(gòu)及其在性能分析、安全監(jiān)控和網(wǎng)絡(luò)協(xié)議等方面的應(yīng)用。讀者將通過C、Go和Python等語言學(xué)習(xí)eBPF編程,并掌握其在系統(tǒng)監(jiān)控、數(shù)據(jù)分析和性能提升方面的實(shí)際技巧。
本書適合不同層次的讀者,包括對操作系統(tǒng)或應(yīng)用程序監(jiān)控感興趣的學(xué)生和初學(xué)者、希望利用eBPF進(jìn)行內(nèi)核代碼調(diào)試和優(yōu)化的Linux內(nèi)核開發(fā)人員、使用eBPF監(jiān)控系統(tǒng)事件和分析惡意軟件的安全工程師和逆向工程師、通過eBPF收集性能數(shù)據(jù)以優(yōu)化軟件和系統(tǒng)性能的性能分析師和應(yīng)用程序開發(fā)者,以及希望優(yōu)化虛擬化軟件性能和管理的虛擬化開發(fā)人員。
eBPF開發(fā)指南 從原理到應(yīng)用 目錄
第 1 章 eBPF 概述 11.1 eBPF 是什么 1 1.2 eBPF 發(fā)展歷史 2 1.3 eBPF 應(yīng)用領(lǐng)域 4 1.4 eBPF 如何運(yùn)行 5 1.5 eBPF 相關(guān)工具與庫 6 1.5.1 BCC 6 第 1 章 eBPF 概述 11.1 eBPF 是什么 1 1.2 eBPF 發(fā)展歷史 2 1.3 eBPF 應(yīng)用領(lǐng)域 4 1.4 eBPF 如何運(yùn)行 5 1.5 eBPF 相關(guān)工具與庫 6 1.5.1 BCC 6 1.5.2 bpftrace 7 1.5.3 libbpf 8 1.6 初識 eBPF 程序 8 1.7 本章小結(jié) 9 第 2 章 eBPF 開發(fā)環(huán)境準(zhǔn)備 102.1 Linux 發(fā)行版本的選擇 10 2.2 編程語言的選擇 12 2.3 安裝和配置 Linux 操作系統(tǒng)環(huán)境 13 2.3.1 Windows 上安裝和配置Linux 14 2.3.2 macOS 上安裝和配置Linux 16 2.3.3 其他環(huán)境安裝 17 2.4 以二進(jìn)制方式安裝 eBPF 開發(fā)工具與庫 20 2.4.1 安裝 BCC 20 2.4.2 安裝 bpftrace 21 2.4.3 安裝 libbpf 21 2.5 以源碼方式安裝 eBPF 開發(fā)工具與庫 22 2.5.1 編譯安裝 BCC 22 2.5.2 編譯安裝 bpftrace 23 2.5.3 編譯安裝 libbpf 24 2.6 本章小結(jié) 24 第 3 章 Linux 動態(tài)追蹤技術(shù) 253.1 Linux 動態(tài)追蹤系統(tǒng) 25 3.2 前端工具和庫 26 3.2.1 strace 與 ltrace 26 3.2.2 DTrace 29 3.2.3 SystemTap 30 3.2.4 LTTng 30 3.2.5 trace-cmd 31 3.2.6 perf 31 3.3 數(shù)據(jù)采集機(jī)制 35 3.3.1 ptrace 系統(tǒng)調(diào)用 36 3.3.2 perf_event_open 系統(tǒng)調(diào)用 36 3.3.3 BPF 系統(tǒng)調(diào)用 37 3.3.4 其他子系統(tǒng)與內(nèi)核模塊 37 3.4 跟蹤文件系統(tǒng) 37 3.4.1 掛載位置 38 3.4.2 目錄詳情 38 3.4.3 跟蹤器 43 3.4.4 跟蹤選項(xiàng) 44 3.4.5 環(huán)形緩沖區(qū) 47 3.5 Linux 內(nèi)核數(shù)據(jù)源 48 3.5.1 ftrace 49 3.5.2 kprobe/kretprobe 70 目錄- 2 - 3.5.3 uprobe/uretprobe 74 3.5.4 tracepoint 77 3.6 eBPF 數(shù)據(jù)采集點(diǎn) 83 3.7 本章小結(jié) 84 第 4 章 eBPF 程序入門 854.1 第 一個(gè) eBPF 程序 85 4.1.1 第 一個(gè) BCC 程序 85 4.1.2 第 一個(gè) C 語言版本的eBPF 程序 86 4.2 eBPF 程序功能解讀 91 4.2.1 加載 eBPF 字節(jié)碼 92 4.2.2 BPF 系統(tǒng)調(diào)用 93 4.2.3 attach_kprobe 96 4.2.4 perf_event_open 系統(tǒng)調(diào)用 96 4.3 eBPF 授權(quán)協(xié)議 102 4.4 eBPF 指令集 103 4.4.1 eBPF 寄存器 103 4.4.2 eBPF 指令編碼 104 4.4.3 指令列表 105 4.4.4 eBPF 指令分析 109 4.4.5 BCC 中 eBPF 程序指令的生成 110 4.4.6 eBPF 指令反匯編 112 4.4.7 eBPF 驗(yàn)證機(jī)制 117 4.5 libbpf 126 4.5.1 libbpf 功能 126 4.5.2 libbpf 接口 127 4.6 libbpf 案例程序 128 4.7 重寫 eBPF 程序 131 4.7.1 如何編譯 132 4.7.2 編譯內(nèi)核態(tài)程序 135 4.7.3 編譯生成 skel 頭文件 136 4.7.4 編譯用戶態(tài)程序 141 4.8 本章小結(jié) 143 第 5 章 BCC 1445.1 BCC 工具集 145 5.1.1 tools 工具集 146 5.1.2 libbpf-tools 工具集 146 5.2 BCC 常用的工具 147 5.2.1 opensnoop 147 5.2.2 exitsnoop 149 5.2.3 execsnoop 150 5.3 使用 Python 開發(fā) eBPF 程序 152 5.3.1 BPF API 152 5.3.2 opensnoop 程序解讀 157 5.4 使用 libbcc 開發(fā) eBPF 程序 165 5.4.1 libbcc 的編譯與安裝 166 5.4.2 重寫 eBPF 程序 167 5.4.3 編譯與測試 175 5.5 本章小結(jié) 181 第 6 章 bpftrace 1826.1 bpftrace 的功能和特性 182 6.1.1 工程結(jié)構(gòu) 182 6.1.2 探針類型 184 6.1.3 特性 185 6.1.4 主程序 185 6.2 bpftrace 的腳本語法 191 6.3 探針類型 198 6.3.1 kprobe 和 kretprobe 198 6.3.2 uprobe 和 uretprobe 200 6.3.3 跟蹤點(diǎn) 202 6.3.4 USDT 204 6.3.5 定時(shí)器事件 208 6.3.6 軟件與硬件事件 209 6.3.7 內(nèi)存監(jiān)視點(diǎn) 211 6.3.8 kfunc 和 kretfunc 214 6.3.9 迭代器 215 6.3.10 開始塊與結(jié)束塊 217 目錄- 3 - 6.4 bpftrace 變量 217 6.4.1 內(nèi)置變量 217 6.4.2 基礎(chǔ)變量 218 6.4.3 關(guān)聯(lián)數(shù)組 221 6.5 bpftrace 函數(shù) 221 6.5.1 基礎(chǔ)函數(shù) 221 6.5.2 映射表相關(guān)函數(shù) 225 6.6 bpftrace 的工作原理 226 6.7 bpftrace 工具集 231 6.8 本章小結(jié) 236 第 7 章 使用 Golang 開發(fā) eBPF 程序 2387.1 Go 語言開發(fā)環(huán)境介紹 238 7.2 使用 libbpfgo 開發(fā) eBPF 程序 239 7.2.1 搭建 libbpfgo 開發(fā)環(huán)境 239 7.2.2 開發(fā) eBPF 程序 241 7.3 Cilium 與 ebpf-go 244 7.3.1 搭建 ebpf-go 開發(fā)環(huán)境 244 7.3.2 使用 ebpf-go 開發(fā) eBPF 程序 245 7.3.3 bpf2go 和 bpftool 249 7.4 本章小結(jié) 255 第 8 章 BTF 與 CO-RE 2568.1 什么是 CO-RE 257 8.2 BTF 詳解 258 8.2.1 BTF 數(shù)據(jù)結(jié)構(gòu) 258 8.2.2 BTF 內(nèi)核 API 261 8.2.3 生成 BTF 信息 262 8.2.4 二進(jìn)制中的 BTF 264 8.2.5 BTF 相關(guān)輔助函數(shù) 265 8.3 對 BTF 的處理 266 8.3.1 編譯器對 BTF 的處理 266 8.3.2 libbpf 對 BTF 的處理 268 8.4 讀取內(nèi)核結(jié)構(gòu)體字段 269 8.4.1 案例一:直接訪問結(jié)構(gòu)體 269 8.4.2 案例二:使用 bpf_get_ current_task_btf 270 8.4.3 案例三:使用 BPF_ CORE_READ 271 8.4.4 BTF 相關(guān)的其他宏 273 8.5 低版本系統(tǒng)如何支持 BTF 274 8.5.1 什么是 BTFHub 275 8.5.2 生成*小化的 BTF 信息 279 8.5.3 編譯運(yùn)行 BTF-App 280 8.6 本章小結(jié) 285 第 9 章 eBPF 程序的數(shù)據(jù)交換 2869.1 eBPF 程序的數(shù)據(jù)結(jié)構(gòu) 286 9.1.1 什么是 eBPF map 286 9.1.2 map 支持的數(shù)據(jù)類型 291 9.2 map 操作接口 294 9.2.1 eBPF map 相關(guān)的 API 294 9.2.2 創(chuàng)建 map 299 9.2.3 添加數(shù)據(jù) 300 9.2.4 查詢 301 9.2.5 遍歷數(shù)據(jù) 301 9.2.6 刪除數(shù)據(jù) 302 9.2.7 使用 bpftool 操作 map 302 9.3 map 在內(nèi)核中的實(shí)現(xiàn) 306 9.3.1 創(chuàng)建 map 對象 307 9.3.2 map 對象的生命周期 314 9.3.3 eBPF 對象持久化 315 9.4 ftrace 的 eBPF 數(shù)據(jù)交換接口 317 9.4.1 bpf_trace_printk 317 9.4.2 封裝的 bpf_printk 宏 320 9.4.3 trace 日志的輸出格式 321 目錄- 4 - 9.5 perf 事件 322 9.5.1 perf 事件的 map 類型 323 9.5.2 內(nèi)核態(tài)程序?qū)懭?perf 事件 324 9.5.3 用戶態(tài)程序讀取 perf 事件 327 9.5.4 BCC 中 perf 事件處理 330 9.6 環(huán)形緩沖區(qū) 333 9.6.1 eBPF ringbuf 的 map 類型 334 9.6.2 內(nèi)核態(tài)程序如何使用ringbuf 335 9.6.3 用戶態(tài)程序如何使用ringbuf 344 9.6.4 完整的數(shù)據(jù)交換實(shí)例 346 9.7 本章小結(jié) 351 第 10 章 eBPF 程序類型與掛載點(diǎn) 35310.1 常見的 eBPF 程序類型 353 10.1.1 跟蹤和分析類 355 10.1.2 網(wǎng)絡(luò)類 356 10.2 eBPF 程序掛載點(diǎn) 357 10.3 函數(shù)跟蹤技術(shù) 358 10.3.1 內(nèi)核態(tài)程序跟蹤 358 10.3.2 用戶態(tài)程序跟蹤 360 10.4 kprobe 361 10.4.1 內(nèi)核中使用 kprobe 探針 361 10.4.2 kretprobe 365 10.4.3 eBPF 中創(chuàng)建 kprobe 跟蹤 368 10.5 uprobe 372 10.5.1 創(chuàng)建單行程序測試uprobe 372 10.5.2 eBPF 中創(chuàng)建 uprobe 跟蹤 373 10.5.3 bashreadline 程序 377 10.6 USDT 379 10.6.1 在 BCC 中使用USDT 379 10.6.2 在 libbpf 中使用USDT 384 10.7 本章小結(jié) 387 第 11 章 eBPF 內(nèi)核輔助方法 38811.1 如何查閱內(nèi)核輔助方法 388 11.2 輔助方法的實(shí)現(xiàn)原理 389 11.3 eBPF 內(nèi)核輔助方法分類 392 11.3.1 網(wǎng)絡(luò)相關(guān)的輔助方法 392 11.3.2 數(shù)據(jù)處理類輔助方法 396 11.3.3 跟蹤相關(guān)的輔助方法 398 11.3.4 系統(tǒng)功能性輔助方法 399 11.4 常用的 eBPF 內(nèi)核輔助方法 401 11.5 本章小結(jié) 404 第 12 章 Linux 性能分析 40512.1 CPU 406 12.1.1 CPU 基礎(chǔ)知識 406 12.1.2 傳統(tǒng) CPU 分析工具 409 12.1.3 eBPF 相關(guān)分析工具 412 12.1.4 CPU 分析策略 413 12.2 內(nèi)存 414 12.2.1 內(nèi)存基礎(chǔ)知識 414 12.2.2 傳統(tǒng)內(nèi)存分析工具 419 12.2.3 eBPF 內(nèi)存分析工具 419 12.2.4 內(nèi)存分析方法 420 12.3 磁盤 I/O 420 12.3.1 磁盤 I/O 基礎(chǔ)知識 420 目錄- 5 - 12.3.2 傳統(tǒng)分析工具 423 12.3.3 BCC 中的分析工具 423 12.3.4 磁盤性能分析方法 423 12.4 網(wǎng)絡(luò) 424 12.4.1 網(wǎng)絡(luò)基礎(chǔ)知識 424 12.4.2 傳統(tǒng)網(wǎng)絡(luò)分析工具 426 12.4.3 eBPF 網(wǎng)絡(luò)分析工具 426 12.5 常用分析方法和案例 427 12.6 本章小結(jié) 428 第 13 章 eBPF 實(shí)戰(zhàn)應(yīng)用 42913.1 在網(wǎng)絡(luò)安全中的應(yīng)用 429 13.2 在軟件動態(tài)分析中的應(yīng)用 432 13.3 在安全環(huán)境增強(qiáng)中的應(yīng)用 439 13.4 在網(wǎng)絡(luò)數(shù)據(jù)處理中的應(yīng)用 443 13.5 在系統(tǒng)與云原生安全中的應(yīng)用 446 13.6 本章小結(jié) 448
展開全部
eBPF開發(fā)指南 從原理到應(yīng)用 相關(guān)資料
eBPF 作為 Linux 內(nèi)核的一項(xiàng)革命性技術(shù),以輕量級方式構(gòu)建了應(yīng)用與內(nèi)核的通道。然而,這項(xiàng)技術(shù)的學(xué)習(xí)和精通并非易事,目前市面上缺少一本全面覆蓋從基礎(chǔ)到高級的系統(tǒng)教程。本書從 eBPF 的基本概念出發(fā),深入探討其架構(gòu)、編程接口和實(shí)際應(yīng)用,旨在幫助讀者全面掌握 eBPF 程序開發(fā)流程,并在實(shí)際應(yīng)用中得心應(yīng)手。—— 陳莉君 西安郵電大學(xué)教授
eBPF開發(fā)指南 從原理到應(yīng)用 作者簡介
豐生強(qiáng) 獨(dú)立軟件安全研究員, 資深軟件安全專家,ISC2016 安全訓(xùn)練營獨(dú)立講師,擁有豐富的軟件安全實(shí)戰(zhàn)經(jīng)驗(yàn)。自2008年起,在安全雜志《黑客防線》上發(fā)表技術(shù)文章, 活躍于國內(nèi)各大軟件安全論壇,具有深厚的行業(yè)影響力。著有《Android 軟件安全與逆向分析》《macOS 軟件安全與逆向分析》等熱銷圖書,深受讀者喜愛。 李泊冰 安全專家,資深程序員,專注于移動安全研究。擁有近 10 年的行業(yè)經(jīng)驗(yàn),擅長軟件安全攻防對抗,多次從零開始構(gòu)建企業(yè)移動安全體系,具備豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。曾在國內(nèi)多家互聯(lián)網(wǎng)公司任職,涉及電商、短視頻、游戲、殺毒軟件等多個(gè)領(lǐng)域。業(yè)余時(shí)間致力于軟件與系統(tǒng)底層技術(shù)的研究。