原创 吴章金 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 环境便可。(完)