Android中调用Arm汇编代码

Stella981
• 阅读 644

Android NDK中汇编文件和C文件是等价的,直接使用ndk-build就可混合编译.c和.s文件,例如如下一个汇编文件add.s,实现两个整数相加,并返回结果,源码如下:(注意为gnu语法)

.text

.align 4

.global my_add

.type my_add, %function

my_add:

add r0, r0, r1

bx lr

要在.c中使用以上代码,需要先声明方法 my_add

extern int my_add(int, int);

然后就可以直接使用了,非常方便

参考资料:http://www.eggwall.com/2011/09/android-arm-assembly-calling-assembly.html

Demo工程:https://github.com/Tristan-Sun/NdkWithAssembleDemo

点赞
收藏
评论区
推荐文章
cpp加油站 cpp加油站
2年前
【工欲善其事,必先利其器】之怎么查看c++代码生成的汇编代码
本篇文章讲解怎么得到c代码对应的汇编代码,想要真正的理解一段代码到底是怎么执行的,还是要从汇编的层面去看,那怎么得到一段c代码所对应的汇编代码呢,下面为你介绍三种方式。1.gcc编译生成XXX.s文件一般来讲,给你一个cpp文件,比如test.cpp,然后我们编译都是直接gtest.cpp这样简单直接的方式,但其实它中间有很多个过程的,包含
小万哥 小万哥
2星期前
掌握 C++ 编译过程:面试中常见问题解析
C编译过程C是一种高级编程语言,但是计算机并不能直接理解它。因此,需要将C代码翻译成计算机可以理解的机器语言。这个过程就是编译过程,是C程序从源代码到可执行文件的转换过程,包括预处理、编译、汇编和链接四个阶段。1.预处理在编译器开始编译之前
HCl4y HCl4y
3年前
XCTF hello_pwn
使用file查看文件是多少位Linux系统下的64位ELF文件用checksec检查文件保护没有canary保护IDA中汇编出伪C代码从unk_601068中读取10个字节,再读取dword_60106C中数据与1853186401比较,unk_601068,dword_60106C都是在段中exp打远程得到flag
Stella981 Stella981
2年前
Android.mk中的常用语法
__Android.mk编译文件是用来向AndroidNDK描述你的C,C源代码文件的,今天查了一些常用的的语法。一概述:一个Android.mk文件用来向编译系统描述你的源代码。具体来说:该文件是GNUMakefile的一小部分,会被编译系统解析一次或更多次的build系统。你可以在每一个Android.mk文件
Wesley13 Wesley13
2年前
C语言函数和汇编函数相互调用(转)
在C程序main函数中,接收用户输入任意个整数,然后在main中调用使用ARM汇编编写的函数(在该函数中完成对这些整数的排序功能),然后再在C程序main函数中输出这些排好顺序的整数。//main.cinclude <stdio.hint main(){    int i0;
Stella981 Stella981
2年前
Python源码在Win下和Linux下的编译,C++调用Python库绘制等高线
目录前言Python源码以及VS2017的准备Python源码VS2017Windows下编译Python源码编译命令编译步骤编译后的配置添加注册表Win10中编译Python源码小结Windows中C调用Python代码绘制等高线图CMakeLists.txt文件如下:Python代码如下:CPP文件:
Wesley13 Wesley13
2年前
Minix下的汇编
Minix下的汇编大多数的编译器,如TurboC/C,BorlandC/C,M$C/C,GCC,VC,编译过程都是"高级语言""asm""obj".(当然TurboPascal是个例外,它能跳过生成asm文件这一段而直接生成目标代码).Minix下的CC也不例外.一般来说,minix启动时执行的第一段代码就位于mp
Wesley13 Wesley13
2年前
GNU
GNUas汇编在编译C语言程序时,GNUgcc编译器会首先输出一个作为中间结果的as汇编语言文件,然后gcc回调用as汇编器把这个临时汇编语言程序编译成目标文件。即实际上as汇编器最初是用于专门汇编gcc产生的中间汇编语言程序的,而非作为一个独立的汇编器使用(这也就是为什么你只调用gcc就能将你的c
Wesley13 Wesley13
2年前
20165305 苏振龙《信息安全系统设计基础》第一周学习总结
第一章:计算机系统漫游一、信息二进制(位串)上下文二、C语言代码转汇编代码命令:gccShello.iohello.s三、源程序翻译过程:源程序文本→预处理器(预处理)→编译器(编译)→汇编器(汇编)→链接器(链接)→可执行目标程序(二进制)四、了解编译系统工作原理的益处:1、优化程序性能2
Wesley13 Wesley13
2年前
.net IL 指令速查
名称说明Add将两个值相加并将结果推送到计算堆栈上。Add.Ovf将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。Add.Ovf.Un将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。And计算两个值的按位“与”并将结果推送到计算堆栈上。Arglist返回指向当前方法的参数列表的非托管指针