做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)
原先公司是用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)