Jimmy's Blog

Java Native Interface
Android

(转载)Android逆向工程相关工具集合

  当你拿到Android手机的卡刷包/线刷包,你有没有想过解开它?当你眼前摆着一个APK/jar/so,你有没有想过反编译/反汇编/动态调试然后分析研究它?…… 刷机包 sparse img -> ext4 img 线刷包里面找到system.img/vendor.img [crayon-62bccdc1d0dc4999281990/] 使用Android源码编译得到out/host/linux-x86/bin/simg2img即可将Android的sparse image转为ext4的ima…

2019-09-05 8条评论 2201点热度 1人点赞 jimmychen 阅读全文
Android

(原创)在JNI(Native)层调用Android的Log系统

  最近在用Android Studio写JNI程序,发现在写Native层C++代码时貌似没有特别好的打印Log的方法,所以就有了这一篇,这一篇主要是通过查找、记录Android层面的Log方法,然后在Native层进行调用,达到打印Log的效果。下面直接将源码贴上,源码也比较简单,供大家参考 ThrowException.h   这个类是一个辅助类,当找不到对应类、方法或者字段的时候可以直接调用这个这个方法的类来抛出异常。后续如果可以扩充这个类来完善异常抛出 [crayo…

2018-10-29 0条评论 1998点热度 1人点赞 jimmychen 阅读全文
JNI编程指南与规范

(译文) JNI编程指南与规范 第十一章 JNI设计概述

第十一章 JNI设计概述 本章给出了JNI设计的概述,必要时,我们也提供底层技术的动机。设计概述作为关键JNI概念(如JNIEnv接口指针,本地和全局引用以及字段和方法ID)的规范。技术动机旨在帮助读者了解各种设计的权衡。有几次,我们将讨论如何实现某些功能。这种讨论的目的不是提出一个实际的实施策略,而是要澄清微妙的语义问题。   桥接不同语言的编程接口的概念并不新鲜。例如,C程序通常可以调用用FORTRAN和汇编语言编写的函数。同样,编程语言(如LISP和Smalltalk)的实现也支持各种外部…

2017-11-15 0条评论 2131点热度 1人点赞 jimmychen 阅读全文
JNI编程指南与规范

(译文) JNI编程指南与规范 第十章 陷阱与缺陷

第十章 陷阱与缺陷 为了突显前面几章中介绍的重要技术,本章涵盖了JNI程序员长犯的一些错误。这里描述的每个错误都发生在现实世界的项目中。 10.1 错误检查 编写本地方法最常见的错误是忘记检查是否发生了错误情况。与Java编程语言不同,本地语言不提供标准的异常机制。JNI不依赖于任何特定的本地异常机制(例如C++异常)。因此,在执行每一个可能会引起异常的调用后,程序员都需要执行显式检查。并不是所有的JNI函数都会引起异常,但是大多数都可以检查。异常检测是单调的,但是为了确保使用本地方法的应用程序的健壮性,确实有必须…

2017-11-15 0条评论 1518点热度 0人点赞 jimmychen 阅读全文
JNI编程指南与规范

(译文) JNI编程指南与规范 第九章 利用现有的本地库

第九章 利用现有的本地库 JNI的一个应用就是利用已存在的本地库中现有的代码来编写本地方法。本章介绍的一个典型方法是生成一个封装了一系列本地方法的类库。   本章首先介绍编写包装类最直接的方法--一对一映射。然后我们介绍一项技术,共享桩,来简化编写封装类的任务。   一对一映射和共享桩都是封装本地方法的技术。在本章的最后,我们还将讨论如何使用peer类来封装本地数据结构。   本章中描述的方法直接使用本地方法公开本地库,因此具有使得调用这种本地方法的应用程…

2017-11-15 0条评论 1597点热度 0人点赞 jimmychen 阅读全文
JNI编程指南与规范

(译文) JNI编程指南与规范 第八章 附加的JNI特性

第八章 附加的JNI特性 我们已经讨论过用于编写本地代码的和在本地程序中嵌入一个Java虚拟机实现的JNI特性。这一章我们将介绍剩余的JNI特性。 8.1 JNI和线程 Java虚拟机支持在同一地址空间中同时执行的多个控制线程。这种并发性引入了一定程度的复杂性,这个在单线程环境中是没有的。多线程可以同时访问同一个对象,同一个文件描述符(简称相同的共享资源)。   为了充分利用本节,你应该熟悉多线程编程的概念。你应该知道如何编写使用多线程以及如何同步访问共享资源的Java应用程序。关于Java编程…

2017-11-15 0条评论 1542点热度 0人点赞 jimmychen 阅读全文
JNI编程指南与规范

(原创) JNI编程指南与规范 第七章 刻意练习

第七章之刻意练习 练习1: 学会在C代码中创建虚拟机,复习类、方法ID的查找 在native侧,使用random函数生成一个包含1000个整型的数组,然后在native侧调用Java编程语言中的Arrays.sort(int [])方法对数组进行排序,然后打印数组的前100个数。 ** 下面是博主自己写的答案 ** 首先直接给上代码 [crayon-62bccdc1d7234416959164/] 上面的代码主要是学会在C程序中创建JavaVM以及调用Java编程语言中的方法。自己写过一两次应该也就会了。然后就是编…

2017-11-13 0条评论 2881点热度 1人点赞 jimmychen 阅读全文
JNI编程指南与规范

(译文) JNI编程指南与规范 第七章 调用接口

第七章:调用接口 这一章用于说明在你的本地代码中如何嵌入一个Java虚拟机。Java虚拟机实现通过作为一个本地库来传输,本地应用程序可以连接此库并使用调用接口来加载Java虚拟机。的确,在JDK或Java 2 SDK版本中的标准启动器指令只不过是一个和Java虚拟机链接的简单c程序。启动器解析命令行参数、加载虚拟机、并通过调用借口运行Java程序。 7.1 创建Java虚拟机 为了说明调用借口,让我们先看一个加载一个Java虚拟机并调用按照如下定义的Prog.main方法的C程序 [crayon-62bccdc1d…

2017-11-13 0条评论 1285点热度 0人点赞 jimmychen 阅读全文
JNI编程指南与规范

(原创) JNI编程指南与规范 第六章 刻意练习

第六章之刻意练习   经过第六章的学习,基本了解JNI的异常处理了,现在我们来刻意练习一下 practice 1, 在native层获取Java异常并将异常抛出给Java层 我们需要在native方法中实现除法,除法的除数是不能为零的,所以如果Java在调用native方法的除法时,穿进去的第二个参数为0的话,我们就要抛出一个 java.lang.ArithmeticExpection:/by zero的异常到Java空间中,然后再Java空间中处理这个异常。Java侧的工作就比较简单了,我们只…

2017-11-13 0条评论 1642点热度 1人点赞 jimmychen 阅读全文
JNI编程指南与规范

(译文) JNI编程指南与规范 第六章 异常

第六章 异常   我们已经遇到大量在本地代码中需要检查执行JNI方法后可能产生的错误。这一章将介绍本地代码如何从这些错误状况中检测和修复。   我们将会重点关注作为JNI函数调用的结果发生的错误,而不是在本地代码中发生的任意错误。如果一个本地方法进行了操作系统调用,则只需要按照文档说明的方式来检查系统调用中可能发生的错误。另一方面,如果本地方法想Java API方法进行回调,则必须按照本章中描述的步骤来正确的检查和修复方法执行期间可能产生的异常。 6.1 概述 我们通过一些列…

2017-11-12 0条评论 1870点热度 0人点赞 jimmychen 阅读全文
12
分类
  • Android / 45篇
  • ART虚拟机 / 7篇
  • Binder / 9篇
  • C/C++ / 10篇
  • JNI编程指南与规范 / 18篇
  • Linux / 12篇
  • SQL数据库 / 10篇
  • SurfaceFlinger / 10篇
  • 再战C Primer Plus / 14篇
  • 再战C++ Primer Plus / 14篇
  • 网络编程 / 4篇
Adsense

COPYRIGHT © 2022 Jimmy's Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang