iOS逆向(六)程序、進程、線程、內存結構的概念

程序(靜態的,磁盤上的)

百度的解釋是:bash

計算機程序是一組計算機能識別和執行的指令,運行於電子計算機上,知足人們某種需求的信息化工具。併發

進程(動態的,內存中)

進程的概念函數

進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體工具

換句話說進程是一個容器,包含程序執行須要的代碼、數據還有資源等信息。多任務的操做系統,能夠同時執行多個進程。佈局

進程虛擬地址空間

多任務操做系統中的每個進程都運行在一個屬於它本身的內存沙盤中,這個沙盤就是虛擬地址空間 (virtual addressspace), 在32位經典模式下,它老是一個4GB的內存地址塊。這些虛擬地址經過頁表(pagetable) 映射到物理內存,頁表由操做系統維護並被處理器引用。每一個進程都擁有一套屬於它本身的頁表,可是還有一個隱情, 只要虛擬地址被使能,那麼它將會做用於這臺機器上運行的全部軟件,包括內核自己,所以,有一部分虛擬地址必須保 留給內核使用。spa

線程

是操做系統可以進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運做單位。一條線程指的是進程中一個單一順序的控制流,一個進程中能夠併發多個線程,每條線程並行執行不一樣的任務。在Unix System V及SunOS中也被稱爲輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱爲線程操作系統

函數

包含某個特定功能的代碼塊,能夠叫作子程序。線程

典型的內存空間佈局

  • 從低地址到高地址依次爲:代碼區、只讀常量區、全局區/數據區、BSS段、堆區、棧區。設計

    代碼區:存放可執行指令。
    
    只讀常量區:存放字面值常量、具備常屬性且被初始化的全局和靜態局部變量(如:字符串字面值、被const關鍵字修飾的全局變量和被const關鍵字修飾的靜態局部變量)。
    
    全局區/數據區:存放已初始化的全局變量和靜態局部變量。
    
    BBS段:存放未初始化的全局變量和靜態局部變量,並把它們的值初始化爲0。
    
    堆區:存放動態分配的內存。
    
    棧區:自動變量和函數調用時須要保存的信息(逆向分析的重點)
    
    補充:
     代碼區和只讀常量區通常統稱爲代碼段
     
     棧區和堆區之間相對生長的,堆區的分配通常按照地址從小到大進行,而棧區的分配通常按照地址從大到小進行分配。
    複製代碼
相關文章
相關標籤/搜索