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

杨舒雯(原创作品转载请注明出处)

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

学习笔记

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

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

C代码——预处理——汇编代码——目标代码——可执行文件

2.目标文件的格式ELF

(1)A.out COFF PE、ELF(Linux中)

(2)ABI——应用程序二进制接口

(3)种类:

一个可重定位(relocatable)文件保存着代码和适当的数据,用来和其他的object文件一起来创建一个可执行文件或者是一个共享文件。

一个可执行(executable)文件保存着一个用来执行的程序;该文件指出了exec(BA_OS)如何来创建程序进程映象。

一个共享object文件保存着代码和合适的数据,用来被下面的两个链接器链接。第一个是连接编辑器[请参看ld(SD_CMD)],可以和其他的可重定位和共享object文件来创建其他的object。第二个是动态链接器,联合一个可执行文件和其他的共享object文件来创建一个进程映象。

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

程序从0x804800开始。

可执行文件加载到内存中开始执行的第一行代码。

一般静态链接将会把所有代码放在同一个代码段。

动态连接的进程会有多个代码段。

实验部分: 使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve

实验步骤:

1.配置环境,登录实验楼网站。

按照上次实验的基本步骤,结合老师视频所讲,完成相关实验。

cd LinuxKernel

删除menu

然后从github上克隆相应的mengning/menu.git

环境配置验证

配置成功。

2. 编译链接的过程。

gcc -x cpp-output -S -o hello.s hello.cpp -m32
gcc -x assembler -c hello.s -o hello.o -m32
gcc -o hello hello.o -m32
gcc -o hello.static hello.o -m32 -static

实验结果:

3.配置调试系统,和gdb调试配置

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S //配置调试环境

利用file linux-3.18.6/vmlinux和target remote:1234来配置加载初始调试环境.

4.设置断点sys_execve,load_elf_binary,start_thread

5.调试与验证所学和理解的sys_execve的知识:

断点1与展示:

单步进入调试查看sys_execve:

断点2,load_elf_binary:

断点3,start_thread,利用po new_ip 定位执行地址:

相应的地址验证:

栈内变量处理:

实验总结:

内核中实际执行execv()或execve()系统调用的程序是do_execve(),这个函数先打开目标映像文件,并从目标文件的头部(从第一个字节开始)读入若干(128)字节,然后调用另一个函数search_binary_handler(),在那里面让各种可执行程序的处理程序前来认领和处理。内核所支持的每种可执行程序都有个struct linux_binfmt数据结构,通过向内核登记挂入一个队列。而search_binary_handler(),则扫描这个队列,让各个数据结构所提供的处理程序、即各种映像格式、逐一前来认领。如果某个格式的处理程序发现特征相符而,便执行该格式映像的装入和启动。简而言之,庄周(调用execve的可执行程序)入睡(调用execve陷入内核),醒来(系统调用execve返回用户态)发现自己是蝴蝶(被execve加载的可执行程序)。

《Linux内核分析》第七周: 可执行程序的装载的更多相关文章

  1. Linux内核分析 第七周 可执行程序的装载

    张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...

  2. Linux内核分析第七周———可执行程序的装载

    Linux内核分析第七周---可执行程序的装载 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  3. 20135327郭皓--Linux内核分析第七周 可执行程序的装载

    第七周 可执行程序的装载 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 ...

  4. LINUX内核分析第七周——可执行程序的装载

    一.得到一个可执行程序 1. 预处理.编译.链接 gcc hello.c -o hello.exe gcc编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤. 预处理 => ...

  5. Linux内核设计第七周 ——可执行程序的装载

    Linux内核设计第七周 ——可执行程序的装载 第一部分 知识点总结 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 编译链接的过程 预处理阶段 gcc -E -o XX.cpp ...

  6. linux内核设计第七周——可执行程序的装载

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

    LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

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

    Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...

  9. LINUX内核分析第七周学习总结

    LINUX内核分析第七周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...

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

    LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

随机推荐

  1. ScheduledThreadPoolExecutor源码解读

    1. 背景 在之前的博文--ThreadPoolExecutor源码解读已经对ThreadPoolExecutor的实现原理与源码进行了分析.ScheduledExecutorService也是我们在 ...

  2. 迭代器协议和for循环工作机制

    一.递归和迭代 举个例子 递归:假如我去问路,路人甲看我长得盛世容颜,但是他不知道,他就去帮我问路人乙去了,路人乙跟路人甲说我也不知道,但一看路人甲美若天仙,就说,我去帮你问问路人丙,...完了可能得 ...

  3. <操作系统>内存管理

    单道程序设计:内存被划分为两部分:一部分供操作系统使用,另一部分供当前正在执行的程序使用. 多道程序设计:内存中进一步细分用户部分,以满足多个进程的要求. 内存管理的需求: 重定位:程序从磁盘换入内存 ...

  4. AliOS-Things linkkitapp解读

    app-example-linkkitapp是AliOS-Things提供的设备联网并且和阿里云IOT平台数据交互的一个示例程序: 1:application_start()程序在app_entry. ...

  5. Python 远程桌面协议RDPY简介

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 RDPY 是基于 Twisted Python 实现的微软 RDP 远程桌面协议. RDPY ...

  6. kubespray -- k8s集群dashboard 访问方式

    1.参考这篇文章: https://github.com/kubernetes/dashboard/wiki/Creating-sample-user 创建用户 2.获取token 3.kubectl ...

  7. 三、java三大特性--多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  8. 搭建SSH服务

    1.安装 ssh-server 通过命令进行安装:sudo apt-get install openssh-server 在安装时遇到问题,根据提示,执行命令:sudo apt-get update, ...

  9. 关于LED效率,这4点你应该知道

    关于LED效率,这4点你应该知道 发布时间:2017-08-22 12:09:35 原创:中国LED网 内容概要: 1. 这些灯的一些光通过转换器或磷光体转换成较长波长(绿色.黄色和红色光)的光,将所 ...

  10. CF908D New Year and Arbitrary Arrangement 期望、DP

    题目传送门 题意:给出正整数$pa,pb,k$,最开始你有一个空串,每一次你有$\frac{pa}{pa + pb}$的概率向串最后放一个$a$,有$\frac{pb}{pa + pb}$的概率向串最 ...