zoukankan      html  css  js  c++  java
  • linux内核分析 第七周

    一、课堂相关

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

    1.可执行程序是怎么得来的

    C代码——预处理——汇编代码——目标代码——可执行文件
    
    预处理负责把include的文件包含进来及宏替换工作。
    
    hello和hello.o都是ELF格式的文件。
    

    2.目标文件的格式ELF

    种类:
    
    	一个可重定位(relocatable)文件保存着代码和适当的数据,用来和其他的object文件一起来创建一个可执行文件或者是一个共享文件。
    	
    	一个可执行(executable)文件保存着一个用来执行的程序;该文件指出了exec(BA_OS)如何来创建程序进程映象。
    	
    	一个共享object文件保存着代码和合适的数据,用来被下面的两个链接器链接。第一个是连接编辑器[请参看ld(SD_CMD)],可以和其他的可重定位和共享object文件来创建其他的object。第二个是动态链接器,联合一个可执行文件和其他的共享object文件来创建一个进程映象。
    

    3.静态链接的ELF可执行文件和进程的地址空间

    程序从0x804800开始。
    
    可执行文件加载到内存中开始执行的第一行代码。
    
    一般静态链接将会把所有代码放在同一个代码段。
    
    动态连接的进程会有多个代码段。
    

    (二)可执行程序、共享库和动态加载

    1.装载可执行程序之前的工作
    
    	命令行参数和shell环境,一般我们执行一个程序的Shell环境,我们的实验直接使用execve系统调用。 
    
    	命令行参数和环境串都放在用户态堆栈中
    
    2.装载时动态链接和运行时动态链接应用举例
    
    	动态链接分为可执行程序装载时动态链接和运行时动态链接。
    

    (三)可执行程序的装载

    1.可执行程序的装载相关关键问题分析

    sys_execve内部会解析可执行文件格式	 
    
    对于ELF格式的可执行文件fmt->load_binary(bprm);执行的应该是load_elf_binary其内部是和ELF文件格式解析的部分需要和ELF文件格式标准结合起来阅读。
    

    2.sys_execve的内部处理过程

    装载和启动一个可执行程序依次调用以下函数:
    
    sys_execve() -> do_execve() -> do_execve_common() -> exec_binprm() -> search_binary_handler() -> load_elf_binary() -> start_thread()
    

    5.浅析动态链接的可执行程序的装载

    可以关注ELF格式中的interp和dynamic。
    
    动态链接库的装载过程是一个图的遍历。
    
    装载和连接之后ld将CPU的控制权交给可执行程序。
    

    二、实验截图

    1.下载新的代码文件

    rm menu -rf
    
    git clone https://github.com/megnning/menu.git
    
    cd menu
    
    mv test_exec.c test.c
    
    make rootfs
    

    2.运行和gdb跟踪断点

    《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

  • 相关阅读:
    [转]权限树中Checkbox的操作[Asp.Net2.0]
    [转]IE点击链接没有反应或打开新窗口出现一个空白框(地址栏空白)的解决方法
    [引]VS2005 之 Visual Basic 编程语言介绍
    [文摘20070816]家(周国平)
    Linux 下zip包的压缩与解压
    SOSO发布国内首家高清街景地图 引领地图换代
    VC 获取当前工作目录和执行目录的一些方法
    设置vim 默认显示行号
    利用脚本将文字插入到图片或进行多个图片拼接
    ImageMagick操作合并图像
  • 原文地址:https://www.cnblogs.com/whyfarrell/p/5366012.html
Copyright © 2011-2022 走看看