博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux内核如何装载和启动一个可执行程序
阅读量:5292 次
发布时间:2019-06-14

本文共 976 字,大约阅读时间需要 3 分钟。

Linux内核如何装载和启动一个可执行程序

沙雨济
原创作品转载请注明出处   《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 
 
一 、实验目的
       理解编译链接的过程和ELF可执行文件格式;编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态链接,编程练习动态链接库的这两种使用方式;使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve ,验证您对Linux系统加载可执行程序所需处理过程的理解;特别关注新的可执行程序是从哪里开始执行的?为什么execve系统调用返回后新的可执行程序能顺利执行?对于静态链接的可执行程序和动态链接的可执行程序execve系统调用返回时会有什么不同?
 
二 、实验内容
首先,进入实验楼编程环境,进入LinuxKernel文件夹,删除menu,再clone一份新的。
 
然后,进入menu文件夹,将test_exec.c覆盖test.c,make rootfs。
 
然后,请来大小s,水平分割编程界面,开始进行gdb跟踪。
 
接着,进行断点的设置:sys_execve, load_elf_binary, start_thread。然后单步执行,至结束。
 
接着,可调出list,进行内部跟踪,可查看入口点地址。
 
三 、实验总结
         首先创建新进程,然后新进程调用execve()系统调用执行指定的ELF文件,之后再调用内核的入口函数sys_execve(),sys_execve()服务例程修改当前进程的执行上下文;以上系统调用终止后,新进程开始执行放在可执行文件中的代码,也就是执行在当前目录下显示文件的功能。 当ELF被load_elf_binary()装载完成后,函数返回至do_execve()在返回至sys_execve()。ELF可执行文件的入口点取决于程序的链接方式,对于静态链接的可执行文件,若是静态链接的,elf_entry就是指向可执行文件里边规定的那个头部,即main函数对应的位置,若这个可执行文件是需要依赖其它动态链接库的话,则elf_entry就是指向动态链接器的起点。

 

转载于:https://www.cnblogs.com/Diky/p/4474581.html

你可能感兴趣的文章
C# 获取本机IP
查看>>
Git历险记(二)——Git的安装和配置
查看>>
通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ
查看>>
解决win8使用内置管理员不能打开应用商城、天气等问题
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
globalization与全球化
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
权限数据库表结构
查看>>
autolayout的各种坑
查看>>
HDOJ(~1004)
查看>>
关于在Idea 创建Maven项目时,无法在source文件下创建servlet文件问题解决!
查看>>
同主机「跨网段」的两台虚拟机怎么通信?
查看>>
javascript:正则表达式、一个表单验证的例子
查看>>
MySQL数据库操作(1)用户与权限
查看>>
[stm32] Systick
查看>>
[php入门] 5、初学CSS从中记下的一些基础点(For小白)
查看>>
神经网络学习
查看>>
vue 在methods中调用mounted中的方法?
查看>>
原型与原型链
查看>>