상세 컨텐츠

본문 제목

[JAVA] JNI (Java Native Interface)

기술보안/Web

by about_SC 2019. 1. 16. 13:52

본문

1. JNI (Java Native Interface) 란 ? 


- 자바가 다른 언어로 만들어진 어플리케이션과 상호 작용할 수 있는 인터페이스를 제공한다.

- 자바가상머신(JVM)이 원시 메소드(native method)를 적재(locate)하고 수행(invoke)할 수 있도록 한다

- JNI가 자바가상머신내에 포함됨으로써, 자바가상머신이 호스트 운영체제상의 입출력, 그래픽스, 네트워킹, 그리고 스레드와 같은 기능들을 작동하기 위한 로컬시스템호출(local system calls)을 수행할 수 있도록 한다. 


* 쉽게 말해 Java와 다른 언어를 연동하는 솔루션입니다. 



2. Why do you need JNI ?

 

자바 네이티브 메쏘드(Java Native method, 이하 JNI)는 다른 언어로 작성된 코드를 자바에서 호출하도록 만들어진 규약이다. 현재는 C/C++에 대한 호출만을 정확하게 지원한다. 어떻게 보면 JNI는 자바가 만들어진 철학과 정반대되는 것이다. 

그러나. Java에도 한계가 있다.


1. 속도 문제가 있는 계산 루틴 

 > 자바가 Native Code(플랫폼에 종속적인 기계어 코드)에 비해 느리다.


2. 자바에서 하드웨어 제어 


3. 자바에서 지원되지 않은 특정 운영체제 서비스 

 > 자바의 클래스 라이브러리는 방대하고 다양한 서비스를 제공하지만, 특정 플랫폼에서 제공하는 고유의 서비스의 기능을 모두 포함할 수는 없다. 특히, 특수한 목적으로 제작된 하드웨어를 자바에서 제어해야 할 필요가 있다고 한다면, 자바만으로 해결하기는 힘들다. 


4. 기존의 프로그램에서 자바가 제공하는 서비스를 이용 

 > 기존에 작성된 프로그램이나 기존의 시스템(legacy)과의 연계 문제 



3. SAMPLE

Java 소스 파일 : HelloJni_Jsource.java
 

import java.util.*;

class HelloJniClass {
   native void Hello();

  static {  System.loadLibrary("Hello_DLL");   }

  public static void main(String args[]) {    
      HelloJniClass myJNI=new HelloJniClass();
      myJNI.Hello();
   }
}


'기술보안 > Web' 카테고리의 다른 글

test1  (0) 2019.02.06
SQL Injection(order by)  (0) 2019.01.25
[웹공격] 61_포스트 익스플로잇 개요  (0) 2018.11.25
칼리 리눅스 설치 시 이슈사항 정리  (0) 2018.11.25
[웹 공격] 웹 공격 & PHP 공격 실습  (0) 2018.11.18

관련글 더보기