一、目标

一、目标

这次的报错是get_byte_array_elements

/androidemu/java/jni_env.py", line 1492, in get_byte_array_elements
    raise NotImplementedError()
NotImplementedError

二、步骤

这个方法作者没有实现,我们先google一下 GetByteArrayElements 函数的作用

参考文章 https://blog.csdn.net/brooknew/article/details/7583721

它的作用是将jbyteArray转成jbyte指针,参数有2个,jbyteArray对象和一个bool型的变量, 还得熟练参考android源代码:(

GetByteArrayElements和ReleaseByteArrayElements是成对出现的,我们实现如下:

def get_byte_array_elements(self, mu, env,array_idx,isCopy):
    logger.debug("JNIEnv->get_byte_array_elements (%d,%d) was called ", array_idx,isCopy)
    obj = self.get_local_reference(array_idx)


    if not isinstance(obj,jbyteArray):
        raise ValueError("Expected a jbyteArray")

    data_ptr = self._emu.native_memory.allocate(len(obj.value))

    mu.mem_write(data_ptr,bytes(obj.value))

    return data_ptr

@native_method
def release_byte_array_elements(self, mu, env,jbArr,jb_ptr):
        logger.debug("JNIEnv->release_byte_array_elements was called")
        self._emu.native_memory.free(jb_ptr)

继续跑,成功跑过去…… 明天继续

三、总结

补齐jni函数有下面三个方法

  • google 看看有没有别的兄弟已经实现了
  • 参考aosp(Android Open Source Project),这需要有个好一点的源代码阅读器
  • 参考unidbg,unidbg在jni函数的实现上比较努力,比AndroidNativeEmu要完善的多
100

关注微信公众号,最新技术干货实时推送

100