代码还原的技术 ARM汇编入门教程(一) Hello World!

一、目标

  • 为什么要学ARM汇编?

不为什么。

  • 学了ARM汇编有用吗?

没啥用

  • 学完ARM汇编能找到工作吗?

目前流行的大型软件,没有一个是拿汇编写的,所以你觉得呢?

  • 那你还要学ARM汇编吗?

学学吧,反正闲着也是闲着。会点低级语言,接近计算机运行的本源,还是很拉风的。

二、步骤

Hello World!

李老板他爹,老李老板年轻的时候也是做研发的,退休了闲下来,计划练练毛笔字。

某日,风和日丽,老李老板酒过三巡,气定闲神,挥毫泼墨,在小李老板孝敬的上等宣纸上写下了 Hello World!

.text

.globl _start

_start:
    mov     %r0, $1				// fd 1 (stdout)
    ldr     %r1, =message
    mov     %r2, $message_len
    mov     %r7, $4				// syscall 4 (write)
    swi     $0

    mov     %r0, $0				// exit status 0 (ok)
    mov     %r7, $1				// syscall 1 (exit)
    swi     $0
	
.data

message:
    .ascii      "Hello World!\n"
message_len = . - message

编译

要编译这个ARM汇编源码,有两种方案

1、在Android手机上安装编译器。

2、在电脑上用Android NDK的交叉编译工具来编译。

这里我们介绍方案2,在电脑上来交叉编译。

我的开发机是 MacOs 10.14, Android NDK安装在

/Users/fenfei/Library/Android/sdk/ndk/21.3.6528147

那么在其下

toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/

目录中可以找到

arm-linux-androideabi-as和arm-linux-androideabi-ld

windows的同学应该可以在类似目录找到arm-linux-androideabi-as.exe和arm-linux-androideabi-ld.exe

这就是ARM汇编的编译程序和链接程序

# 将.S ARM汇编源码 编译成 .o 目标文件
arm-linux-androideabi-as -o hello.o hello.S
# 将.o 目标文件 链接成 可执行文件  hello
arm-linux-androideabi-ld -o hello hello.o

adb push hello /data/local/tmp/hello
adb shell chmod +x /data/local/tmp/hello
adb shell /data/local/tmp/hello

完美,人生第一个ARM汇编程序跑起来了,同样是 #Hello World!# 老李老板应该和我们有不一样的领悟。

敲黑板

每行ARM汇编代码的第一个单词我们称之为 汇编指令。

r0-rX 我们称为寄存器,可以理解成CPU自带的变量,访问速度比内存快的多,但是数量有限。

hello程序里面一共有 mov ldr swi 三个指令

  • MOV
    数据操作指令
mov %r0, $1				 // 把数字1 存入到 r0寄存器里面
mov %r2, $message_len                    // 把字符串的长度值  存入到 r2寄存器
  • LDR
    内存操作指令
ldr %r1, =message		// 把Msg字符串的地址  存入到 r1 寄存器
  • SWI
    软中断指令

实际上在这里我们可以把它理解成系统API的调用。

调用系统API write

mov     %r7, $4			// syscall 4 (write)
swi     $0

而这个write API 的参数就需要查系统手册了。
https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md

三、总结

ARM汇编不需要刻意去记一大堆指令,在分析代码的过程中随用随查即可。

在这里插入图片描述

IT是工科,不是理科,和IT行业相似度最高的行业是盖楼房。真的,相似度相当惊人。

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号 奋飞安全,最新技术干货实时推送

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值