MASM и Java получают значения из двумерного массива - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу получить первое значение двумерного массива (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], но вместо этого я получаю случайные значения (каждый раз, когда я переопределяю эту функцию). Что я делаю не так (пожалуйста, отметьте мою ошибку - я хочу узнать). Могу добавить, что я искал какую-то документацию / примеры, но безрезультатно.

...