一、android jni实现
1.静态实现jni:先由Java得到本地方法的声明,然后再通过JNI实现该声明方法。
2.动态实现jni:先通过JNI重载JNI_OnLoad()实现本地方法,然后直接在Java中调用本地方法。

采用静态实现的方式,如果没有进行加密处理,很容易就在IDA导出函数搜到
采用动态实现的方式,还能起到一定的隐藏作用,导出的部分不是就能直接看到java层调的函数名,而是绑定的函数名

native层:
在JNI_OnLoad注册相关函数

JNIEXPORT jstring JNICALL native_hello(JNIEnv *env, jclass clazz)
{
return (*env)->NewStringUTF(env, "hello load jni.");
}

// Java和JNI函数的绑定表

static JNINativeMethod method_table[] = {
{ "HelloLoad", "()Ljava/lang/String;", (void*)native_hello },//绑定
};

java层:
// jni中注册的方法

public native String HelloLoad();

二、Android中调用Arm汇编代码

Android.mk文件

# This file is jni/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_ARM_MODE := arm # Name of the local module
LOCAL_MODULE := hello-jni
# The files that make up the source code
LOCAL_SRC_FILES := hello-jni.c multiple.s include $(BUILD_SHARED_LIBRARY)

multiple.s符合gnu语法

@ This file is jni/multiple.s
.text
.align
.global armFunction
.type armFunction, %function
armFunction:
@ Multiply by . Input value and return value in r0
stmfd sp!, {fp,ip,lr}
mov r3, r0, asl #
add r0, r3, r0, asl #
ldmfd sp!, {fp,ip,lr}
bx lr
.size armFunction, .-armFunction

直接调用在c中armFunction(input)调用

三、参考:
http://www.cnblogs.com/skywang12345/archive/2013/05/23/3095074.html
http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092491.html
http://my.oschina.net/redhouse/blog/101375
http://blog.csdn.net/dndxhej/article/details/7515949

最新文章

  1. [NOIP2012] 提高组 洛谷P1081 开车旅行
  2. 表格边框css
  3. Android:控件WebView显示网页
  4. HDU 1698 区间更新
  5. USB时钟为什么是48MHz
  6. 【流媒體】live555—VS2008 下live555编译、使用及测试
  7. HTML5 Shiv – 让该死的IE系列支持HTML5吧(转)
  8. FFMPEG 截取RTMP直播流图片命令
  9. Python的多线程实现
  10. http 响应头之location
  11. SenchaTouch2.3.1 正在使用listpaging以及pullrefresh插入 分页演示样品做
  12. JPA关系映射之many-to-many
  13. 81. Search in Rotated Sorted Array II (中等)
  14. (汇总)os模块以及shutil模块对文件的操作
  15. LINQ to Entities 不识别方法“System.DateTime AddDays(Double)
  16. 《Go语言网络编程》第一章:体系
  17. Web Worker模拟抢票
  18. nginx介绍(三) - 虚拟主机
  19. java中的重载(overload)和重写(override)区别
  20. BZOJ2669 [cqoi2012]局部极小值 状压DP 容斥原理

热门文章

  1. GTP
  2. 对java的理解
  3. MSSQL远程连接操作(转)
  4. Vue学习笔记 template methods,filters,ChromeDriver,安装sass
  5. Jenkins添加maven插件
  6. 利用JS获取本地时间和服务器时间
  7. GCC 7.3.0版本编译http-parser-2.1问题
  8. css :before 内容左边 分割线(四)
  9. redis 网络库文件 重构
  10. 高并发和多线程——Java内存模型