我試圖做一個自我修改的代碼庫,我已經scowered遍,我有後續代碼:Android的自修改代碼 - NDK
typedef int (*FUNC) (void);
int test();
JNIEXPORT int Java_com_example_untitled_MyActivity_decrypt(JNIEnv* env, jobject thiz)
{
void *code = mmap(NULL, 4, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (code != MAP_FAILED) {
memcpy(code, test, 4);
return ((FUNC)code)();
}
return 0;
}
int test()
{
return 100;
}
請幫助...我用Native self-modifying code on Android爲我的出發點,他們說了一些關於編譯與「-marm」和拇指位...
我遇到的問題是,它只是崩潰。我試過使用cacheflush函數,似乎沒有幫助。我很茫然。
你有什麼問題?代碼的預期行爲和觀察行爲是什麼? (例如,你爲什麼認爲測試的長度正好是4字節?) – addaon
因爲我對ARM進行了反向工程,知道mov r0,100是2個字節,而BX LR是2個字節... :)也驗證了它沒有使用4字節的mov指令。 – Thomas
ARM指令長度爲4個字節... – addaon