原創 吳章金 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 環境便可。(完)