吳章金: 《360度剖析Linux ELF》 新增 15 份實驗材料,累計已達 70 份

原創 吳章金 Linux閱碼場 2019-12-02linux


本文簡要介紹了新增的 15 種執行代碼的方式,另外詳細介紹了該課程提供的全部實驗材料。"shell

  • 程序執行 tags:
  • 360 elf
  • 視頻課程
  • 實驗材料

背景簡介

做爲一門特別重視實踐的課程,《360° 剖析 Linux ELF》視頻課程自 1 個月前上線以來,一直在持續迭代和更新實驗材料。vim

  • 今日新增了 15 種代碼執行的方式,包括 exec, shlib, dlopen, cscript, binfmt-misc, embed, load-malloc, load-mmap 等
  • 相比視頻上線時,已新增接近 30 份實驗材料,至今累計提供了 70 多份實驗材料
  • 課程上線之後,持續連載了多篇 Linux ELF 系列文章,這些文章基本都是綜合型的實驗例子

本文將簡要介紹這 15 種代碼執行的方式,隨後,展現一下該課程實驗材料的當前數據統計結果。ide

15 種代碼執行的方式

在第 7 章,該課程詳細介紹了代碼運行與退出,爲了更透徹地理解這部份內容,通過精心的準備,咱們新增了以下 15 份實驗材料,分別介紹了 15 種代碼執行的方式:ui

實驗材料 材料說明
exec 編譯成可執行文件
shlib 編譯成共享庫,並直接執行共享庫
dlopen 經過 dlopen 直接解析代碼符號並運行
cscript 以腳本的方式運行 C 語言程序
emulator 經過模擬器運行可執行文件
binfmtc-extension 經過擴展名直接運行 C 語言程序
binfmtc-magic 自定義一個魔數直接運行 C 語言程序
embed-ldscript 嵌入到另外一個程序運行,用 ldscript 輔助
embed-objcopy 嵌入到另外一個程序運行,用 objcopy 輔助
embed-pic 嵌入到另外一個程序運行,代碼自己實現位置無關
load-malloc-auto 經過程序加載到 malloc 分配的內存後運行,運行時肯定數據地址t
load-malloc-pic 經過程序加載到 malloc 分配的內存後運行,使用位置無關代碼
load-mmap-auto 經過程序加載到 mmap 申請的內存後運行,運行時肯定數據地址
load-mmap-fixed 經過程序加載到 mmap 申請的內存後運行,使用固定地址
load-mmap-pic 經過程序加載到 mmap 申請的內存後運行,使用位置無關代碼

每一份實驗材料都有配套的 Makefile 和相應的 C 或者彙編語言代碼。這些材料完整地呈現了 Linux 程序執行的奧祕。spa

其餘數據統計

該視頻課程除了提供 8 份演示幻燈(含數十張全新設計的圖表),10 小時視頻之外,其實驗材料多達 70 多份,而且還在持續迭代和更新中。
截止到如今,相應的數據統計以下:
標準文檔多達 25 份

debug

1. $ find ./ -name "*.pdf" | wc -l
2. 25

使用說明多達 53 份設計

1.$ find ./ -name "*.md" | wc -l
2.53

另有 13 份演示小視頻code

1.$ grep showterm.io -ur ./0* | wc -l
2.13

多達 5351 行實驗代碼視頻

經過 cloc 統計後,獲得以下更爲詳細的數據,內含 55 個 C 程序和 23 份彙編代碼,另有 50 個 Makefile。

1. $ cloc ./
2.        287 text files.
3.        264 unique files.
4.        605 files ignored.
5.
6   -------------------------------------------------------------------------------
7   Language                     files          blank        comment           code
8   -------------------------------------------------------------------------------
9   C                               55            451            166           1710
10   make                            50            474             76           1329
11   Assembly                        23            152             62           1044
12   C++                              3            127            135            971
13   CMake                            9             51             25            286
14   C/C++ Header                     2              2              1              6
15   Bourne Shell                     1              2              0              5
16   -------------------------------------------------------------------------------
17   SUM:                           143           1259            465           5351
18   -------------------------------------------------------------------------------

詳細目錄結構以下

1. $ tree -L 3 -d ./
2. ./
3. ├── 01-init
4. │   ├── hello-asm
5. │   ├── hello-c
6. │   ├── linux-lab
7. │   └── vim
8. ├── 02-born
9. │   ├── run-a.out
10. │   ├── run-arm
11. │   │   └── arm
12. │   ├── run-elf
13. │   ├── run-macho
14. │   └── run-pe
15. ├── 03-face
16. │   ├── elf-tools
17. │   ├── gcc-usage
18. │   ├── tcc-usage
19. │   ├── tiny-executables
20. │   │   ├── elf
21. │   │   ├── mach-o
22. │   │   └── pe
23. │   └── upx
24. ├── 04-basic
25. │   ├── addr-align
26. │   │   └── build
27. │   ├── big-little-endian
28. │   ├── c-std
29. │   ├── debug-example
30. │   ├── elf-objects
31. │   ├── exec-shlib
32. │   ├── inline-asm
33. │   ├── sections
34. │   └── shlib-pic
35. ├── 05-generate
36. │   ├── assembly
37. │   ├── dlopen
38. │   ├── gcc-compile-background
39. │   ├── mini-dynamic-linker
40. │   └── standalone-c
41.├── 06-execute
42. │   ├── args-and-env
43. │   ├── assembly
44. │   │   └── staged
45. │   ├── fork-and-exec
46. │   ├── myinit
47. │   └── tinyshell
48. ├── 07-running
49. │   ├── assembly -> ../06-execute/assembly/
50. │   ├── binfmtc
51. │   ├── c-variables
52. │   ├── mem-layout
53. │   ├── monitor-myself
54. │   ├── ptrace
55. │   ├── run-code
56. │   │   ├── binfmtc-extension
57. │   │   ├── binfmtc-magic
58. │   │   ├── cscript
59. │   │   ├── dlopen
60. │   │   ├── embed-ldscript
61. │   │   ├── embed-objcopy
62. │   │   ├── embed-pic
63. │   │   ├── emulator
64. │   │   ├── exec
65. │   │   ├── load-malloc-auto
66. │   │   ├── load-malloc-pic
67. │   │   ├── load-mmap-auto
68. │   │   ├── load-mmap-fixed
69. │   │   ├── load-mmap-pic
70. │   │   └── shlib
71. │   ├── tcc-run
72. │   └── weak
73. └── standards
74.     └── svid
75. 
76. 72 directories

小結

上述 15 份實驗材料,隨同其餘資料都已經上傳到代碼倉庫,該代碼倉庫目前只面向學員開放。訂閱該課程:《360° 剖析 Linux ELF》,可即刻下載上述實驗材料,並同吳老師以及數百學員一塊兒研究和討論 Linux 程序的連接、裝載和運行奧祕,提高分析和解決實際問題的效率。全部上述實驗材料,均可以直接在 Linux Lab 下即時進行實驗。而 Linux Lab 正常狀況下只須要幾十分鐘就能夠安裝完畢,它不只支持 Linux,還能夠直接在新版的 Windows 和 MacOSX 下運行,只要有 Docker 環境便可。(完)

相關文章
相關標籤/搜索