安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】

 

 

Android Studio开发JNI示例:https://blog.csdn.net/wzhseu/article/details/79683045

JNI_动态注册_静态注册.zip : https://pan.baidu.com/s/1wpTYA9euSdPqE1Z2bA_BHA 提取码: 7h97

 

错误:  编码GBK的不可映射字符 ( https://blog.csdn.net/talenter111/article/details/53418999 )
解决方法: 应该使用-encoding参数指明编码方式,如:
javah -jni -encoding UTF-8 com.example.XXXX.XXXX.MainActivity

 

 

静态注册动态注册 示例代码

 

静态注册、动态注册

/**************静态方法**********************/
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_calc_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string hello = "Hello from C++";return env->NewStringUTF(hello.c_str());
}
/*************************************************************/JNIEXPORT void JNICALL Java_com_example_jni_1demo_MainActivity_javaToC(JNIEnv *env, jobject obj)
{// 获取 类jclass fdClass = env->FindClass("com/example/jni_demo/MainActivity");// 获取 普通方法idjmethodID _jmethodID = env->GetMethodID(fdClass, "_method", "()V");// 获取 静态方法idjmethodID _staticjmethodID = env->GetStaticMethodID(fdClass, "_staticMethod", "()V");// 调用 java中 的 普通方法env->CallVoidMethod(obj, _jmethodID);// 调用 java中 的 静态方法env->CallStaticVoidMethod(fdClass, _staticjmethodID);
}/************************* 动态注册 nativate 方法 ********************************/ 
JNINativeMethod nativeMethod[] = {  // 方法数组映射// 定义数组,用于绑定 java方法 和 C方法的 关系{"addMethod", "(FF)F", (void*)my_add},          // java中方法名,方法签名,C++中方法名{"subMethod", "(FF)F", (void*)my_sub},{"mulMethod", "(FF)F", (void*)my_mul},{"divMethod", "(FF)F", (void*)my_div}
};/************************* 实现 JNI_OnLoad 动态注册方法 *******************************/
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved)
{JNIEnv* env;if(vm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK){return JNI_ERR;}// 获取 java native 方法对应的 类jclass fdClass = env->FindClass("com/example/calc/MainActivity");// 注册 java 层 native 方法jint retVal = env->RegisterNatives(fdClass, nativeMethod, sizeof(nativeMethod)/sizeof(nativeMethod[0]));if(retVal != JNI_OK){// 注册失败返回 -1return JNI_ERR;}return JNI_VERSION_1_6; //必须返回一个版本号
}

图示:

 

 

Android NDK 开发之 jni 静态注册

 

Android NDK 开发之 jni 静态注册 1:https://www.bilibili.com/video/BV1UE411A7rW?p=42

  • Java 层 调用 C/C++ 层 示例

Android NDK 开发之 jni 静态注册 2:https://www.bilibili.com/video/BV1UE411A7rW?p=43

  • Java 层调用 C/C++ 层,然后从 C/C++ 层调用 Java 层的 普通 字段
  • Java 层调用 C/C++ 层,然后从 C/C++ 层调用 Java 层的 静态 字段
  • Java 层调用 C/C++ 层,然后从 C/C++ 层调用 Java 层的 普通 方法
  • Java 层调用 C/C++ 层,然后从 C/C++ 层调用 Java 层的 静态 方法

 

 

Android NDK 开发之 动态注册 JNI_OnLoad

 

Android NDK 开发之 动态注册:https://www.bilibili.com/video/BV1UE411A7rW?p=44

  • 动态注册

 

JNI 动态注册和静态注册的详解:https://blog.csdn.net/bill_xiao/article/details/89095020

Android:JNI 动态注册和静态注册的详解(附android studio实例):https://blog.csdn.net/qq_37858386/article/details/103765111

Android Studio3.0开发JNI流程------JNI静态注册和动态注册(多个类的native动态注册-经典篇):https://blog.csdn.net/cloverjf/article/details/78878814

Android JNI 函数注册的两种方式(静态注册/动态注册):https://www.jianshu.com/p/1d6ec5068d05

 

 

NDK 开发总结

 

Android NDK 开发总结:bilibili.com/video/BV1UE411A7rW?p=45

  • 静态注册、动态注册、使用 IDA 反编译简单 so 文件

 

回顾:https://www.bilibili.com/video/BV1UE411A7rW?p=46

  • jni.h 文件介绍说明

安装完jdk后就可以在安装目录的 include 目录中找到 jni.h 头文件(示例:C:\Program Files (x86)\Java\jdk1.8.0_261\include)

jni.h 头文件,其实就是 API 文档,里面有一些方法声明、结构体、等图示:

 

  • 静态注册

如果是普通函数,第二个参数是 jobject

如果是静态函数,第二个参数是 jclass

 

  • 动态注册

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学界 | DeepMind等机构提出「图网络」:面向关系推理

来源:机器之心摘要:近日,由 DeepMind、谷歌大脑、MIT 和爱丁堡大学等公司和机构的 27 位科学家共同提交的论文《Relational inductive biases, deep learning, and graph networks》引起了人们的关注。深度学习虽然精于分类,但一直…

ARM 汇编基础教程番外篇 ——配置实验环境

From:https://zhuanlan.zhihu.com/p/29145513 win10 arm 汇编环境 Windows 平台下搭建 ARM 汇编集成环境:https://jingyan.baidu.com/article/4b52d70288bfcdfc5c774ba5.html 要调试 ARM 程序,我们需要: 能运行 ARM 程序的运行环…

asp.net调试方法

1、先将网站设为启动项目。 2、选择“启动选项”。 3、进行设置: 然后调试,在浏览器输入网址,此时如果遇到“断点”程序将自动停止运行,即可进行调试,查看运行中的变量的值。 转载于:https://www.cnblogs.com/gwjtssy/…

