第七章 ARM 反汇编基础(四)(ARM 汇编语言)

ARM 汇编语言

  • 一门语言通常有自己的关键字、代码规范、子程序调用、注释等,汇编语言也一样
  • 汇编语言:将一系列与处理器相关的汇编指令用某种语法和结构组织在一起的程序语言形式
  • 用特定汇编语法规范编写的汇编代码,可被完整地编译或嵌入其他高级语言
  • Android 中的 ARM 汇编使用 GNU 汇编格式,现在开始学习 GNU ARM 汇编的一般语法格式及特点

ARM 汇编程序结构

  • 编译器在编译阶段会在内部将程序代码编译成与机器相关的汇编指令,上一节的 hello.c 的汇编代码就是一个完整的 ARM 汇编程序
  • 现在编写一个新的程序 app.c,代码:
#include <stdio.h>

int add(int a, int b, int c, int d)
{
    return a + b + c + d;
}

int main(int argc, char const *argv[])
{
    printf("add: %d\n", add(1, 2, 3, 4));
    return 0;
}

  • 执行如下命令,生成 app.s 汇编代码:
    在这里插入图片描述
  • 系统、NDK 版本、CC 环境变量设置等信息见上一节

  • app.s 内容如下:
    .text
    .syntax unified
    .cpu    arm1022e
    .eabi_attribute    6, 4    @ Tag_CPU_arch
    .eabi_attribute    8, 1    @ Tag_ARM_ISA_use
    .eabi_attribute    15, 1    @ Tag_ABI_PCS_RW_data
    .eabi_attribute    16, 1    @ Tag_ABI_PCS_RO_data
    .eabi_attribute    17, 2    @ Tag_ABI_PCS_GOT_use
    .eabi_attribute    20, 1    @ Tag_ABI_FP_denormal
    .eabi_attribute    21, 1    @ Tag_ABI_FP_exceptions
    .eabi_attribute    23, 3    @ Tag_ABI_FP_number_model
    .eabi_attribute    24, 1    @ Tag_ABI_align_needed
    .eabi_attribute    25, 1    @ Tag_ABI_align_preserved
    .eabi_attribute    18, 4    @ Tag_ABI_PCS_wchar_t
    .eabi_attribute    26, 2    @ Tag_ABI_enum_size
    .file    "app.c"
    .globl    add
    .align    2
    .type    add,%function
add:                                    @ @add
    .fnstart
.Leh_func_begin0:
@ BB#0:                                 @ %entry
    .pad    #16
    sub    sp, sp, #16
    str    r0, [sp, #12]
    str    r1, [sp, #8]
    str    r2, [sp, #4]
    str    r3, [sp]
    ldr    r0, [sp, #12]
    ldr    r1, [sp, #8]
    add    r0, r0, r1
    ldr    r1, [sp, #4]
    add    r0, r0, r1
    ldr    r1, [sp]
    add    r0, r0, r1
    add    sp, sp, #16
    bx    lr
.Ltmp0:
    .size    add, .Ltmp0-add
    .cantunwind
    .fnend

    .globl    main
    .align    2
    .type    main,%function
main:                                   @ @main
    .fnstart
.Leh_func_begin1:
@ BB#0:                                 @ %entry
    .save    {r4, r5, r11, lr}
    push    {r4, r5, r11, lr}
    .setfp    r11, sp, #8
    add    r11, sp, #8
    .pad    #24
    sub    sp, sp, #24
    ldr    r2, .LCPI1_6
.LPC1_0:
    add    r2, pc, r2
    ldr    r3, .LCPI1_2
    ldr    r12, .LCPI1_3
    ldr    lr, .LCPI1_4
    ldr    r4, .LCPI1_5
    ldr    r5, .LCPI1_0
    str    r5, [r11, #-12]
    str    r0, [sp, #16]
    str    r1, [sp, #12]
    mov    r0, r3
    mov    r1, r12
    str    r2, [sp, #8]            @ 4-byte Spill
    mov    r2, lr
    mov    r3, r4
    bl    add(PLT)
    ldr    r1, .LCPI1_1
    ldr    r2, [sp, #8]            @ 4-by
  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.26.00相对上一版本,增强EXE汇编,增加dbx老邮件解析、二维码功能,;V1.25.07相对上一版本,增加二进制汇编、IQ数据解析功能,完善MIPS汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家馈相关软件使用过程中的问题!
汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家馈相关软件使用过程中的问题!
汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序汇编错误,网上最新版本提示;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家馈相关软件使用过程中的问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值