我想用ndk做一些安全問題的工作。Android從線程調用jni方法錯誤(A/libc:致命信號11(SIGSEGV),代碼1,錯誤地址0xdeadbaad在tid 13620(AsyncTask#3))
my ndk code:
jbyte * buff;
jbyte * result;
jint buff_size = 0;
jint result_size = 0;
jbyte * key = (jbyte *)"HashCode";
jint key_size = 9;
jbyte* ramz(jbyte* s ,jint size_s, jbyte* k, jint size_k)
{
return s;
}
jbyte* dramz(jbyte* s ,jint size_s, jbyte* k, jint size_k)
{
return s;
}
JNIEXPORT void JNICALL Java_com_shabaviz_Server_Server_clear(JNIEnv * env, jclass obj) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "start of clear\n");
if (buff_size > 0)
{
delete[] buff;
}
buff = new jbyte[0];
buff_size = 0;
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "end of clear\n");
}
JNIEXPORT void JNICALL Java_com_shabaviz_Server_Server_addChar(JNIEnv * env, jclass obj, jbyte c_int) {
jbyte *temp = new jbyte[buff_size+1];
for (int i = 0; i < buff_size; ++i)
{
temp[i] = buff[i];
}
temp[buff_size] = c_int;
jbyte * oldbuf = buff;
buff = temp;
delete[] oldbuf;
++buff_size;
}
JNIEXPORT void JNICALL Java_com_shabaviz_Server_Server_ramz(JNIEnv * env, jclass obj) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "start of ramz\n");
if (result_size > 0)
{
delete[] result;
}
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "ramzOOOO\n");
result = ramz(buff, buff_size , key , key_size);
result_size = buff_size;// + 7;
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "end of ramz\n");
}
JNIEXPORT void JNICALL Java_com_shabaviz_Server_Server_dramz(JNIEnv * env, jclass obj) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "start of dramz\n");
if (result_size > 0)
{
delete[] result;
}
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "dramzOOOO\n");
result = dramz(buff, buff_size , key , key_size);
result_size = buff_size;// - 7;
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "end of dramz\n");
}
JNIEXPORT jint JNICALL Java_com_shabaviz_Server_Server_sizeOf(JNIEnv * env, jclass obj) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "start/end of sizeOf\n");
return result_size;
}
JNIEXPORT jbyte JNICALL Java_com_shabaviz_Server_Server_getChar(JNIEnv * env, jclass obj, jint c_int) {
return result[c_int];
}
my java code structure
com.shabaviz.Server.Server.java
public class Server {
static{
System.loadLibrary("hellondk");
}
public synchronized static String sendPost(String url , String json) throws Exception {
.
.
.
byte [] data = newramz(json.getBytes());
.
.
.
return new String(newdramz(responseFromServer));
}
public native static void ramz();
public native static void dramz();
public native static void clear();
public native static void addChar(byte c);
public native static int sizeOf();
public native static byte getChar(int index);
public synchronized static byte[] newramz(byte[] s)
{
clear();
for (int i = 0; i < s.length; ++i)
{
addChar(s[i]);
}
ramz();
byte[] enc = new byte[sizeOf()];
for (int i = 0; i < enc.length; ++i)
{
enc[i] = getChar(i);
}
return enc;
}
public synchronized static byte[] newdramz(byte[] s)
{
clear();
for (int i = 0; i < s.length; ++i)
{
addChar(s[i]);
}
dramz();
byte[] dec = new byte[sizeOf()];
for (int i = 0; i < dec.length; ++i)
{
dec[i] = getChar(i);
}
return dec;
}
MainActivity.java
public class MainActivity extends Activity{
.
.
.
public class Login extends AsyncTask<URL, Integer, Long> {
.
.
.
protected Long doInBackground(URL... urls) {
response = Server.sendPost(url1 , jsonString1);
.
.
.
response2 = Server.sendPost(url2 , jsonString2);
}
}
.
.
.
}
And my problem:
當我android應用程序我看到強制關閉下面的logcat。
08-30 14:46:33.604 15394-15470/com.shabaviz.telegram V/telegramNDK:46:的明確
08-30 14開始33.604 15394-15470/com.shabaviz.telegram V/telegramNDK:清除結束
08-30 14:46:33.604 15394-15470/com.shabaviz.telegram V/telegramNDK:開始ramz
08-30 14:46:33.604 15394-15470/com.shabaviz。電報V /電報NDK:ramzOOOO
08-30 14:46:33.604 15394-15470/com.shabaviz.telegram V/telegramNDK:ramz的結尾
08-30 14:46:33.604 15394-15470/com.shabaviz。電報V /電報NDK:開始/結束大小
08-30 14:46:33.693 15394-15394/com.shabaviz.telegram D/mehdi:oncreatMainActivity
08-30 14:46:33.751 15394-15470/com.shabaviz.telegram V/telegramNDK:開始清除
08-30 14:46:33.751 15394-15470/com.shabaviz.telegram V/telegramNDK:清除結束
08-30 14:46:33.852 15394-15470/com.shabaviz.telegram V/telegramNDK:start dramz
08-30 14:46:33.857 15394-15470/com.shabaviz.telegram V/telegramNDK:dramzOOOO
08-30 14:46:33.857 15394-15470/com.shabaviz.telegram V/telegramNDK:end dramz
08-30 14:46:33.857 15394-15470/com.shabaviz.telegram V/telegramNDK:開始/結束大小
08-30 14:46:33.868 15394-15470/com.shabaviz.telegram V/telegramNDK:開始清除
08-30 14:46:33.868 15394-15470/com.shabaviz.telegram V/telegramNDK:end清除
08-30 14:46:33.869 15394-15470/com.shabaviz.telegram V/telegramNDK:開始ramz
08-30 14:25:31.700 24282-24486/com.shabaviz.telegram A/libc :無效地址或地址損壞的塊0xb9436fa8傳遞給dlfree
08-30 14:25:31.701 24282-24486/com.shabaviz.telegram A/libc:致命信號11(SIGSEGV),代碼1,錯誤地址0xdeadbaad in tid 24486(AsyncTask#3)
我怎樣才能 修理它?