码迷,mamicode.com
首页 > 系统相关 > 详细

linux内核分析第七次实验

时间:2016-04-10 12:42:18      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:

实验:

rm menu -rf
git clone https://github.com/megnning/menu.git
cd menu
ls
mv test_exec.c test.c
vi test.c   // 可以看到增加了一个exec的程序,只比fork程序多了一个execlp
vi Makefile // 查看Makefile的更改,加入了hello
make rootfs

技术分享

先设置sys_execve后,在menuOS里执行系统调用exec,会停在如图所示代码,找到第一个断点

技术分享

 sys_execve的内部处理过程

  • 系统调用的入口:do_execve

    return do_execve(getname(filename), argv, envp);
  • 转到do _ execve _ common函数

    return do_execve_common(filename, argv, envp);
    
    file = do_ open_exec(filename);//打开要加载的可执行文件,加载它的文件头部。
    
    bprm->file = file;
    bprm->filename = bprm->interp = filename->name;
    //创建了一个结构体bprm,把环境变量和命令行参数都copy到结构体中;
  • exec_binprm:

    ret = search_binary_handler(bprm);//寻找此可执行文件的处理函数
    
    在其中关键的代码:
    list_for_each_entry(fmt, &formats, lh);
    retval = fmt->load_binary(bprm);
    //在这个循环中寻找能够解析当前可执行文件的代码并加载出来
    //实际调用的是load_elf_binary函数
  • 文件解析相关模块:核心的工作就是把文件映射到进程的空间,对于ELF可执行文件会被默认映射到0x8048000。
  • 需要动态链接的可执行文件先加载链接器ld?(load _ elf _ interp 动态链接库动态链接文件),动态链接器的起点。如果它是一个静态链接,可直接将文件地址入口进行赋值。

linux内核分析第七次实验

标签:

原文地址:http://www.cnblogs.com/20135118lpy/p/5373692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!