iOS逆向(六)程序、进程、线程、内存结构的概念

程序(静态的,磁盘上的)

百度的解释是:bash

计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,知足人们某种需求的信息化工具。并发

进程(动态的,内存中)

进程的概念函数

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操做系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体工具

换句话说进程是一个容器,包含程序执行须要的代码、数据还有资源等信息。多任务的操做系统,能够同时执行多个进程。布局

进程虚拟地址空间

多任务操做系统中的每个进程都运行在一个属于它本身的内存沙盘中,这个沙盘就是虚拟地址空间 (virtual addressspace), 在32位经典模式下,它老是一个4GB的内存地址块。这些虚拟地址经过页表(pagetable) 映射到物理内存,页表由操做系统维护并被处理器引用。每一个进程都拥有一套属于它本身的页表,可是还有一个隐情, 只要虚拟地址被使能,那么它将会做用于这台机器上运行的全部软件,包括内核自己,所以,有一部分虚拟地址必须保 留给内核使用。spa

线程

是操做系统可以进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运做单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中能够并发多个线程,每条线程并行执行不一样的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程操作系统

函数

包含某个特定功能的代码块,能够叫作子程序。线程

典型的内存空间布局

  • 从低地址到高地址依次为:代码区、只读常量区、全局区/数据区、BSS段、堆区、栈区。设计

    代码区:存放可执行指令。
    
    只读常量区:存放字面值常量、具备常属性且被初始化的全局和静态局部变量(如:字符串字面值、被const关键字修饰的全局变量和被const关键字修饰的静态局部变量)。
    
    全局区/数据区:存放已初始化的全局变量和静态局部变量。
    
    BBS段:存放未初始化的全局变量和静态局部变量,并把它们的值初始化为0。
    
    堆区:存放动态分配的内存。
    
    栈区:自动变量和函数调用时须要保存的信息(逆向分析的重点)
    
    补充:
     代码区和只读常量区通常统称为代码段
     
     栈区和堆区之间相对生长的,堆区的分配通常按照地址从小到大进行,而栈区的分配通常按照地址从大到小进行分配。
    复制代码
相关文章
相关标签/搜索