[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
Linux ELF 视频课程新增 15 份实验材料,累计已达 70 份
Wu Zhangjin 创作于 2019/12/05
By Falcon of TinyLab.org Dec 02, 2019
背景简介
作为一门特别重视实践的课程,《360° 剖析 Linux ELF》 视频课程自 1 个月前上线以来,一直在持续迭代和更新实验材料。
- 今日新增了 15 种代码执行的方式,包括 exec, shlib, dlopen, cscript, binfmt-misc, embed, load-malloc, load-mmap 等
- 相比视频上线时,已新增接近 30 份实验材料,至今累计提供了 70 多份实验材料
- 课程上线以后,持续连载了多篇 Linux ELF 系列文章,这些文章基本都是综合型的实验例子
本文将简要介绍这 15 种代码执行的方式,随后,展示一下该课程实验材料的当前数据统计结果。
15 种代码执行的方式
在第 7 章,该课程详细介绍了代码运行与退出,为了更透彻地理解这部分内容,经过精心的准备,我们新增了如下 15 份实验材料,分别介绍了 15 种代码执行的方式:
实验材料 | 材料说明 |
---|---|
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 分配的内存后运行,运行时确定数据地址 |
load-malloc-pic | 通过程序加载到 malloc 分配的内存后运行,使用位置无关代码 |
load-mmap-auto | 通过程序加载到 mmap 申请的内存后运行,运行时确定数据地址 |
load-mmap-fixed | 通过程序加载到 mmap 申请的内存后运行,使用固定地址 |
load-mmap-pic | 通过程序加载到 mmap 申请的内存后运行,使用位置无关代码 |
每一份实验材料都有配套的 Makefile 和相应的 C 或者汇编语言代码。这些材料完整地呈现了 Linux 程序执行的奥秘。
其他数据统计
该视频课程除了提供 8 份演示幻灯(含数十张全新设计的图表),10 小时视频以外,其实验材料多达 70 多份,并且还在持续迭代和更新中。
截止到现在,相应的数据统计如下:
标准文档多达 25 份
$ find ./ -name "*.pdf" | wc -l
25
使用说明多达 53 份
$ find ./ -name "*.md" | wc -l
53
多达 5351 行实验代码
通过 cloc 统计后,得到如下更为详细的数据,内含 55 个 C 程序和 23 份汇编代码,另有 50 个 Makefile。
$ cloc ./
287 text files.
264 unique files.
605 files ignored.
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 55 451 166 1710
make 50 474 76 1329
Assembly 23 152 62 1044
C++ 3 127 135 971
CMake 9 51 25 286
C/C++ Header 2 2 1 6
Bourne Shell 1 2 0 5
-------------------------------------------------------------------------------
SUM: 143 1259 465 5351
-------------------------------------------------------------------------------
详细目录结构如下
$ tree -L 3 -d ./
./
├── 01-init
│ ├── hello-asm
│ ├── hello-c
│ ├── linux-lab
│ └── vim
├── 02-born
│ ├── run-a.out
│ ├── run-arm
│ │ └── arm
│ ├── run-elf
│ ├── run-macho
│ └── run-pe
├── 03-face
│ ├── elf-tools
│ ├── gcc-usage
│ ├── tcc-usage
│ ├── tiny-executables
│ │ ├── elf
│ │ ├── mach-o
│ │ └── pe
│ └── upx
├── 04-basic
│ ├── addr-align
│ │ └── build
│ ├── big-little-endian
│ ├── c-std
│ ├── debug-example
│ ├── elf-objects
│ ├── exec-shlib
│ ├── inline-asm
│ ├── sections
│ └── shlib-pic
├── 05-generate
│ ├── assembly
│ ├── dlopen
│ ├── gcc-compile-background
│ ├── mini-dynamic-linker
│ └── standalone-c
├── 06-execute
│ ├── args-and-env
│ ├── assembly
│ │ └── staged
│ ├── fork-and-exec
│ ├── myinit
│ └── tinyshell
├── 07-running
│ ├── assembly -> ../06-execute/assembly/
│ ├── binfmtc
│ ├── c-variables
│ ├── mem-layout
│ ├── monitor-myself
│ ├── ptrace
│ ├── run-code
│ │ ├── binfmtc-extension
│ │ ├── binfmtc-magic
│ │ ├── cscript
│ │ ├── dlopen
│ │ ├── embed-ldscript
│ │ ├── embed-objcopy
│ │ ├── embed-pic
│ │ ├── emulator
│ │ ├── exec
│ │ ├── load-malloc-auto
│ │ ├── load-malloc-pic
│ │ ├── load-mmap-auto
│ │ ├── load-mmap-fixed
│ │ ├── load-mmap-pic
│ │ └── shlib
│ ├── tcc-run
│ └── weak
└── standards
└── svid
72 directories
小结
上述 15 份实验材料,随同其他资料都已经上传到代码仓库,该代码仓库目前只面向学员开放。
订阅该课程:《360° 剖析 Linux ELF》 ,可即刻下载上述实验材料,并同吴老师以及数百学员一起研究和讨论 Linux 程序的链接、装载和运行奥秘,提升分析和解决实际问题的效率。
所有上述实验材料,都可以直接在 Linux Lab 下即时进行实验。而 Linux Lab 正常情况下只需要几十分钟就可以安装完毕,它不仅支持 Linux,还可以直接在新版的 Windows 和 MacOSX 下运行,只要有 Docker 环境即可。
转发本文后截图发给 tinylab,赠送 Linux ELF 系列文章 PDF 合集。
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |