运用JNA保护你的遗留代码(一)

Java Native Access (JNA)承诺为Java和遗留代码之间搭建一座桥梁。为什么这点如此重要?首先, JNA避免了修改遗留代码,即便这些代码的改写要求是存在的。

同时,JNA意味着不再需要昂贵的私有的桥接解决方案。后者包括“神秘的史前工具”,就像是代理安 排、硬件编码专有协议等等。所有这些解决方案的趋势是很难预测的,易错以及具有潜在的脆弱因素。 JNA的另一个关键因素是能够有效的取代Java Native Interface (JNI)。

在这篇文章中,我所要探究的代码类型在这个列表一中将会让读者先睹为快。在列表一中,我引用来 自Windows kernel32 DLL 的GetTickCount()程序。自从系统启动,GetTickCount()返回所经过的毫秒的 个数。

public interface CLibrary extends Library {
  CLibrary INSTANCE = (CLibrary)
  Native.loadLibrary((Platform.isWindows() ? "kernel32" : "c"),
   CLibrary.class);
  int GetTickCount();
  }
  public static void main(String[] args) {
  System.out.println("TickCount" + CLibrary.INSTANCE.GetTickCount());
  }

列表一,简单的JNA实例

列表一中真正让人感兴趣的是JNI代码不再被需要。取而代之的是一种来自于Java代码的你可以简单的 称之为DLL的符号。映射和自动生成JNI头文件或者其他难以填满的材料都是不需要的。取代以上做法的是 ,伴随着JNA,简单的下载必须的库,标注兴趣符号,然后引用这些符号。

简而言之,JNA解决方案在任何体制下都可以节省费用。从Java径直访问遗留代码的能力可以排除任何 使用JNI或者改写遗留代码的需求。也许,JNA最好的承诺就是统一代码环境。无论如何,这里还有其它与 JNA有关的话题,这些话题都是关于入侵本机代码环境的。任何一个这样的话题都是围绕Java是否是所谓 的系统语言展开的。

Java:不是一种系统语言?

早期关于Java的一个重要的评论是说Java不是一种系统语言。不像C或者C++,Java生存在JVM内部,并 且不能存取低级别的,机器方面的细节问题。允许这些操作的地方,都是需要经过高级别的API。JVM中孤 立Java的一个关键功能就是保证安全——JVM可能会崩溃,但是它不会致使整个系统瘫痪。

JNA的出现正在潜移默化的改变这些,因为现在Java代码可以存取C风格的结构。列表二显示了Java代 码在Windows kernel32 DLL中通过函数存取数据的另一个例子。

Kernel32 lib = Kernel32.INSTANCE;
  SYSTEMTIME time = new SYSTEMTIME();
   lib.GetSystemTime(time);
  System.out.println("Today's integer value is " + time.wDay);

列表2,kernel32.dll系统时间

列表二中,注意到Java代码有权使用低级别的平台数据。JNI意味着Java具有可以存取系统级别数据的 能力。无论如何,JNA的另一个重要的应用是遗留代码存取,这些遗留代码中存在大量的有商业价值的信 息;举例来说,书写在C/C++中的复杂的数学函数。现在,与其使用JNI,有可能的话还不如直接引用JNA遗 留的函数。换句话说,JNA可以被认为是一种桥接技术。

时间: 2024-08-04 04:53:02

运用JNA保护你的遗留代码(一)的相关文章

运用JNA保护你的遗留代码(二)

从Java中引用DLL代码 列表四演示代码引用DLL函数 public interface CLibrary extends Library { CLibrary INSTANCE1 = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "nativecode" : "c"), CLibrary.class); int helloWorld(int divider); } public static void

浅谈遗留代码的重构

             背景 <重构>诞生至今有近17个年头了,日常开发中大家谈到重构,要么非常随意,认为重构就是改代码:要么非常谨慎,把重构描述成焦油坑,像瘟神一样敬而远之.针对最具挑战性的遗留代码重构,有哪些需要注意的呢? 谈论任何事情,都该有它的上下文.本文谈论的技术背景是大型通信类产品,对于互联网产品不一定适用.另外,本文也不会涉及重构技术,有兴趣读者可以读<重构>或者<Effective Refactoring in C++>. 遗留代码重构决策表 遗留代码

