Как вызвать функцию JNI Java из MASM - PullRequest
0 голосов
/ 04 ноября 2018

Я пишу простую программу на ассемблере, которая будет вызываться из Java JNI. Я хочу выполнить функцию из JNI, которая согласно документации находится под индексом 187. Пока я выполняю эту строчку:

call qword ptr[rax + 187*8]

Я получаю ошибку нарушения доступа. Что я могу делать неправильно? (Я умножаю индекс на 8 из-за архитектуры x64). Весь код, который я выполняю:

push rdx                  ; save Java array pointer for later use
push rdi                  ; save JNIEnv pointer for later use
push rcx                  ; save array length for later use
mov rsi, rdx              ; set array parameter for GetIntArrayElements
mov rax, [rdi]            ; get location of JNI function table
xor edx, edx              ; set isCopy parameter to false for GetIntArrayElements
call qword ptr[rax + 187*8]
...