基因对智力的预测能力不到7%,别迷信它

图片来源:The Conversation撰文 Carl Zimmer翻译 李杨审校 贾晓璇编辑 魏潇2016 年我在写一本关于遗传的书时,曾对自己的基因组进行了测序。一些科学家还好心地指出了我基因组图谱的一些有趣特征,教我如何自己读取数据。从那以后,…

ARM 汇编语言入门

[翻译]二进制漏洞利用(二)ARM32位汇编下的TCP Bind shell:https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From:ARM汇编语言入门(一):https://zhuanlan.zhihu.com/p/109057983 原文…

图灵奖演讲2018,59页PPT迎接芯片体系结构的新黄金时代

来源: 计算所控制计算实验室6月4日,在今年的国际计算机体系结构大会ISCA2018的图灵奖演讲会上,ACM/IEEE邀请了2017年图灵奖获得者John Hennessy与David Patterson联合进行了一场关于未来计算机体系结构发展道路探索的精彩演讲。二位图灵奖得主…

ARM 指令集 和 Thumb 指令集

From:https://gitee.com/lsliushuang/ASM/blob/master/arm汇编.txt ARM 汇编指令集汇总:https://blog.csdn.net/qq_40531974/article/details/83897559 ARM 指令集详解(超详细!带实例!):https://blog.csdn.net/micke…

花旗银行将因人工智能裁员50%,失业风波究竟要持续多久

来源:ofweek摘要: 在这个人工智能随时可能会取代人类工作的年代里,人们对自己的工作的未来应该去了解和重视,尤其是数字类别的行业,像是会计、税务、收费站是最早被人工智能替代的一批。在这个人工智能随时可能会取代人…

Python 程序的抽样分析器 - Py-Spy

From:https://python.freelycode.com/contribution/detail/1320 GitHub 地址:https://github.com/benfred/py-spy Py-Spy 是 Python 程序的抽样分析器。 它允许您可视化 Python 程序正花费时间在哪部分,而无需重新启动程序或以任何方式修改代…

微观世界探索者:15家值得关注的纳米技术公司

来源:资本实验室摘要:纳米技术就像微观世界的魔术,让人类得以前所未有地深入到物质的分子与原子层面,探索生物、化学、物理等各领域的融合。资本实验室今日投资关注聚焦前沿科技创新与传统产业升级纳米技术就像微观世界的魔术&…

DeepMind新论文:给侧面照片,AI给你脑补出正面

来源:澎湃新闻摘要:大家在学生时代可能都面对过这些涉及空间想象的几何题。从根本上,它们考验的是2D图像和3D场景间的转换能力。如今,人工智能也成功打破了这种“次元壁”。用小立方体搭一个几何体,使它的主视图和俯视…

安卓逆向 和 手游辅助 学习 路线

From:https://zhuanlan.zhihu.com/p/95915254 知乎:Android 逆向分析学习路线?:https://www.zhihu.com/question/25626303 入门篇 --- 学习Android安全和逆向开发的路线总结:https://www.52pojie.cn/thread-1065039-…

可交互的对抗网络如何增强人类创造力?

编译:集智翻译组来源:distill.pub作者:Shan Carter,Michael Nielsen原题:Using Artificial Intelligence to Augment Human Intelligence摘要:计算机不仅可以是解决数学问题的工具,还可以是拥有…

ARM 寄存器 详解

From( ARM 寄存器详解 ):https://blog.csdn.net/sandeldeng/article/details/52954781 ARM 汇编基础教程:2.数据类型和寄存器:https://www.52pojie.cn/thread-797306-1-1.html ARM 的 寄存器 ARM 工作状态 和 工作模式…

让AI个性化而且功耗更低 IBM研发新型神经网络芯片

选自:Singularity Hub编译:网易智能参与:李擎摘要:在GPU上运行的神经网络已经在人工智能领域取得了一些惊人的进步,但这两者的合作还并不完美。IBM的研究人员希望能设计出一种专门用于运行神经网络的新的芯片&#xff…

每日一题——LeetCode888

方法一 个人方法: 交换后要达到相同的数量,那么意味着这个相同的数量就是两个人总数的平均值,假设A总共有4个,B总共有8个,那么最后两个人都要达到6个,如果A的第一盒糖果只有1个,那么B就要给出6…

“真”5G标准出炉!不止是速度,这些难以置信的改变将彻底颠覆你的生活

来源:传球创新论坛摘要:5G时代又离我们近了一大步。6月14上午11时许,3GPP批准了第五代移动通信标准5G NR独立组网(SA)的冻结,这意味着首个完整意义的国际5G标准正式确立。未来,5G技术将成为和电…

写在囧男囧女们的七夕节

写在囧男囧女们的七夕节 当我们发现某些节日已经远离我们时,我们往往会以幽默的方式,让自己无厘头地般地分享节日的快乐 。比如,每年的六月一日,不管童年已经离我们多遥远,见朋友或同事就来上一句“节日快乐”&#xf…

安卓逆向_16 --- ARM 静态分析( 使用 IDA Pro 分析 ARM 汇编【java_ 和 JNI_OnLoad】 )

菜鸟总结 so 分析,arm 汇编,IDA 静态分析:https://www.52pojie.cn/thread-695063-1-1.html JNI 静态注册 so 和 IDA 导入的 JNI.h 文件.zip:https://download.csdn.net/download/freeking101/12571373 ARM 静态分析: …

人脑的前世今生

来源:科学网摘要:人类的神奇常常归结于一个智慧的大脑以及贯穿于其中的无比复杂的神经网络,并认为这源自上帝之手,但其实它并不是无中生有的,而是自然演化的产物,虽然是一个无与伦比的杰作,但人…