前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARM汇编语言模块结构和条件执行

ARM汇编语言模块结构和条件执行

作者头像
李玺
发布2021-11-22 14:15:52
8680
发布2021-11-22 14:15:52
举报
文章被收录于专栏:爬虫逆向案例

ARM汇编语言

模块结构

ARM汇编语言是指 ARM 汇编程序 (armasm) 进行分析并汇编生成对象代码的语言。

ARM汇编语言的源代码行的一般格式是:

{label标签} {instruction|directive|pseudo-instruction指令/伪操作/伪指令} {;comment语句注释}

  • 标签是表示地址的符号。在汇编期间,将计算由标签指定的地址。
  • 指令、伪指令和指令前面必须使用空格或制表符等留出空白。
  • 行中的第一个分号标记注释的开始,行的末尾就是注释的结束。
  • 大小写规则,指令助记符、指令和符号寄存器名称可以用大写或小写编写,但不能混合使用大小写。
  • 反斜杠符 (\) :在行尾放置反斜杠符 (\),可以将较长的源代码行拆分为多个行。不要在带引号的字符串内使用反斜杠。
  • 行长度的最大值为 4095 个字符,包括使用反斜杠的任何扩展在内。
  • 常数可以是:数字、布尔值、字符、字符串

模块示例

AREA指令是一个伪指令,用于段定义。ARM汇编程序由段组成,段是相对独立的指令或数据单位,每个段由AREA伪指令定义,并定义段的属性。

在这里插入图片描述
在这里插入图片描述
ENTRY 指令
  • ENTRY 标记的是第一个要执行的指令。在包含 C 代码的应用程序中,在 C 库 初始化代码中也包含一个入口点。初始化代码和异常处理程序也包含入口点。
start 应用程序执行
  • 应用程序代码在标签 start 处开始执行,并在此处将十 进制值 10 和 3 加载到寄存器 r0 和 r1 中。这些寄存器将一起相加,并且结果将存放到 r0 中。
stop 应用程序终止
  • 在执行主代码后,应用程序会将控制权返回调试器,以此来终止执行。 此操作是通过将 ARM 半主机 SVC(缺省为 0x123456)与下列参数结合使用来完成的 r0 等于 angel_SWIreason_ReportException (0x18) r1 等于 ADP_Stopped_ApplicationExit (0x20026)
END 指令
  • 此指令指示汇编程序停止处理此源文件。每个汇编语言源模块必须以仅包括 END 指令的一行结束。
调用子例程
  • 若要调用子例程,应使用跳转和链接指令,其语法是:BL destination BL 指令:将返回地址存放到链接寄存器中,将pc设置为子例程的地址。 destination是子例程的第一个指令处的标签,也可以是程序相对表达式。
  • 在执行子例程代码后,可以使用 BX lr 指令返回。按照约定,寄存器 r0 到 r3 用于将参数传递给子例程,并且 r0 还用于将结果传递回调用方。
在这里插入图片描述
在这里插入图片描述

ALU 状态标记

  • APSR (应用程序状态寄存器)包含下列 ALU 状态标记 N 当运算结果为负值时设置此标记。 Z 当运算结果为零时设置此标记。 C 当运算导致进位时设置此标记。 V 当运算导致溢出时设置此标记。 如果加法的结果大于或等于 2的32次方,减法的结果为正值,或者是移动或逻辑指令中 的内嵌滚筒式移位器运算的结果导致进位,则会产生进位。 如果加法、减法或比较的结果大于或等于 2的31次方 或小于 -2的31次方 ,则会发生溢出。

条件执行

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ARM汇编语言
  • 模块结构
  • 模块示例
    • ENTRY 指令
      • start 应用程序执行
        • stop 应用程序终止
          • END 指令
            • 调用子例程
            • ALU 状态标记
            • 条件执行
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档