使用汇编语言编写一个Android应用程序(hello,word)(android 汇编语言)

使用汇编语言编写一个Android应用程序(hello,word)(android 汇编语言)

我们都熟悉计算机和PC内的程序和处理流程,那么手机的流程呢?一些app开发的人可能熟悉了,但是其他人可能对此知之甚少,本文中虫虫代理大家利用一个简单的安卓实例来探索安卓中应用的处理流程。 出于研究目的我们没有使用移动开发的常用的Android Studio和Java语言,而是使用了底层的汇编语言

Hello, Android!

问题源于,某个开发群,有人的随口一个问题:智能手机如何工作的?里面有什么?

我们利用一个安卓设备Galaxy S6 Edge,该机基于ARM架构(大多数智能手机都是基于ARM CPU这和常见的基于X86 平台 PC或者服务器不一样)。我们就以他为例,实现一个汇编版本的\”Hello,World\”简单程序,并让它在该设备商跑起来。

使用汇编语言编写一个Android应用程序(hello,word)(android 汇编语言)

.text

.globl _start

_start:

mov %r0, $1 // file descriptor number 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 Chongchongn\”

message_len = . – message

如果你之前从未见过汇编代码,那么这个程序可不好理解,但不要担心,跟着我们一起进行就好了。

程序解释

程序分为两部分: .text 部分:包含机器代码指令。

.data部分:从第15行开始,包含变量,字符串和其他数据。.text部分通常是只读的,而.data部分支持写入。

在第2行中,我们定义了一个名为_start的全局函数。这是该工程的注入点。操作系统将从这一点开始运行代码。该函数的实际定义在第4行。函数有两个功能:第5-9行将消息打印到屏幕,第11-13行终止程序。实际上11-13行可以省略掉,这时候程序将字符串打印\”Hello,World ChongChong\”并退出,但退出时候可能会崩溃试图执行一些随机无效的指令,它恰好是内存中的下一个。

打印消息(r0,r1,r2寄存器和swi)

通过调用系统调用来打印到屏幕。系统调用是操作系统提供的功能。本程序中我们调用了write()系统调用,通过将值4赋值给名为r7(第8行)的CPU寄存器中来指示,然后执行\”swi $0\”指令(第9行),该指令直接调用在Android内部运行的Linux内核。

系统调用的参数通过其他寄存器传递:r0表示我们要打印的文件描述符的编号。我们给他赋值为1(第5行),这个我们都熟悉,标号为1的文件描述符实际上就是stdout,标准输出,这样就功能在屏幕上打印。

r1表示我们要载入的数据的内存地址,因此我们给它赋值为\”Hello,World ChongChong\”字符串的地址(第6行)。r2告诉Android我们要写入多少字节。我们将其设置为message_len(第7行)的值,该值在第18行使用特殊的语法计算:点符号表示当前的内存地址,因此\”. – message\”表示当前内存地址减去message的地址。这就计算了message的长度。总之,第5-9行中的代码相当于以下c代码:

#define message \”Hello, World ChongChong n\”

write(1, message, sizeof(message));

结束程序(r0,r7)

结束程序要简单得多,我们只需要将退出代码赋值给r0(第11行),然后我们将值1(即exit()系统调用的值)赋值给r7(第12行),并且再次调用内核(第13行)。

如果有兴趣,你可以参考在安卓源代码中相关的Android系统调用列表及其编号。你也可以在那里找到write()和exit()函数的实现,它们调用相应的系统调用,就像我们一样。

编译源码

为了编译汇编程序,你需要Android NDK,即Native Development Kit,它包含一组用于ARM平台的编译器和构建工具。你可以直接从官方网站下载,也可以通过Android Studio安装:

使用汇编语言编写一个Android应用程序(hello,word)(android 汇编语言)

转到\”SDK工具\”并选中\”NDK\”,然后单击\”确定\”。另请注意Android SDK位置

获得NDK后,你需要搜索一个名为arm-linux-androideabi-as的文件,它是ARM平台的汇编程序。如果你是通过Android Studio下载的,请在Android SDK位置内查找。在我的机器上,它位于:

ndk-bundletoolchainsarm-linux-androideabi-4.9prebuiltwindows-x86_64bin

根据不同的NDK版本和操作系统该路径会略有变化,根据实际环境选择。该文件内置了ARM汇编程序。

将源代码保存为hello.s的文件。然后运行以下命令将编译为机器代码:

arm-linux-androideabi-as -o hello.o hello.s

以上命令会创建一个名为hello.o的可执行文件。

