Linux内核分析课程-- Linux内核如何装载和启动一个可执行程序
来源:互联网 发布:微信监控软件 编辑:程序博客网 时间:2024/05/06 07:08
齐昱博 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
1、课上总结:
(1)、编译链接的过程和ELF可执行文件格式
从一个源代码文件到一个可执行程序文件大概要经历如下过程:
以hello.c为例:
//hello.c#include <stdio.h>int main(){ printf("hello world!"); return 0;}
(2)、ELF可执行文件格式
ELF中有三种主要的目标文件
查看可执行文件的头部使用readelf指令
可执行文件的头部分别指明了版本号、OS/ABI、ABI的版本号、是可执行文件还是目标文件、入口地址等。
入口地址为程序真正开始的位置,它的地址减去0x8048000的数值为头文件大小。
(3)、使用exec*库函数加载一个可执行文件的过程
静态链接,只要传递命令行参数和环境变量就可以正常工作
动态链接,除了以上两种输入还要一些动态链接库的依赖
动态链接分为可执行程序装载时动态链接和运行时动态链接
在main函数中调用动态加载共享库时需要用到dlopen;
2、实验部分:
实验目标:使用gdb跟踪分析一个execve系统的调用内核处理函数sys_excve
(1)、首先把实验要用到的代码写入test.c中
(2)make rootfs
(3)、使用gdb跟踪,设置断点(sys_execve , load_elf_binary , start_thread)
输入命令触发断点:
第一个断点:
按s,单步执行:
按c,继续执行:
按c,继续执行,发现停在了start_thread,使用命令查看new_ip的值,它等于0x8048d0a,再打开一个shell,使用命令readelf -h hello查看hello的elf头部,可以看到elf头部中的程序入口点地址正是0x8048d0a
- Linux内核分析课程-- Linux内核如何装载和启动一个可执行程序
- Linux内核如何装载和启动一个可执行程序(Linux)
- Linux内核分析:Linux内核如何装载和启动一个可执行程序
- 网易公开课《Linux内核分析》学习心得-Linux内核如何装载和启动一个可执行程序
- Linux内核分析 实验七:Linux内核如何装载和启动一个可执行程序
- Linux内核分析:实验七--Linux内核如何装载和启动一个可执行程序
- Linux内核分析之七——Linux内核如何装载和启动一个可执行程序
- Linux内核分析——Linux内核如何装载和启动一个可执行程序
- 第7节 Linux内核如何装载和启动一个可执行程序【Linux内核分析】
- Linux内核如何装载和启动一个可执行程序
- Linux内核如何装载和启动一个可执行程序
- Linux内核如何装载和启动一个可执行程序
- Linux内核如何装载和启动一个可执行程序
- 初学《Linux内核如何装载和启动一个可执行程序》
- Linux内核如何装载和启动一个可执行程序
- Linux内核如何装载和启动一个可执行程序
- Linux内核如何装载和启动一个可执行程序
- Linux内核如何装载和启动一个可执行程序
- 浅谈Java内存区域划分
- Scala之集合框架
- DB2中特权/权限
- 自考之路—操作系统阶段小结
- Hibernate 事务隔离级别
- Linux内核分析课程-- Linux内核如何装载和启动一个可执行程序
- 走进java_对String的理解
- JAVA-MD5加密函数
- 【OpenCV学习笔记】三十三、GrabCut & FloodFill图像分割
- python新手自学-set
- Scala之继承
- [Codevs] 1080 线段树练习
- Redis分布式锁
- qml hight 设置