日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 逆向】x86 CPU 架构体系 ( 堆内存 | 栈内存 | 函数调用 )

發布時間:2025/6/17 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 逆向】x86 CPU 架构体系 ( 堆内存 | 栈内存 | 函数调用 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、x86 架構下的堆內存
  • 二、x86 架構下的棧內存 與 函數調用





一、x86 架構下的堆內存



在可用內存中 , 申請內存塊 , 這部分內存塊就是堆內存 ;

  • C 語言中使用 malloc 等函數申請堆內存 ; 調用 free 函數釋放內存 ;
  • Java 語言中使用 new 關鍵字創建的對象 , 一般都是放在堆內存中 ; GC 垃圾回收期自動釋放內存 ;

應用程序 , 通過 " 系統調用 " 向系統申請內存塊 , 系統分配內存塊 , 將分配的地址返回給申請內存的應用程序 ; 這里的 " 系統調用 " 就是調用 malloc 等函數 , 申請內存 ;


堆內存是由系統分配的 , malloc 是 stdlib 標準庫中的函數 , 其真正的實現是調用了系統中斷 ( int3 軟中斷 ) , 將申請內存的字節大小 size 放到寄存器中 , 中斷發生后 , 切換到系統層面 , 在系統管理的內存塊中 , 分配 size 大小的內存 , 將這塊內存的首地址返回 ;


對于 Java 語言的 new 關鍵字在堆內存中創建對象 , Java 運行環境氛圍兩層 , 上層是 Java 虛擬機 ( JVM ) , 下層是 Windows / Linux / Mac 操作系統 ;

Java 虛擬機啟動時 , 首先要根據啟動時的 內存設置參數 , 維護一個指定大小的內存空間 ; JVM 申請的內存 , 可以一次性分配完畢 , 也可以選擇使用多少分配多少的策略 ;

new 創建對象 , 由 JVM 向 操作系統 申請一塊內存 , 然后返回內存的首地址給客戶端 ;





二、x86 架構下的棧內存 與 函數調用



" 棧 " 是內存中的一塊連續的地址 , 棧內存是一塊連續的有順序的內存 ;

  • 棧底處于內存低地址 , 棧頂處于內存高地址 ;
  • 棧底處于內存高地址 , 棧頂處于內存低地址 ;

上述兩種情況 , 都有可能出現 ;



調用函數時 , 首先將參數入棧 , 每傳入一個參數 , 棧指針都要向上移動 ;

執行 func(arg0, arg1, arg2) 函數 , 將函數參數放入棧時 , 從右到左依次入棧 ;

總結

以上是生活随笔為你收集整理的【Android 逆向】x86 CPU 架构体系 ( 堆内存 | 栈内存 | 函数调用 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。