然后再通过调用链接器将其转换为可在你的设备上运行的ELF二进制文件:

arm-linux-androideabi-ld -o hello hello.o

你现在有一个名为hello的文件,其中包含你的程序,可以运行。

运行程序

安卓应用程序通常以APK格式分发。这是一种特殊的ZIP文件,安卓希望以特定的方式构建,并且应该包含Java类(你可以使用本机C/C 或者其他语言编写具体的应用代码,但入口点仍然必须是是Java) 。

为了方便运行我们的应用程序,我们使用adb将其复制到她的Android设备的临时文件夹,然后使用adb shell运行应用程序并查看输出:

adb push hello /data/local/tmp/hello

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

最后,运行应用程序:

adb shell /data/local/tmp/hello

Hello World Chongchon

总结

为安卓设备编写汇编代码是熟悉ARM体系结构的好方法,帮我们了解每天使用的APP是如何运行,及其底层的工作原理,我曾经在以前的文章和回答中回答过汇编作为一个必须要技能,我们不必须要精通但是每个人都需要学习一点,这样有助于我们了解计算机体系结果和底层的运行原理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月1日 下午4:35
下一篇 2024年5月1日 下午4:46

相关推荐

  • 档案管理系统 下载

    档案管理系统下载: 数字化时代的档案管理 随着数字化时代的到来,档案管理系统已经成为了数字化管理中不可或缺的一部分。档案数字化不仅可以提高档案管理的效率,也可以更好地保护档案的安全…

    科研百科 2024年8月19日
    37
  • 江苏省小型项目管理师

    江苏省小型项目管理师 随着经济全球化的加速,小型项目管理师的需求日益增长。江苏省小型项目管理师是指在江苏省从事小型项目管理工作的人员,其职责主要是负责小型项目的计划、执行、控制和报…

    科研百科 2024年8月20日
    43
  • 经验分享:施工项目管理比较好用的时间地点系统推荐(施工阶段的项目管理)

    国家能源局近日公布的数据显示,今年能源重点项目计划投资额同比增长10.3%。从东南沿海的海上风电项目,到西北沙漠戈壁中的风光大基地,一批新工程项目不仅为能源安全提供有力保障,也为经…

    科研百科 2022年9月18日
    157
  • 压实党建带团建责任 高质量发挥团青作用(夯实党建带团建突出团建促党建)

    共青团是党的助手和后备军,是党的青年工作的重要力量,是党联系青年的桥梁和纽带。为深入贯彻习近平新时代中国特色社会主义思想,落实新时代党的建设总要求,压实党建带团建责任,持续提高团的…

    科研百科 2023年1月25日
    576
  • 如何进行软件项目管理

    软件项目管理是软件开发过程中非常重要的一个环节,其目的是确保项目按时、按质量完成,并满足客户需求。以下是一些软件项目管理的基本方法和技巧,可以帮助项目经理有效地管理项目。 1. 制…

    科研百科 2025年1月7日
    0
  • 科研项目分工有哪些岗位

    科研项目分工有哪些岗位 科研项目的分工是进行项目工作的重要基础,不同领域的科研项目分工可能有所不同,但一般来说,通常会涉及到以下一些岗位: 1. 项目主持人:负责整个项目的规划和管…

    科研百科 2024年10月20日
    7
  • 如何制作项目管理列表(项目列表怎么做)

    Project Office是一款功能齐全的项目管理应用程序,可以帮助大家进行项目管理,提高大家的工作效率。Project Office拥有简约,美观的任务界面,可以高效地处理各类…

    科研百科 2022年6月6日
    132
  • 项目 管理 软件(管理项目系统软件)

    管理项目系统软件 随着数字化时代的到来,越来越多的企业开始使用项目管理系统软件来辅助他们进行项目的管理。这些系统软件可以帮助企业高效地组织和管理项目,提高项目的成功率和交付质量。本…

    科研百科 2024年9月1日
    26
  • 科研项目的本科毕业生论文科研项目的本科毕业生论文

    科研项目的本科毕业生论文 科研项目的本科毕业生论文 科研项目的本科毕业生论文 科研项目的本科毕业生论文 科研项目的本科毕业生论文 科研项目的本科毕业生论文 科研项目的本科毕业生论文…

    科研百科 2024年6月14日
    50
  • 一流理工大学科研项目

    一流理工大学科研项目 近年来,随着科技的不断发展,理工大学在科研项目方面取得了巨大的进展。一流理工大学拥有一流的科研团队和先进的实验设备,这些条件为科研项目的成功提供了坚实的基础。…

    科研百科 2024年8月9日
    35