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

实验

1、gcc编译的四个阶段

gcc -E hello.c -o hello.i // 预处理
gcc -S hello.i -o hello.s // 编译
gcc -c hello.s -o hello.o // 汇编
gcc hello.o -o hello // 链接
./hello // 执行

在这里插入图片描述
2、ELF
概述:ELF为可执行的和可链接的格式,是一个目标文件格式的标准,用于定义不同类型的对象文件中都有什么内容、以什么样的格式放这些内容

三种类型:

  • 可重定位文件:.o文件,文件中保存代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件、静态库文件或共享目标文件
  • 可执行文件:一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析的文件,文件中保存着一个用来执行的程序
  • 共享目标文件:.so文件,共享库,是可以被可执行文件或其他库文件使用的目标文件

3、动态链接和静态链接
静态链接编译时会把需要的所有代码都链接进去,应用程序比较大;
动态链接在程序运行或加载时将这些信息传递给操作系统,因此程序比较小
在这里插入图片描述
4、编程使用 exec*库函数加载一个可执行文件
execlp中的第一个参数为可执行文件的位置,第二个参数为命令,之后为传给可执行文件的参数
在这里插入图片描述
当我们执行该文件后可以看到它执行了hello文件
在这里插入图片描述
5、可执行程序装载时动态链接和运行时动态链接

  • List item

可执行程序装载时动态链接
将sharelib.c制作成动态库,在main函数中调用

 - gcc -fPIC -shared -o libsharelib.so sharelib.c
 - sudo cp libsharelib.so /usr/lib

在这里插入图片描述

  • 运行时动态链接
 gcc -shared dllibexample.c -o libdllibexample.so -m32

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

  • sys_execve中的do_execve()读取128字节的文件头部,以此判断可执行文件的类型
  • 调用search_binary_handle()搜索和匹配合适的可执行文件装在处理过程
  • ELF文件由load_elf_binary()函数负责装载,函数调用start_thread函数,创建新进程的堆栈
    在这里插入图片描述

问题

printk会默认换行,因此当我们要将多个数据显示在同一行中时,可以通过将它们写在同一个printk语句中来实现

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值