ndk编译源码-代码缩减技术ARM汇编入门教程(一)Hello World!

1. 目标

*为什么要学习ARM汇编?

没有理由。

无用

目前流行的小软件都不是用汇编语言编写的ndk编译源码,那么你觉得呢?

学学吧,反正闲着就是闲着。 懂一点低级语言,接近计算机操作的本源,还是很爽的。

二、步骤

你好世界!

李老板的父亲李老板年轻时也是做研发的。 退休后,他打算利用业余时间练习钢笔书法。

有一天,天气晴朗,阳光明媚。 李先生喝了三巡,静下心来,泼墨,在李先生孝顺的优质宣纸上写下了Hello World!

<code data-lang="arm" style="box-sizing: border-box;font-family: Menlo, Consolas, "source code pro", Inconsolata, Monaco, "courier new", monospace;font-size: 0.9em;color: rgb(199, 37, 78);line-height: inherit;display: block;padding: 3px 7px;background: rgb(248, 245, 236);border-radius: 4px;">.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 汇编源代码ndk编译源码,有两种选择

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

2、使用Android NDK的交叉编译工具在笔记本上进行编译。

这里我们介绍选项2,在笔记本上交叉编译。

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

/用户/fenfei/库/Android/sdk/ndk/21.3.6528147

然后在它下面

工具链/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/

可以在目录中找到

ndk编译源码_源码编译是什么意思_源码编译安装

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 %r0, $1				 // 把数字1 存入到 r0寄存器里面
mov %r2, $message_len // 把字符串的长度值 存入到 r2寄存器

ldr %r1, =message		// 把Msg字符串的地址  存入到 r1 寄存器

其实这里我们可以理解为对系统API的调用。

调用系统API write

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

而这个写入API的参数需要查看系统指南。 +/master/constants/syscalls.md

三、总结

ARM汇编不需要刻意去记忆很多指令,在分析代码的过程中可以根据需要进行检查。

1:ffshow

IT是一门文科,不是一门理科,与IT行业相似度最高的行业就是建筑房屋。 确实,相似度相当惊人。

提示: