2022-2023-1 20222822 《Linux内核原理与分析》第八周作业

一,分析execve系统调用内核处理函数

1,删除更新

1.1 删除并更新menu

cd ~/LinuxKernel
rm menu -rf
git clone https://github.com/mengning/menu.git
cd menu 
mv test_exec.c test.c//  将test.c替换为test_exec.c,仍命名为test.c,为menu增加exec功能
make rootfs 

如图所示:
在这里插入图片描述

1.2 编译测试

如图所示,编译并更新成功,运行exec命令,则有箭头所示。
在这里插入图片描述

1.3 exec代码

如图所示:
主函数
在这里插入图片描述
Exec函数代码
在这里插入图片描述

二,跟踪

1,运行

在这里插入图片描述

2,追踪

2.1 另开一个shell命令窗口

如图所示

file linux-3.18.6/vmlinux
target remote:1234

在这里插入图片描述

2.3 设断点

在sys_execve、load_elf_binary和b start_thread处设置断点。

b sys_execve
b load_elf_binary
b start_thread

如图所示:
在这里插入图片描述

2.4 调试

在这里插入图片描述
使用po/x new_ip指令打印“elf_entry”所指向的可执行文件中定义的入口地址
在这里插入图片描述

2.5 查看hello(ELF文件)的头部信息

readelf -h hello

如图所示:
在这里插入图片描述

三,ELF文件格式

3.1 定义

ELF (Executable and Linkable Format)即可执行的和可链接的格式,是一个目标文件格式的标准。ELF格式的文件用于存储Linux程序。ELF是一种对象文件的格式,用于定义不同类型的对象文件中都有什么内容、以什么样的格式放这些内容。ELF首部会描绘整个文件的组织结构,它还包括很多节(sections,是在ELF文件里用以装载内容数据的最小容器),这些节有些是系统定义好的,有些是用户在文件中通过。section命令自定义的,链接器会将多个输入目标文件中相同的节合并。

3.2 ELF文件的3种类型

2.2.1 可重定位文件
这种一般是中间文件,还需要继续处理。由汇编器和编译器创建,一个源代码文件会生成一个可重定位文件。文件中保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件、静态库文件或者共享目标文件(即动态库文件)。

3.2.2 可执行文件
一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件,文件中保存着一个用来执行的程序。

3.2.3 共享目标文件
共享库,是指可以被可执行文件或其他库文件使用的目标文件,例如标准C的库文件libc.so。可以简单理解为没有主函数main的“可执行”文件,只有一堆函数可供其他可执行文件调用。

3.3 ELF文件格式分析

一般的 ELF 文件包括三个索引表:ELF header,Program header table,Section header table。

1)ELF header:在文件的开始,保存了路线图,描述了该文件的组织情况。

2)Program header table:告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。

3)Section header table :包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20222822王文博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值