使用组件来保护你的ASP代码(转)

使用组件来保护你的ASP代码   出处: 正文: 以前大家谈了很多有关打开数据库连接安全的问题,现在我再提出一种思路使用ActiveX DLL来保护你的代码.(既可以不用为使用共享的加密软件而发愁,更重要的是可以自己来顶制加密方法了,享受一下"一切尽在掌握之中"的感觉.同时也为了让大家都自己动手来做出自己的组件来.) ActiveX DLLs是被编译过的机器代码,如果没有源项目文件的话是不能够被编译的.这个技术使得开发者有可能开发出公共的自动化程序,并且把它们作为shareware版本

以前收集的一些资料---使用组件技术来保护你的ASP代码

               使用组件来保护你的ASP代码以前大家谈了很多有关打开数据库连接安全的问题,现在我再提出一种思路使用ActiveX DLL来保护你的代码.(既可以不用为使用共享的加密软件而发愁,更重要的是可以自己来顶制加密方法了,享受一下"一切尽在掌握之中"的感觉.同时也为了让大家都自己动手来做出自己的组件来.)ActiveX DLLs是被编译过的机器代码,如果没有源项目文件的话是不能够被编译的.这个技术使得开发者有可能开发出公共的自动化程序,并且把它们作为sharewar

可信前端之路-代码保护

可信前端之路-代码保护 莫念@阿里安全 0x00 前言 在信息安全领域,可信系统(Trusted system)是一个让人心动的目标,它指的是一个通过实施特定的安全策略而达到一定可信程度的系统. 在计算机中,可信平台模块(Trusted Platform Module,TPM)已经投入使用,它符合可信赖计算组织(Trusted Computing Group,TCG)制定的TPM规范,是为了实现可信系统目标的而打造的一款安全芯片.作为可信系统的信任根,TPM是可信计算的核心模块,为计算机安全提供

防逆向技术简史:从代码混淆到虚拟机保护技术

开发软件的人都知道这个世界上没有破解不了的软件,只有不值得破解的软件.换而言之,只有软件的破解成本超过Hacker收益,软件资产才是相对安全的.Android平台以其免费和开源的特性占据了移动应用领域半壁江山,但也因其应用很容易被逆向破解获取源码,导致它成为Hacker最喜欢攻击的一个"靶子". 那么如何才能保护自己开发APP不被逆向破解呢?在道高一尺魔高一丈的网络安全攻防对抗中,防逆向保护技术也在不停更新演进,笔者在这里梳理了几个关键时期的防逆向保护技术,让大家对APP防护有一个更好

深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点_javascript技巧

具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多. 此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档.执行同行评审以及运行JSLint.这些习惯和最佳做法可以帮助你写出更好的,更易于理解和维护的代码,这些代码在几个月或是几年之后再回过头看看也是会觉得很自豪的. 书写可维护的代码(Writing Maintainable Code ) 软件bug的修复是昂贵的,并且

编写高质量JavaScript代码的基本要点_javascript技巧

才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会是件很美妙的事情.具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多. 此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档.执行同行评审以及运行JSLint.这些习惯和最佳做法可以

改进旧代码库的推荐路线:走向可扩展可维护系统的11条经验

每个程序员,项目经理或团队负责人的生命周期中至少发生一次,你接手一坨超过百万行代码的系统,原来的程序员很久以前就离职,现在也许正在某个阳光明媚的地方度假,文档(如果有的话)最有可能的情况就是与现有的系统不同步. 而你的工作则是带领团队脱离这个混乱. 在经历逃离的本能回应之后,您开始对项目进行了了解,公司高层领导是不能容忍项目失败的情况.然而,通过你手头现有的东西,失败是大概率发生的事件.那么该如何应对? 我有幸(或不幸)已经经历过若干次类似的经历,我和一小部分朋友发现,如果能够把这些垃圾代码变成