Linux内核分析(第七周)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核分析(第七周)相关的知识,希望对你有一定的参考价值。

可执行程序的装载

 

一、预处理、编译、链接和目标文件的格式

1.可执行程序怎么来的?

  预处理:

      gcc -E -o hello.cpp hello.c -m32

      *负责把include的文件包含进来及宏替换

  编译:

      gcc -x cpp-output -S -o hello.s hello.cpp -m32

      gcc -x assembler -c hello.s 0o hello.o -m32

      hello.s 汇编代码

      hello.o 二进制文件

  链接:

      gcc -o hello hello.o - -m32

2.目标文件的格式ELF

  A.out         COFF   (PE+ELF)

  三种类型:

      可重定位文件

      可执行文件

      共享文件

  Entry point address 程序的起点

3.静态链接的ELF

   静态链接会将所有代码放在一个代码段

   动态链接会有多个代码段

 

二、可执行程序,共享库,和动态链接

1.装载可执行程序程序之前的工作

  执行环境:命令行+参数

  *shell本身不限制命令行参数的个数

  *shell会调用execve将命令行参数和环境参数传递给main函数

  shell>execve>sys_exceve

  *初始化新程序堆栈时拷贝进去

  *先函数调用参数传递,再系统调用参数传递

2.装载时动态链接和示例

 

 

三、可执行程序的装载

1.相关关键问题分析

  fork先返回父进程一次;再返回ret_from_fork开始执行然后返回用户态

  sys_execve:

        do_exceve>do_execve_common>exec_binprm

  通过修改内核堆栈中EIP的值作为新程序的起点

2.sys_exceve的内部处理

  

  对于静态链接的文件elf_entry是新程序执行的起点

3.gdb跟踪

  new_ip是返回到用户态的第一条指令的地址

 

 

 

实验:

 

 

 

 

 

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

以上是关于Linux内核分析(第七周)的主要内容,如果未能解决你的问题,请参考以下文章

《Linux内核分析》课程第七周学习总结

Linux内核分析——第七周学习笔记20135308

Linux内核分析第七周作业

LINUX内核分析第七周学习总结——可执行程序的装载

20169217 《Linux内核原理与分析》第七周作业

《Linux内核原理与分析》教学进程