码迷,mamicode.com
首页 > 其他好文 > 详细

X86-64和ARM64用户栈的结构

时间:2018-07-07 17:47:40      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:读取   pytho   保存   空间   基本   执行文件   用户   环境   进程环境   

背景

????主要基于Linux,介绍X86-64和ARM64的用户栈结构。断断续续的学了很多和栈相关的知识,今天打算整理用户栈相关的知识,废话少说,下面进入正题。在最初的最初,用户栈是OS创建的。

进程的创建

????一个用户进程从无到开始运行,需要经过几个重要的步骤:

  • Linux首先创建一个task_struct用于管理进程的方方面面。
  • 建立进程的虚拟地址空间,也即建立页表,建立虚拟地址到物理地址的映射,到这时一个用户进程所需的基本元素已经具备,到这里frok()的任务基本完成。
  • 接下来就需要可执行文件本身的参与,读取可执行文件头,解析文件头,文件头的前几个字节会指出当前文件是何种类型,如果是#!/bin/sh或 #!/bin/python 则该文件是脚本文件,有负责脚本文件的加载程序,本文只关注可执行文件。建立虚拟地址和可执行文件之间的映射。
  • 初始化进程环境,其中比较重要的一项便是初始化用户进程栈
  • 跳转到可执行文件的入口,执行可执行文件,一个用户进程就开始运行起来了

用户进程栈的初始化

在进程刚开始运行的时候,需要知道运行的环境和用户传递给进程的参数。一般来说,Linux会在用户进程运行前,将系统的环境变量和用户给的参数保存到用户虚拟地址空间的栈中。

X86-64和ARM64用户栈的结构

标签:读取   pytho   保存   空间   基本   执行文件   用户   环境   进程环境   

原文地址:http://blog.51cto.com/iamokay/2138525

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!