资料介绍
大家都知道如何产生一个新的进程。
通过sys_fork,之后再调用sys_execve
系统初启后(核心态)的第一个用户态进程是init。
这要涉及到内层(特权级高)向外层(特权级低)转移的问题。
通常情况下,内核是不会调用用户层的代码,要想实现这逆向的转移,一般做法是在用户进程的核心栈(tss-》esp0)压入用户态的SS,ESP,EFLAGS,CS,EIP,伪装成用户进程是通过陷阱门进入核心态,之后通过iret返回用户态。
那么linux 2.2.14中的用户态进程init是如何实现的?
首先在kernel_thread(init.。.)函数中,利用系统调用sys_clone fork出一个内核级进程(此时要给该进程分配核心栈《-esp0),之后call init函数,init函数还会再起几个kernel_thread,然后会加载/sbin/init(通过execve调用)
在sys_execve中,要完成内核态到用户态的转移。
大体流程是sys_execve--》do_execve--》load_elf_binary()
--》do_load_elf_binary()--》do_mmap()
start_thread(reg,newip,newsp) (processor.h)
请大家关注do_mmap()及start_thread()很重要哦
do_mmap完成从文件虚拟空间到内存虚拟空间的映射。
而start_thread就是要在进程核心栈中的相应位置填入进程用户态的xss,esp and xcs,eip.
最后进程从ret_from_sys_call返回,iret指令从核心栈pop出xcs, eip完成特权及指令的转移, pop出 xss,esp,完成堆栈的切换。
以上我也是刚看代码悟出的,如有不对之处,还望高手指出。
通过sys_fork,之后再调用sys_execve
系统初启后(核心态)的第一个用户态进程是init。
这要涉及到内层(特权级高)向外层(特权级低)转移的问题。
通常情况下,内核是不会调用用户层的代码,要想实现这逆向的转移,一般做法是在用户进程的核心栈(tss-》esp0)压入用户态的SS,ESP,EFLAGS,CS,EIP,伪装成用户进程是通过陷阱门进入核心态,之后通过iret返回用户态。
那么linux 2.2.14中的用户态进程init是如何实现的?
首先在kernel_thread(init.。.)函数中,利用系统调用sys_clone fork出一个内核级进程(此时要给该进程分配核心栈《-esp0),之后call init函数,init函数还会再起几个kernel_thread,然后会加载/sbin/init(通过execve调用)
在sys_execve中,要完成内核态到用户态的转移。
大体流程是sys_execve--》do_execve--》load_elf_binary()
--》do_load_elf_binary()--》do_mmap()
start_thread(reg,newip,newsp) (processor.h)
请大家关注do_mmap()及start_thread()很重要哦
do_mmap完成从文件虚拟空间到内存虚拟空间的映射。
而start_thread就是要在进程核心栈中的相应位置填入进程用户态的xss,esp and xcs,eip.
最后进程从ret_from_sys_call返回,iret指令从核心栈pop出xcs, eip完成特权及指令的转移, pop出 xss,esp,完成堆栈的切换。
以上我也是刚看代码悟出的,如有不对之处,还望高手指出。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 从 NCP1631 切换到 NCP1632 驱动的交错式 PFC 11次下载
- 解析基于ARM64的init用户进程究竟如何启动? 2次下载
- LTC4416演示电路-PowerPath自动从备用电源切换到备用电源 37次下载
- 5G切换原理、常见问题及解决措施课件下载 4次下载
- linux内核源代码分析:进程的task_struct 结构资料下载 12次下载
- 鸿蒙内核源码分析:进程是内核的资源管理单元 22次下载
- Linux的内核结构详细说明 16次下载
- 如何才能编译Linux的内核 8次下载
- HarmonyOS 内核文档 34次下载
- HarmonyOS 内核设计程序文档 9次下载
- 如何使用简单的C语言实现多任务轮流切换 1次下载
- GT9XX电容屏开发资料 11次下载
- linux进程的深入理解 2次下载
- 进程间通信之使用信号详解 0次下载
- 基于Linux内核2_6的进程拦截机制的研究和实现_王全民 3次下载
- 如何在原理图编辑器和PCB编辑器中从毫米切换到密耳 935次阅读
- 全志Tina Linux下busybox init简介 228次阅读
- 配置fridaserver为后台进程 801次阅读
- 微服务如何让用户切换到新的版本 333次阅读
- OpenHarmony系统如何使用gdb调试init 589次阅读
- linux内核启动过程会执行用户空间的init进程 712次阅读
- Linux内核架构和工作原理 284次阅读
- 鸿蒙内核源码的中断环境下的任务切换 1970次阅读
- 鸿蒙内核源码之线程环境下的任务切换 1233次阅读
- 鸿蒙内核进程间为何要通讯? 2454次阅读
- 鸿蒙内核源码:进程是内核的资源管理单元 1258次阅读
- 鸿蒙OS代码学习:init进程的相关代码 1683次阅读
- Linux进程调度时机概念分析 2495次阅读
- 双电源切换开关特点_双电源切换开关的分类 3089次阅读
- 什么是微内核_微内核的发展历史 1.1w次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多