![](https://csdnimg.cn/release/download_crawler_static/86374761/bg4.jpg)
(3)通过获取的 elf 头部 e_header,进而获取到 elf 头内确定的程序入口地
址 entry、程序头部的偏移量 phdr、节区头部的偏移量 shdr。
(4)通过获得的偏移量,记录在 elf 头的程序信息,表项数量和表项大小,
计算出程序头部与节区头部的偏移地址。
(5)通过偏移地址获取到程序头 p_header,节区头 s_header。
(6)用汇编编写要添加的附加功能(hello_world.s 文件),因为之后要编译
成机器码。
(7)在附加功能的最后用跳转语句跳转到 elf 程序的原首地址,以实现执行
完附加功能后,原 elf 程序正常执行。
(8)为了将代码要嵌入到 elf 程序中,需要把附加功能代码转换成机器码,
存在 code[]中。
(9)计算嵌入程序的代码长度,嵌入数据的长度,便于之后修改信息。
(10)找到可运行的段,(elf 程序的 text 段,为了方便把数据也一起加进
去了)把要嵌入的代码写入到段的末尾,因为对应着未写满的节区,留有可
写空间。
(11)修改程序的入口地址,以实现程序运行时首先执行我们嵌入的附加功
能。
(12)嵌入了代码之后,要对程序头部,节区头部的一些信息进行改动:
对于程序头部,要修改对应嵌入段的节区总长,和该段对应的内存大小。
增加的长度通过之前计算的机器码长度得到。
对于节区头部,要修改节区头记录的节区大小。
(13)嵌入和相关修改完成,关闭 elf 程序。
(14)以上 elf 文件修改及代码注入工作由 optional2.c 文件实现。
3. 开发环境下载,安装和配置:
(1) 使用原生 Ubuntu 16.04 系统。
请到 https://cn.ubuntu.com/download/ 下载 64 位原生 Ubuntu 16.04 系统