iOS程序破解——ARM汇编基础

发布者:Meiren520最新更新时间:2019-12-23 来源: eefocus关键字:iOS  程序破解  ARM  汇编基础 手机看文章 扫描二维码
随时随地手机看文章

一、Thumb指令与ARM指令

Thumb指令为16位,因此存储代码的密度高,节省存储空间。但是功能不全,它只是ARM指令(32位)集的补充,是ARM指令集下的一个子集。在初级阶段我们不需要了解这些知识,只要有个概念知道有这么个东西就可以。


二、ARM的寄存器初步了解

  R0-R3:        用于函数参数及返回值的传递,超过4个参数,其它参数存在栈中,在ARM中栈是向下生长的,R0还可以作为返回值。


  R4-R6, R8, R10-R11: 没有特殊规定,就是普通的通用寄存器
  R7:          栈帧指针,指向母函数与被调用子函数在栈中的交界。
  R9:          在iOS3.0被操作系统保留
  R12:          内部过程调用寄存器,动态链接时会用到,不必深究
  R13:          SP(stack pointer),是栈顶指针
  R14:          LR(link register),存放函数的返回地址。
  R15:          PC(program counter),指向当前指令地址。
  CPSR:         当前程序状态寄存器,在用户状态下存放像condition标志中断禁用等标志的。


  另外还有VFP(向量浮点运算)相关的寄存器,不在列举。


三、常用汇编

  助记符  说明 
  ADC    带进位的加法
  ADD    加法
  AND    逻辑与
  B      分支跳转,很少单独使用
  BL          分支跳转,跳转后返回地址存入r14
  BX          分支跳转,并切换指令模式(Thumb/ARM)
  CMP        比较值,结果存在程序状态寄存器,一般用于分支判断
  BEQ        结果为0则跳转
  BNE        结果不为0跳转
  LDR        加载寄存器,从内存加载到寄存器  
  LDRB      装载字节到寄存器  
  LDRH      装载半字到寄存器(一个字是32位)
  LSL         逻辑左移 这是一个选项,不是指令
  LSR         逻辑右移 这是一个选项,不是指令
  MOV        传送值/寄存器到一个寄存器 
  STR         存储一个寄存器,寄存器值存到内存 
  STRB       存储一个字节
  STRH       存储一个半字
  SUB         减法
  PUSH POP 堆栈操作


四、函数调用

  函数的参数、局部变量、返回地址都在栈上存着,这部分栈上的内存称为栈帧。和R0~R15(不一定全部)、CPSR等一起构成了函数的运行环境。每一个函数系统都会分配一个栈帧,执行完成后系统自动收回。每个函数都以为R0~R15、CPSR等CPU相关寄存器为自己一人享有,所以要做一些必要操作。


  举个例子:假设A调用B时,那么A要保存自己的运行环境(保存现场),B执行完后,要恢复A的运行环境(恢复现场);另外A还可以通过R0—R4来传递参数,参数超过4个可以通过栈,B返回时可以通过R0传递返回值。其中主要涉及的就是栈的操作和寄存器的操作。下图为函数调用前后栈的布局,左边为调用前,右边为调用后,当B返回时应回到左边状态(A调用B之前的状态,就像没有调用B一样)。

  在上图中,一个栈帧除了已经提到的参数区域(parameter area)、链接区域(linkage area)、局部变量存储区(local storage area)外还有栈帧指针存放区域(saved frame pointer)、寄存器存储区(saved registers area),栈帧指针上面已介绍(R7);寄存器存储区:保存非易失寄存器(R4,R5,R6,R8,R10,R11),后面的汇编代码例子会介绍。


  开始调用(现场保护):

  1)LR入栈;

  2)R7入栈,包存要恢复的寄存器入栈;

  3)R7 = SP地址;

  4)将callee会修改且在返回caller时需要恢复的寄存器入栈;

  5)分配栈空间给子程序使用。


  下图为汇编代码(使用hopper disassemble反编译的代码),分析如下:

  第一行:将LR, R7, R4-R6入栈;

  第二行:r7=sp-0xc(指向old R7),之所以减去0xc因为PUSH后,r4,r5,r6占去12个字节;

  第三行:保存要恢复的寄存器;

  第四行:给当前函数开辟栈空间。

  函数返回(恢复现场):

  1)释放栈空间;

  2)恢复所保存的寄存器;

  3)恢复R7;

  4)将之前存放的LR从栈上弹出到PC,这样函数就返回了。

  下图为汇编代码(使用hopper disassemble反编译的代码),分析如下:

  第一行:释放栈空间;

  第二行:恢复保存的寄存器;

  第三行:恢复保存的寄存器,恢复R7,将之前存放的LR从栈上弹出到PC。

