zoukankan      html  css  js  c++  java
  • 《Linux内核 核心知识全解析(完)【4】》

    hello.o 和 hello 都是 ELF 格式的文件

    ABI:应用程序二进制接口

     

     

    可执行的进程 和 虚拟地址空间,建立映射关系

     

     

     

     

     

     

     

     

     

    execve 和 fork 是比较特殊的系统调用:

    fork 返回:父进程返回 & 子进程返回(ret_from_fork,生成用户态环境)

    execve:返回的可执行程序替换之前的

     

     

     

     

     

     

     

     

    关键代码:search_binary_handler(bprm);

    struct linux_binprm bprm;//存储可执行文件信息

    总结

    Linux 系统启动新进程是通过系统调用 execve 实现的,核心函数是 do_execveat_common,所做的工作无非是创建一个帧,顶部塞文件名、环境变量、参数,初始化 bss、break section、加载 elf 文件至内存等等,最后在启动新进程之前,设置各种段寄存器、标志寄存器、堆栈寄存器以及指令计数器 (PC,即 IP),通过 iret 指令强制返回系统调用后,一个用户空间的进程便启动了。

    Linux 如何执行程序—— 内核态篇(废弃) | 一朵浊浪映天地

    vvl.me › how-does-the-Linux-kernel-run-a-program
     
    2017年3月20日 - 创建 struct linux_binprm (linux binary parameter, 存储待执行的二进制文件的参数) 实例bprm; Prepare binprm credentials. bprm->cred 是一份 ...
     

     load_binary 实际上调用的 load_elf_binary

     

     

     

     

     

    8048

    实操:

    P4603_使用gdb跟踪sys_execve内核函数的处理过程

    同一个进程里面 execve 切换可执行程序 ... 

    动态链接库的依赖树~

    如果要动态链接,则返回的不是可执行程序规定的起点,而是动态链接器的入口

     

    动态链接器解析当前可执行文件依赖哪些库,

    广度搜索遍历,逐层解析依赖库;

    动态链接主要不是由内核态完成的

    主要是 ld 用户态完成的

  • 相关阅读:
    简道云--编辑应用入门
    虚拟机迁移
    KVM虚拟化网络管理(一)
    keepalived概述
    kvm虚拟化存储管理
    免密登录gitlab
    KVM虚拟化介绍
    Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站
    Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站
    Jenkins凭证介绍
  • 原文地址:https://www.cnblogs.com/cx2016/p/13094431.html
Copyright © 2011-2022 走看看