Fork me on GitHub

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

作业信息

这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第八周作业>
这个作业的目标
作业正文 https://www.cnblogs.com/mazhuhong/p/13941823.html

可执行程序工作原理

ELF

  • 可重定位文件:为.o文件。文件中保存代码和适当数据,和其他.o文件一起创建可执行文件或者共享文件
  • 可执行文件:保存用来执行的程序,该文件指出了exec(BA_OS)如何来创建程序进程映像。
  • 共享目标文件:保存着代码和数据,被链接编辑器链接(静态链接),可以和其它的可重定位和共享目标文件来创建其它的object。被动态链接器链接,创建一个进程映象。

文件程序编译

四个步骤:

  • 预处理:gcc -E *.c -o *.i
  • 编译:gcc -S *.i -o *.s
  • 汇编:gcc -c *.s -o *.o
  • 链接:gcc *.o -o *

实验

1.删除menu目录,克隆一个新的menu目录,然后用test_exec.c将test.c覆盖
代码:

cd LinuxKernel
rm menu -rf  
git clone https://github.com/mengning/menu.git

查看test.c文件,可以看到新增加了exec系统调用


执行exec命令。

启动GDB调试


总结

通过本实验,我明白了一个程序的执行是做为一个新的进程,使用execve系统调用完成的。
程序到可执行文件需要经过:预处理、编译、汇编、衔接四个步骤:
-预处理: gcc -E mazhuhong.c -o mazhuhong.i -m32
-编译:gcc -S mazhuhong.i -o mazhuhong.s -m32
-汇编:gcc -c mazhuhong.s -o mazhuhong.o -m32
-默认衔接(动态库):gcc mazhuhong.o -o mazhuhong -m32
-衔接静态库:gcc mazhuhong.o -o mazhuhong.static -m32 -static

posted @ 2020-11-07 18:14  我欲与君相知  阅读(71)  评论(0)    收藏  举报