Сбой при доступе к JRE, вызванный JNA - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь получить информацию о версии для .exe, используя Version.dll и JNA.

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.W32APIOptions;

/**
 *
 * @author geverding
 */
public interface Version extends Library {

Version INSTANCE = (Version) Native.loadLibrary("Version", Version.class, W32APIOptions.UNICODE_OPTIONS);

public int GetFileVersionInfoSizeW(String lptstrFilename);

public int GetFileVersionInfo(String lptstrFilename, int dwHandle, int dwLen, PointerByReference lpData);

public int VerQueryValue(PointerByReference pBlock, String lpSubBlock, PointerByReference lplpBuffer, IntByReference puLen);

}

... в основном методе

int dwlen = Version.INSTANCE.GetFileVersionInfoSizeW("C:\\Test\\VNCSetup.EXE");

В этот момент JRE выдает исключение

#

В среде выполнения Java обнаружена фатальная ошибка:

#

EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc = 0x000007fefc6e14ff,

pid = 3884, tid = 2248 #

JRE версия: 6.0_26-b03

Java VM: 64-разрядная серверная виртуальная машина Java HotSpot (TM) (смешанный режим 20.1-b02

windows-amd64 сжатый упс)

Проблемная рамка:

C [Version.dll + 0x14ff]

#

Если вы хотите отправить отчет об ошибке, посетите:

http://java.sun.com/webapps/bugreport/crash.jsp

Сбой произошел за пределами виртуальной машины Java в собственном коде.

См. Проблемный кадр, где сообщить об ошибке.

#

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

Текущий поток (0x000000000054c000): JavaThread "main" [_thread_in_native, id = 2248, стек (0x00000000024e0000,0x00000000025e0000)] * 1 045 *

siginfo: ExceptionCode = 0xc0000005, адрес записи 0x00000001800161ca

Регистры: RAX = 0x00000000025df4d8, RBX = 0x000000009c2e9678, RCX = 0x0000000000000001, RDX = 0x000000000774fda0 RSP = 0x00000000025df330, RBP = 0x00000000025df3b0, RSI = 0x000000009c0a4258, RDI = 0x0000000000000001 R8 = 0x00000001800161ca, R9 = 0x000000006da78189, R10 = 0x00000000025f79b2, R11 = 0x00000000025df380 R12 = 0x000000000774fda0, R13 = 0x000000009c2e9678, R14 = 0x00000000025df758, R15 = 0x000000000054c000 RIP = 0x000007fefc6e14ff, EFLAGS = 0x0000000000010206

Верх стека: (sp = 0x00000000025df330) 0x00000000025df330:
00000000025df388 00000000025df4d8 0x00000000025df340:
0000000000000008 cccccccccccccccc 0x00000000025df350:
00000000025df478 00000001800161e1 0x00000000025df360:
0000000000000000 00000000025df478 0x00000000025df370:
000000009c0a4258 0000000180016213 0x00000000025df380:
000000009c2e9678 00000001800161ca 0x00000000025df390:
0000000000540000 000000006da78189 0x00000000025df3a0:
00000000025f2cd6 000000000000000a 0x00000000025df3b0:
00000000025df380 000000006da7c399 0x00000000025df3c0:
00000000025df400 000000018000ec6a 0x00000000025df3d0:
000000018000e580 00000000025df408 0x00000000025df3e0:
0000000000000028 000000000000000a 0x00000000025df3f0:
00000000025df680 000007fefc6e15fc 0x00000000025df400:
cccccccccccccccc 00000000025df510 0x00000000025df410:
00000000025df680 00000000025df4c0 0x00000000025df420:
cccccccccccccccc cccccccccccccccc

Инструкции: (pc = 0x000007fefc6e14ff) 0x000007fefc6e14df: c3 90 90 90 90 90 90 90 90 48 89 5c 24 08 56 57 0x000007fefc6e14ef: 41 54 48 83 ec 30 4c 8b e2 8b f9 4d 85 c0 74 04 0x000007fefc6e14ff: 41 83 20 00 b9 01 00 00 00 ff 15 c2 4b 00 00 8b 0x000007fefc6e150f: d8 89 44 24 60 33 d2 44 8d 42 22 49 8b cc ff 15

Регистрация в отображении памяти:

RAX = 0x00000000025df4d8 указывает в стек для потока: 0x000000000054c000 RBX = 0x000000009c2e9678 является oop {метод} - klass: {другой класс} RCX = 0x0000000000000001 - неизвестное значение RDX = 0x000000000774fda0 - неизвестное значение RSP = 0x00000000025df330 - указывающий в стек для потока: 0x000000000054c000 RBP = 0x00000000025df3b0 указывает на стек для потока: 0x000000000054c000 RSI = 0x000000009c0a4258 - это oop {экземплярный класс} - klass: {другой класс} RDI = 0x0000000000000001 - неизвестное значение R8 = 0x00000001800161ca является неизвестным значением R9 = 0x000000006da78189 является неизвестное значение R10 = 0x00000000025f79b2 - метод кодирования интерпретатора точка входа (род = родной) [0x00000000025f74c0, 0x00000000025f8380]3776 байт R11 = 0x00000000025df380 указывает в стек для поток: 0x000000000054c000 R12 = 0x000000000774fda0 является неизвестным значением R13 = 0x000000009c2e9678 является oop {метод} - klass: {другой класс} R14 = 0x00000000025df758 указывает на стек для потока: 0x000000000054c000 R15 = 0x000000000054c000 является нить

Стек: [0x00000000024e0000,0x00000000025e0000], sp = 0x00000000025df330, свободное пространство = 1020k Собственные кадры: (J = скомпилировано Код Java, j = интерпретированный, Vv = код VM, C = собственный код) C [Version.dll + 0x14ff] GetFileVersionInfoSizeExW + 0x17