关键字:iOS  程序破解  ARM  汇编基础 引用地址:iOS程序破解——ARM汇编基础

上一篇:Ubuntu安装ARM架构GCC工具链最简单办法
下一篇:ARM Cortex M3指令集

推荐阅读最新更新时间:2024-11-12 01:45

一个不错的ARM入门建议 _
1、抓住51开发ARM 这几个月来我一直都爬在51的问题,自己都有一点笑自己了,用了4个月的时间,来巩固51的原理和程序,还好我自己算是走过来了,自己笨,身边的高才生又看不上51的原理,他们都比较“牛”,说51过时了,你问那个做什么???我比较郁闷!过时吗?我有一点怀疑? 他们不愿意说有他们自己的理由,没有人强求,靠自己好了。 我自己个人的观点:51是一个基础,而且还很重要,这是再我看了ARM之后感觉到的。它可以加速你的ARM学习速度,真得!不相信你试一试好了。 凡是要求一个速度、效率,不要做一些无用功,抓紧身边的每一个一分钟,人是活的,东西(知识、书)是死得,想要做的事情因此就简单了。 2、我在网上看到了
[单片机]
ARM推强化版IP套件系列产品 实现更高性能和功耗效
ARM宣布针对快速成长的主流移动与消费电子产品市场,推出强化版的具有更高性能和功耗效率的IP套件系列产品。该强化版的套件系列产品包括处理器、显示处理器、图形处理器和物理IP,是针对2015年及未来设备的主流IP解决方案进行提升。同时,由于结合了ARM Cortex-A17处理器与ARM Mali-T720 GPU,ARM 的IP套件系列产品更为丰富完整,能满足主流移动市场与其它消费应用的需求,如智能电视、机顶盒 媒体设备等。 ARM全球市场营销副总裁Ian Ferguson表示:“根据市场预测,主流智能手机市场自2015年起将以每年5亿件出货量的速度迅速成长,我们预见在这一市场将会产生众多的创新设计与应用, 而ARM Cort
[单片机]
龙芯展望2035年:将推7nm 32核CPU 与x86、ARM三足鼎立
目前全球主流的通用CPU架构有x86及ARM,它们占据了桌面、服务器及移动平台的绝大多数份额,国内有龙芯开发的龙芯架构,去年推出了自研的指令集LoongArch及龙芯3A/3C5000系列处理器。 龙芯3A/3C5000系列使用的是12nm工艺,频率2.3到2.5GHz,桌面版是4核架构,服务器版是16核架构,在GCC编译环境下运行SPEC CPU2006的定点、浮点单核Base分值均达到26分以上,四核分值达到80分以上。 基于国产操作系统的龙芯3A5000桌面系统的Unixbench单线程分值达1700分以上,四线程分值达到4200分以上。上述测试分值已经逼近市场主流桌面CPU水平,在国内桌面CPU中处于领先地位。
[半导体设计/制造]
龙芯展望2035年:将推7nm 32核CPU 与x86、<font color='red'>ARM</font>三足鼎立
ARM上市欲估值600亿美元 比英伟达交易价高50%
北京时间3月25日早间消息,据报道,在转让给英伟达的交易失败之后,日本软银集团正准备让旗下的英国芯片设计公司ARM独立上市,消息人士透露,软银集团希望在上市过程中获得ARM的600亿美元估值,这一估值目标也超过了给英伟达的转让价格。    该不愿具名消息人士表示,在上市之前,ARM将进行一次贷款融资,软银集团将邀请高盛集团、摩根大通银行和日本瑞穗金融集团来辅佐这次贷款融资交易。而此次帮助ARM贷款融资的三家金融机构,未来也极有可能担任上市交易的承销商,不过消息人士表示,上市承销商的名单尚未最终确定,也有可能会增加其他的投资银行。    2016年,日本软银集团斥资320亿美元买下了ARM公司,但后来又决定变卖。外媒指出,600亿美
[半导体设计/制造]
ARM技术大会:雄“芯”勃勃进军物联网
早在ARM TechCon 2014大会上,ARM携手合作伙伴全面展示其在移动设备、物联网与服务器等领域的芯片技术最新成果。根据eetimes网站报道,笔者了解到,尽管ARM SoC已取得了更大地进展,但尚未达到其黄金时期,其中核心技术正朝主流的FinFET技术节点迈进,而物联网与嵌入式系统也持续市场扩张。 面对市场的变化需求,正如ARM CEO Simon Segars在ARM TechCon 2014上强调“成功的技术是无形的”。尽管芯片的尺寸不断变小,但连接性、性能与能效对于消费者而言要更加的“不可见”。同时,为了促进硬件与服务快速发展,如软件定义网络(SDN),通过虚拟化将有效降低复杂度,带来更有效率的系统,从而帮助用
[单片机]
最佳移动芯片测试 ARM成大赢家
    在目前的移动处理器领域,ARM系统架构处于绝对的领导地位。而桌面处理器霸主英特尔虽然在此辛勤耕耘多年,成果却不甚理想。如果单就处理器性能表现而 言,哪家厂商的产品是最优秀的呢?科技网站Android Authority最近就对比了三星、高通和英特尔三家厂商的SoC产品。 配置 核心数 参与本次对比的两款ARM架构SoC都拥有8个处理核心,且都按照ARM的big.LITTLE架构进行排列。两款芯片的处理器由4个Cortex-A57和4个Cortex-A53所构成,前者性能强但功耗高,后者性能低但更节能。因此A57核心主要用于性能需求较高的任务,而A53则会负责日常的轻量级处理需求——这种技术被称作异构多处理(
[手机便携]
孙正义谈ARM:价值相当于购并100万家企业
据海外媒体报道,SoftBank社长孙正义在2016年6月突然宣布留任,指定接班人Nikesh Arora离职,7月又宣布购并ARM(ARM),引发市场轩然大波;日经商业(Nikkei Business)为此特别访问孙正义。 孙正义表示,他相信所谓的科技奇点(Technological Singularity)必将出现,大概20~30年后人工智能(AI)会成为超过人类的超级智能,而且当人工智能超越人类智能以后,人类就再也无法逆转。 有些人担心这种超级智能出现,会危害人类,但他则认为这是人类的福气,届时超级智能有望解决气象预报或不治之症的困难,大幅降低人类遭遇的灾害与痛苦;他想积极促成这个世界到来,眼前看来最适合担
[半导体设计/制造]
基于嵌入式ARM9的USB通信设计与实现
引 言 USB(Universal Serial Bus)是通用串行总线的缩写,因其具有方便易用,动态分配带宽,容错性优越和高性价比等特点,现已成为计算机的主流接口。 随着嵌入式系统的广泛应用,各种小型终端需要开发出与外界联系的USB接口。目前,常用的技术有两种。基于单片机的USB接口,特点是需要外置芯片,电路复杂,留下的 CPU资源不多;基于ARM的USB接口,特点是资源丰富,但ARM系列产品较多,如果选型不当,还需要搭接较多的外围电路,且不能很好地发挥CPU性能。该设计采用三星公司ARM9核的S3C2440A芯片作为CPU,因为该芯片内部集成了控制USB的所有部件,外围电路简单,易于实现。 1 S3C2440A特点
[单片机]
基于嵌入式<font color='red'>ARM</font>9的USB通信设计与实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
    做任何事情之前,一定要想好目标。没有目标的事情是做不好的,也做不成。我的目标就是学习ARM开发,当然是深入的学习。目标如下 :1、学习A ...
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
  • 学习ARM开发(7)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved