前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >吴章金: 《360度剖析Linux ELF》 新增 15 份实验材料,累计已达 70 份

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

作者头像
Linux阅码场
发布2019-12-10 14:39:21
1.3K0
发布2019-12-10 14:39:21
举报
文章被收录于专栏:LINUX阅码场LINUX阅码场

本文简要介绍了新增的 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 份

代码语言:javascript
复制
$ find ./ -name "*.pdf" | wc -l
25

使用说明多达 53 份

代码语言:javascript
复制
$ find ./ -name "*.md" | wc -l
53

另有 13 份演示小视频

代码语言:javascript
复制
$ grep showterm.io -ur ./0* | wc -l
13

多达 5351 行实验代码

通过 cloc 统计后,得到如下更为详细的数据,内含 55 个 C 程序和 23 份汇编代码,另有 50 个 Makefile。

代码语言:javascript
复制
$ 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
-------------------------------------------------------------------------------

详细目录结构如下

代码语言:javascript
复制
$ 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 环境即可。

(完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux阅码场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景简介
  • 15 种代码执行的方式
  • 其他数据统计
    • 标准文档多达 25 份
      • 使用说明多达 53 份
        • 另有 13 份演示小视频
          • 多达 5351 行实验代码
            • 详细目录结构如下
            • 小结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档