• Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序


    Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序

    zl + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

    由源代码生成可执行文件

    预处理 => 编译 => 汇编 => 链接

    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
    

    若无-o指明,生成可执行文件默认为a.out

    目标文件格式

    目标文件分为PE(windows)和ELF(linux)。

    查看ELF文件头部方法:readelf

    静态链接ELF可执行文件默认入口点:0x8048000

    动态链接执行方法:

    $ gcc main.c -o main -L/path/to/your/dir -lshlibexample -ldl -m32
    $ export LD_LIBRARY_PATH=$PWD 
    /*将当前目录加入默认路径,否则main找不到依赖的库文件,当然也可以将库文件copy到默认路径下。*/
    

    -L + 路径 或者 -l + 库名

    静态链接和动态链接的区别

    静态连接:elf_entry指向可执行文件头部,是新程序执行的起点

    动态链接:elf_entry指向ld(动态链接器)的起点,加载load_elf_interp

    实验:GDB调试sys_execve执行过程







    总结:execve的执行过程在前半段和fork类似创建一个新进程,但是在后半段通过sys_execve调用新的程序进入内存执行,使得新程序覆盖了旧程序的数据,实现了新进程的创建

  • 相关阅读:
    初识DataGridView 表格数据控件
    数据适配:DataAdapter对象概述
    数据适配 DataAdapter对象
    DataSet常用简单方法
    数据集DataSet
    DateReader读取数据
    Command操作数据
    【bzoj3886】[Usaco2015 Jan]Moovie Mooving 状态压缩dp+二分
    【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆
    【bzoj1593】[Usaco2008 Feb]Hotel 旅馆 线段树区间合并
  • 原文地址:https://www.cnblogs.com/20135319zl/p/5374457.html
Copyright © 2020-2023  润新知