MASM и Java получают значения из двумерного массива
Я хочу получить первое значение двумерного массива (array[0][0]). Я объявил функцию в Java следующим образом:
public native void function(int[][] array, int width, int height);
Я создаю приложение для Windows x64, поэтому я использую Windows x64 ABI.
После выполнения:
mov env,rcx ; 1st argument
; according to doc 2nd arg. is Java Object so i omitt this variable
mov jArray,r8 ; 3rd argument
mov width, r9 ; 4th argument
mov rbx, qWORD PTR[rsp + 40] ; 5th arg array.length (height)
mov height, rbx ; 5th
mov rax, [rcx] ; get location of JNI function table
mov funTable, rax
mov rdx, r8 ; set second arg as jArray
mov r8, 0 ; set index of row
call qword ptr[rax + 173 * 8] ; invoke GetObjectArrayElement()
mov rbx, rax ; set return value to rbx
mov rcx, env
mov r8, 0 ; paramter isCopy
mov r10, funTable
call qword ptr[r10 + 187 * 8] ; invoke GetIntArrayElements()
После последнего вызова я должен получить правильное значение массива [0] [0], но вместо этого я получаю случайные значения (каждый раз, когда я переопределяю эту функцию). Что я делаю не так (пожалуйста, отметьте мою ошибку - я хочу узнать). Могу добавить, что я искал какую-то документацию / примеры, но безрезультатно.