연구 영역
기본 정보
논문·특허
과제
구성원
Article|
·
인용수 3
·2021
JUSTGen: Effective Test Generation for Unspecified JNI Behaviors on JVMs
Sungjae Hwang, Sungho Lee, Ji-Hoon Kim, Sukyoung Ryu
초록

자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 애플리케이션이 네이티브 라이브러리에 접근할 수 있도록 하는 방법이지만, 올바른 JNI 프로그램을 개발하는 일은 어렵다. 네이티브 코드를 활용함으로써, JNI는 자바 개발자가 효율적인 애플리케이션을 구현하고 C 및 C++와 같은 다른 프로그래밍 언어로 작성된 코드를 재사용할 수 있게 한다. 또한 자바의 핵심 라이브러리들은 그래픽 사용자 인터페이스와 같은 시스템 기능을 제공하기 위해 이미 JNI를 사용하고 있다. 그 결과, 많은 주류 자바 가상 머신(Java Virtual Machine, JVM)들이 JNI를 지원한다. 그러나 서로 다른 프로그래밍 언어 간의 복잡한 상호운용 의미론 때문에 올바른 JNI 프로그램을 구현하는 것은 자명하지 않다. 더욱이 성능 오버헤드로 인해 JVM은 기본적으로 오류가 있는 JNI 상호운용을 검증하지 않으며, 디버그 기능인 -Xcheck:jni 옵션이 활성화된 경우에만 이를 검증한다. 따라서 JNI 프로그램의 정확성은 JVM의 -Xcheck:jni 옵션에 의한 검사에 크게 의존한다. 다만, 이 기능이 제공하는 검사의 품질에 대해서는 여전히 의문이 남는다. -Xcheck:jni 옵션이 검증에 실패하는 어떤 성질(프로퍼티)이 있는가? 그렇다면, 그러한 검증의 부재로 인해 어떤 잠재적 문제가 발생할 수 있는가? 우리가 아는 한, 이러한 질문들을 심층적으로 탐구한 연구는 없다. 본 논문에서는 JNI 명세서의 특정되지 않은 코너 케이스(unspecified corner cases)를 사용하여, 주류 JVM들에서 -Xcheck:jni 옵션의 검증 품질과 그 영향(impact)을 경험적으로 연구한다. 이러한 특정되지 않은 경우는 명세서에서 그 의미론이 정의되어 있지 않기 때문에 예기치 않은 런타임 동작을 유발할 수 있다. 체계적인 연구를 위해, 우리는 명세서로부터 특정되지 않은 경우를 식별하고 테스트 프로그램을 생성하기 위한 반자동 접근법인 JUSTGEN을 제안한다. JUSTGEN은 우리의 도메인 특화 언어(DSL)로 작성된 JNI 명세서를 입력으로 받아, SMT 솔버를 사용하여 자동으로 특정되지 않은 경우를 발견한다. 그리고 특정되지 않은 경우의 동작을 유발하는 테스트 프로그램을 생성한다. 생성된 테스트를 사용하여 -Xcheck:jni 옵션의 검증 능력을 경험적으로 평가한다. 우리의 실험 결과에 따르면, JNI 디버그 기능은 JVM에서 수천 개의 특정되지 않은 경우를 검증하지 못하며, 그로 인해 자바 타입 시스템 위반, 메모리 손상(memory corruption)과 같은 치명적인 런타임 오류가 발생할 수 있다. 우리는 해당 JVM 벤더들에 792개의, JVM이 검증하지 않는 특정되지 않은 케이스를 보고했다. 그중 563개 케이스는 수정되었고, 나머지 케이스는 가까운 시일 내에 수정될 예정이다. 본 경험적 연구에 근거하여, JNI 명세서가 누락된 경우들의 의미론을 명확히 명시해야 하며, 디버그 기능은 완전하게 지원되어야 한다고 믿는다.

*본 초록은 AI를 통해 원문을 번역한 내용입니다. 정확한 내용은 하기 원문에서 확인해주세요.

키워드
Computer scienceProgramming languageJavaDebuggingSemantics (computer science)
타입
Article
IF / 인용수
- / 3
게재 연도
2021