通过JNI调C库连接密码卡导致JVM崩溃的记录(一)

本文记录了通过JNI调用C库连接密码卡时遇到的JVM崩溃问题。当尝试无包名直接调用加密卡函数时,JVM出现异常访问错误。在加入包名并重新编译后,问题依旧存在,错误位置转移到了设备管理类函数。错误日志显示为0xc0000005的访问违规。目前问题待解决。
摘要由CSDN通过智能技术生成
做JCE的项目,需要为客户提供可连接密码机的第三方安全提供者包。
原先公司是用C库连接密码机,先要求提供JCE的支持,需要用到JNI来改造C库。
有现成的JNI调用。但是具体的实现类没有加包名,在JCE的替他类中就无法调用,加包名会出现JVM崩溃错误。先将各种错误记录如下:

1.无包名连接加密卡运行结果:
[img]http://dl.iteye.com/upload/attachment/478647/b9b611ae-8db0-35d1-b4ef-d637cc7ef6ea.jpg[/img]
[color=red]运行到其他相关函数时JVM崩溃。生成hs_err_pid3848.log 日志,内容入下:[/color]
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c930ef4, pid=3848, tid=3992
#
# Java VM: Java HotSpot(TM) Client VM (11.0-b15 mixed mode, sharing windows-x86)
# Problematic frame:
# C [ntdll.dll+0x10ef4]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#

--------------- T H R E A D ---------------

Current thread (0x00846c00): JavaThread "main" [_thread_in_vm, id=3992, stack(0x008e0000,0x00930000)]

siginfo: ExceptionCode=0xc0000005, reading address 0xfffffff8

Registers:
EAX=0x00000000, EBX=0x00840000, ECX=0x00000000, EDX=0x00000000
ESP=0x0092f524, EBP=0x0092f744, ESI=0xfffffff8, EDI=0x00000003
EIP=0x7c930ef4, EFLAGS=0x00010206

Top of Stack: (sp=0x0092f524)
0x0092f524: 0000000c 0000000c 00000000 00000000
0x0092f534: 0092f568 00840000 7c930222 00000005
0x0092f544: 0092f578 00840000 7c930222 00000006
0x0092f554: 0092f588 00840000 7c930222 00000007
0x0092f564: 008407d8 00840000 02b22b90 0092f560
0x0092f574: ffffffff 0092f7a4 7c92e920 7c930228
0x0092f584: ffffffff 7c930222 7c93019b 7c9301db
0x0092f594: 0000002c 0000002c 0000002c 00000000

Instructions: (pc=0x7c930ef4)
0x7c930ee4: 94 39 45 d8 0f 84 3e 0a 00 00 8d 70 f8 89 75 c8
0x7c930ef4: 0f b7 0e 3b cf 72 e5 56 ff 75 e4 e8 80 f7 ff ff


Stack: [0x008e0000,0x00930000], sp=0x0092f524, free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [ntdll.dll+0x10ef4]
C [msvcr71.dll+0x16b3]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j SkyJavaAPI.RsaEncrypt_Ex(I[BI[B[I)I+0
j JavaTest.SkyOtherTest()V+280
j JavaTest.main([Ljava/lang/String;)V+37
v ~StubRoutines::call_stub

--------------- P R O C E S S ---------------

Java Threads: ( => current thread )
0x02b11400 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=3580, stack(0x02d80000,0x02dd0000)]
0x02b0c400 JavaThread "CompilerThread0" daemon [_thread_blocked, id=3904, stack(0x02d30000,0x02d80000)]
0x02b07800 JavaThread "Attach Listener" daemon [_thread_blocked, id=2716, stack(0x02ce0000,0x02d30000)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值