2023-2024-1 20232827 田紫晴《Linux内核原理与分析》第八周作业

Linux 内核如何装载和启动一个可执行程

一、实验过程

使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve

  cd LinuxKernel
  rm menu -rf      //将menu目录删除
  git clone http://github.com/mengning/menu.git      //利用git命令克隆一个新的menu目录
  cd menu
  mv test_exec.c test.c      //用test_exec.c覆盖test.c
  make rootfs      //重新编译

可以看到test.c中增加了exec函数,执行exec指令,显示如下:


返回LinuxKernel目录下,使用qemu命令冻结系统执行,进行调试

  cd ..
  qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S


水平分割一个窗口,启动gdb加载内核,连接到target 1234,并添加断点在sys_execve和load_elf_binary和start_thread处:

  gdb
  (gdb) file linux-3.18.6/vmlinux
  (gdb) target remote:1234
  b sys_execve
  b load_elf_binary
  b start_thread


继续执行
 


第三个断点start_thread处,可以看到修改了eip的值

二、实验理解

ELF的主要作用是作为一种可执行文件格式,用于存储程序的二进制代码、数据和其他相关信息,以便操作系统能够正确加载和执行这些程序。具体而言,ELF的作用包括:

  1. 可执行文件格式: ELF定义了可执行文件的结构,包括头部、节表和节区,以及与程序执行相关的信息。这使得操作系统能够理解和执行不同类型的程序。

  2. 共享库支持: ELF支持共享库,允许多个程序共享同一份库代码。这提高了系统资源的利用率,减小了可执行文件的大小,并简化了软件更新和维护过程。

  3. 动态链接: ELF支持动态链接,允许程序在运行时动态加载和链接共享库,而不是在编译时静态链接。这提高了灵活性,并允许共享库的更新和替换,而无需重新编译整个程序。

  4. 符号表: ELF文件包含符号表,记录了程序中使用的变量、函数等符号的信息。这对于调试和符号解析非常重要。

总体而言,ELF提供了一个灵活、可扩展且跨平台的文件格式,使得在Linux系统上运行的程序能够有效地利用系统资源,并与其他程序和库协同工作。

三、实验总结

本周主要学习了编译链接的过程和ELF可执行文件格式,对Linux内核装载和启动一个可执行程序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值