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

简介: 【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 向 操作系统 申请一块内存 , 然后返回内存的首地址给客户端 ;

image.png







二、x86 架构下的栈内存 与 函数调用


" 栈 " 是内存中的一块连续的地址 , 栈内存是一块连续的有顺序的内存 ;


栈底处于内存低地址 , 栈顶处于内存高地址 ;

栈底处于内存高地址 , 栈顶处于内存低地址 ;

上述两种情况 , 都有可能出现 ;


image.png



调用函数时 , 首先将参数入栈 , 每传入一个参数 , 栈指针都要向上移动 ;


执行 func(arg0, arg1, arg2) 函数 , 将函数参数放入栈时 , 从右到左依次入栈 ;

image.png


目录
相关文章
|
存储 智能硬件
CPU的定义与功能与架构
CPU(中央处理器)是计算机的核心部件,负责执行程序指令、控制数据传输和进行运算。它能处理算术与逻辑运算,并协调其他硬件协同工作。x86架构源于英特尔,适用于PC和服务器,采用复杂指令集;ARM架构则由Acorn等公司开发,广泛用于移动设备和嵌入式系统,采用精简指令集,功耗低且能效比高。
1649 5
|
Android开发 开发者 Kotlin
Android实战经验之Kotlin中快速实现MVI架构
MVI架构通过单向数据流和不可变状态,提供了一种清晰、可预测的状态管理方式。在Kotlin中实现MVI架构,不仅提高了代码的可维护性和可测试性,还能更好地应对复杂的UI交互和状态管理。通过本文的介绍,希望开发者能够掌握MVI架构的核心思想,并在实际项目中灵活应用。
601 8
|
存储 IDE Java
java设置栈内存大小
在Java应用中合理设置栈内存大小是确保程序稳定性和性能的重要措施。通过JVM参数 `-Xss`,可以灵活调整栈内存大小,以适应不同的应用场景。本文介绍了设置栈内存大小的方法、应用场景和注意事项,希望能帮助开发者更好地管理Java应用的内存资源。
817 4
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####
|
网络协议 Linux Android开发
深入探索Android系统架构与性能优化
本文旨在为读者提供一个全面的视角,以理解Android系统的架构及其关键组件。我们将探讨Android的发展历程、核心特性以及如何通过有效的策略来提升应用的性能和用户体验。本文不包含常规的技术细节,而是聚焦于系统架构层面的深入分析,以及针对开发者的实际优化建议。
458 21
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
391 5
|
安全 Android开发 iOS开发
深入探索iOS与Android系统架构差异及其对开发者的影响
本文旨在通过对比分析iOS和Android两大移动操作系统的系统架构,探讨它们在设计理念、技术实现及开发者生态方面的差异。不同于常规摘要仅概述内容要点,本摘要将简要触及核心议题,为读者提供对两大平台架构特点的宏观理解,铺垫
|
安全 Linux Android开发
深入探索Android与iOS的系统架构:一场技术较量
在当今数字化时代,智能手机操作系统的选择成为了用户和开发者关注的焦点。本文将深入探讨Android与iOS两大主流操作系统的系统架构,分析它们各自的优势与局限性,并对比两者在用户体验、开发生态和安全性方面的差异。通过本文的技术剖析,读者将对这两个平台的核心技术有更深入的理解。
|
7月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
1074 0
下一篇
开通oss服务