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

浙公网安备 33010602011771号