фреймы Java: (J = скомпилированный код Java, j = интерпретированный, Vv = код VM) j com.sun.jna.Native.invokeInt (JI [Ljava / lang / Object;) I + 0 j com.sun.jna.Function.invoke ([Ljava / языки / объекта; Ljava / языки / Класс Z) Ljava / языки / объекта; +333 J com.sun.jna.Function.invoke (Ljava / языки / Класс; [Ljava / языки / объект; Ljava / Util / Карта;) Ljava / языки / объект; +214 J com.sun.jna.Library $ Handler.invoke (Ljava / языки / объект; Ljava / языки / отражение / Метод; [Ljava / языки / объект;) Ljava / языки / объект; +341 j $ Proxy0.GetFileVersionInfoSize (Ljava / lang / String;) I + 16 j windowsversion.WindowsVersion.main ([Ljava / lang / String;) V + 26 v ~ StubRoutines :: call_stub

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

Потоки Java: (=> текущий поток) 0x0000000006463800 JavaThread Демон "Low Memory Detector" [_thread_blocked, id = 2284, стек (0x0000000006d00000,0x0000000006e00000)] 0x000000000645f800 JavaThread "C2 CompilerThread1" демон [_thread_blocked, id = 3808, стек (0x0000000006c00000,0x0000000006d00000)] 0x000000000645e000 JavaThread "C2 CompilerThread0" демон [_thread_blocked, id = 3780, стек (0x0000000006b00000,0x0000000006c00000)] 0x000000000644d000 Демон JavaThread "JDWP Command Reader" [_thread_in_native, id = 2944, стек (0x0000000006a00000,0x0000000006b00000)] 0x0000000006449800 JavaThread "JDWP Event Helper Thread" демон [_thread_blocked, id = 744, стек (0x0000000006900000,0x0000000006a00000)] 0x0000000006443800 JavaThread "JDWP Transport Listener: dt_shmem" демон [_thread_blocked, id = 3336, стек (0x0000000006800000,0x0000000006900000)] 0x0000000000525000 JavaThread "Attach Listener" демон [_thread_blocked, id = 3244, стек (0x0000000006700000,0x0000000006800000)] 0x0000000000524800 JavaThread "Signal Dispatcher" демон [_thread_blocked, id = 1784, стек (0x0000000006600000,0x0000000006700000)] 0x000000000050c000 JavaThread "Finalizer" демон [_thread_blocked, id = 3652, стек (0x0000000006300000,0x0000000006400000)] 0x0000000000508800 JavaThread "Reference Handler" демон [_thread_blocked, id = 2216, Стек (0x0000000006200000,0x0000000006300000)] => 0x000000000054c000 JavaThread "main" [_thread_in_native, id = 2248, стек (0x00000000024e0000,0x00000000025e0000)] * * тысяча восемьдесят-одна

Другие темы: 0x0000000000502000 VMThread [стек: 0x0000000006100000,0x0000000006200000] [id = 3596] 0x0000000006480000 WatcherThread [стек: 0x0000000006e00000,0x0000000006f00000] [id = 3156]

Состояние виртуальной машины: не в безопасной точке (нормальное выполнение)

VM Mutex / Monitor в настоящее время принадлежит потоку: нет

Куча PSYoungGen всего 28352K, использовано 2499K [0x00000000e0600000, 0x00000000e25a0000, 0x0000000100000000) Eden Space 24320K, используется 10% [0x00000000e0600000,0x00000000e0870f18,0x00000000e1dc0000) из пространство 4032K, 0% использовано [0x00000000e21b0000,0x00000000e21b0000,0x00000000e25a0000) до
пространство 4032K, 0% использовано [0x00000000e1dc0000,0x00000000e1dc0000,0x00000000e21b0000) PSOldGen
всего 64768 КБ, использовано 0 КБ [0x00000000a1200000, 0x00000000a5140000, 0x00000000e0600000) пространство объекта 64768K, 0% использовано [0x00000000a1200000,0x00000000a1200000,0x00000000a5140000) PSPermGen всего 21248K, использовано 4506K [0x000000009c000000, 0x000000009d4c0000, 0x00000000a1200000) пространство объекта 21248K, использовано 21% [0x000000009c000000,0x000000009c466a90,0x000000009d4c0000)

Код Cache [0x00000000025e0000, 0x0000000002850000, 0x00000000055e0000) total_blobs = 191 nmethods = 7 адаптерами = 146 free_code_cache = 49918592 largest_free_block = 8704

1094 * Динамические библиотеки: 0x0000000000400000 - 0x000000000042e000 C: \ Program Files \ Java \ jdk1.6.0_26 \ Bin \ java.exe 0x0000000077620000 - 0x00000000777cc000 C: \ Windows \ System32 \ ntdll.dll 0x0000000077500000 - 0x000000007761f000 C: \ Windows \ system32 \ kernel32.dll 0x000007fefd840000 - 0x000007fefd8ab000 C: \ Windows \ system32 \ KERNELBASE.dll 0x000007fefdb70000 - 0x000007fefdc4b000 C: \ Windows \ system32 \ ADVAPI32.dll 0x000007feff5c0000 - 0x000007feff65f000 C: \ Windows \ system32 \ msvcrt.dll 0x000007feff5a0000 - 0x000007feff5bf000 C: \ Windows \ SYSTEM32 \ sechost.dll 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000x000000006e048000 C: \ Program Files \ Java \ jdk1.6.0_26 \ jre \ bin \ server \ jvm.dll 0x0000000077400000 - 0x00000000774fa000 C: \ Windows \ system32 \ USER32.dll 0x000007feff8c0000 - 0x000007feff927000 C:\ Windows \ system32 \ GDI32.dll 0x000007feff3b0000 - 0x000007feff3be000 C: \ Windows \ system32 \ LPK.dll 0x000007fefd970000 - 0x000007fefda3a000 C: \ Windows \ system32 \ USP10.dll 0x000007fefb090000 - 0x0000e0000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C: \ Windows \ system32 \ IMM32.DLL 0x000007feff2a0000 - 0x000007feff3a9000 C: \ Windows \ system32 \ MSCTF.dll 0x000000006d800000 - 0x000000006d80e000 C: \ Program Files \ Java \ jdk1.6.0_26 \ jre \ bin000000000000000000000000000000000000000000000000000000000000000000: \ Program Files \ Java \ jdk1.6.0_26 \ jre \ bin \ java.dll 0x00000000777f0000 - 0x00000000777f7000 C: \ Windows \ system32 \ PSAPI.DLL 0x000000006d4c0000 - 0x000000006d4f4000 C: \ Program Files \ Java \ jd6.6.6bin \ jdwp.dll 0x000000006d6d0000 - 0x000000006d6d8000 C: \ Program Files \ Java \ jdk1.6.0_26 \ jre \ bin \ npt.dll 0x000000006d850000 - 0x000000006d862000 C: \ Program Files \ Java \ jdk1.6.0_26dll 0x000000006d300000 - 0x000000006d30a000 C: \ Program Files \ Java \ jdk1.6.0_26 \ jre \ bin \ dt_shmem.dll 0x000007fefce50000 - 0x000007fefce67000 C: \ Windows \ system32 \ CRYPTSP.dll 0x000007fefcb50000 - 0x000007fefcb97000 C: \ Windows \ system32 \ rsaenh.dll 0x000007fefc8b0000 - 0x000007fefc \ \ \ \ \ 2000 \ fff2 800_003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_000000000000000000000000-x300-C30000000000000000000000000000000000-x300 всех мобильных ферм.dll 0x000007fefd4b0000 - 0x000007fefd4bf000 C: \ Windows \ system32 \ CRYPTBASE.dll 0x000000006d6a0000 - 0x000000006d6b7000 C: \ Program Files \ Java \ jdk1.6.0_26 \ jre \ bin \ net.dll 0320000002: 03200000000dll 0x000007feff810000 - 0x000007feff818000 C: \ Windows \ system32 \ NSI.dll 0x000007fefcdf0000 - 0x000007fefce44000 C: \ Windows \ system32 \ mswsock.dll 0x000007fefcde0000 - 0x000007fefcde0000 \ 2000 0 000 system.000e: 800xf2000e: 800xf2: 800f0: 800f0: факсфаксиNLAapi.dll 0x000007fefcc70000 - 0x000007fefcccb000 C: \ Windows \ system32 \ DNSAPI.dll 0x000007fef4a70000 - 0x000007fef4a7b000 C: \ Windows \ System32 \ winrnr.dll 0x000007fef4a50000 - 0x000003: 4000x000000: C40000002 \ napinsp.dll 0x000007fef4a30000 - 0x000007fef4a49000 C: \ Windows \ system32 \ pnrpnsp.dll 0x000007fefc7b0000 - 0x000007fefc7b7000 C: \ Windows \ System32 \ wshtcpip.dll 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_000000000000000000000000000000000000000000000000000000000000_0000000_0000000000000000_000000000000_00000000000000000000000000000000000000000000 (0x1)Windows \ system32 \ WINNSI.DLL 0x000007fef4b50000 - 0x000007fef4b58000 C: \ Windows \ system32 \ rasadhlp.dll 0x000007fefb2e0000 - 0x000007fefb333000 C: \ Windows \ System32 \ fwpuclnt.dll 0x0000000180000000 - 0x0000000180037000 C: \ Users \ geverding \ AppData \ Local \ Temp \ jna7891581094505694184.dll 0x000007fefc6e0000 - 0x000007fefc6ec000 C: \ Windows \ system32 \ Version.dll

Аргументы виртуальной машины: jvm_args: -Xdebug -Xrunjdwp: transport = dt_shmem, address = javadebug -Dfile.encoding = UFTjava_command: windowsversion.WindowsVersion Launcher Тип: SUN_STANDARD

Переменные среды: PATH = C: \ Windows \ system32; C: \ Windows, C: \ Windows \ System32 \ Wbem; C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Файлы (x86) \ Microsoft SQL Server \ 90 \ Tools \ binn \; C: \ Program Files (X86) \ WinMerge; C: \ Program Файлы \ SlikSvn \ Bin \; C: \ Windows \ system32; C: \ Windows, C: \ Windows \ System32 \ Wbem; C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Файлы (x86) \ Microsoft SQL Server \ 90 \ Tools \ binn \; C: \ Program Files (X86) \ WinMerge; C: \ Windows \ system32; C: \ Windows, C: \ Windows \ System32 \ Wbem; C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Файлы (x86) \ Microsoft SQL Server \ 90 \ Tools \ binn \; C: \ Program Files (x86) \ WinMerge; C: \ Program Files (x86) \ CVSNT; C: \ Program Файлы \ WinRar; C: \ Program Files \ WinRar; C: \ ProgramFiles \ SlikSvn \ bin USERNAME = управляющая ОС = Windows_NT PROCESSOR_IDENTIFIER = Intel64 Family 6 Модель 15, степпинг 6, GenuineIntel

--------------- S Y S T E M ---------------

ОС: Windows 7 Build 7600

Процессор: всего 2 (2 ядра на процессор, 1 поток на ядро), семейство 6, модель 15 степпинг 6, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3

Память: страница 4 КБ, физическая 6216888 КБ (3835956 КБ), подкачка 12431876 КБ (9888884 КБ бесплатно)

vm_info: виртуальная машина 64-разрядного сервера Java HotSpot (TM) (20.1-b02) для windows-amd64 JRE (1.6.0_26-b03), построен 4 мая 2011 г. 07:15:24 by "java_re" с MS VC ++ 8.0 (VS2005)

время: ср. 03 августа 11:33:47 2011 истекшее время: 8 секунд

У кого-нибудь есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 11 декабря 2011

Если это библиотека MS, вам нужно извлечь из StdCallLibrary или добавить OPTION_CALLING_CONVENTION => STDCALL_CONVENTION к опциям, передаваемым вашей загрузке библиотеки.

Если вы позвоните с неправильным соглашением о вызовах, вы, скорее всего, выйдете из строя на виртуальной машине.

...