MASM和Java从二维数组获取值

时间:2018-11-09 16:51:05

标签: assembly java-native-interface x86-64 masm masm64

我想获取二维数组(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()

在最后一次调用之后,我应该获得array [0] [0]的正确值,但取而代之的是我获得随机值(每次我重新调试此函数)。 我在做什么错(请注明我的错误-我想学习)。 我可能会补充说,我在搜索某种文档/示例,但效果不佳。

0 个答案:

没有答案