Linux阅码场

文章数:566 被阅读:935298

账号入驻

吴章金: 《360度剖析Linux ELF》 新增 15 份实验材料,累计已达 70 份

2019-12-02
    阅读数:


本文简要介绍了新增的 15 种执行代码的方式,另外详细介绍了该课程提供的所有实验材料。"

  • 程序执行 tags:
  • 360 elf
  • 视频课程
  • 实验材料

背景简介

作为一门特别重视实践的课程,《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 -l25

使用说明多达 53 份

$ find ./ -name "*.md" | wc -l53

另有 13 份演示小视频

$ grep showterm.io -ur ./0* | wc -l13

多达 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 1710make 50 474 76 1329Assembly 23 152 62 1044C++ 3 127 135 971CMake 9 51 25 286C/C++ Header 2 2 1 6Bourne 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 环境即可。

(完)


Linux阅码场原创精华文章汇总

更多精彩,尽在"Linux阅码场",扫描下方二维码关注



你的随手转发或点个在看是对我们最大的支持!



About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved