在开发中部分关键代码是在 NDK 中处理的,但是前段时间我们在线上日志中发现有少量的日志报错。通过排查我们发现问题出现在 NDK 的
ReleaseStringUTFChars
函数上。虽然找到了解决办法,但是我还是没有分析出具体的问题在哪。
传送门:NDK开发-ReleaseStringUTFChars调用的坑
0x00 问题描述
出于安全考虑我们会把部分关键的代码用 NKD 开发,加大被逆向的难度。但是可能是自己水平还不够,实际开发中会发现其实 NDK 开发还是有很多坑。
出现问题的函数处理流程其实很简单,接收 JAVA String 变量,对其进行简单的处理,然后返回。
示例代码:
NIEXPORT jstring JNICALL Java_cn_sdk_NativeEncode_getHello
(JNIEnv *env, jclass object, jstring j_data, jstring j_key) {
//提取data key
const char *c_data = env->GetStringUTFChars(j_data, 0);
const char *c_key = env->GetStringUTFChars(j_key, 0);
//计算长度
int len_data = strlen(c_data);
int len_key = strlen(c_key);
//拷贝到cc_data cc_key
char cc_data[len_data];
char cc_key[len_key];
strcpy(c