Собственный самомодифицирующийся код на Android

Я пытаюсь создать самомодифицирующийся собственный код на Android и запустить его в эмуляторе. Мой образец основан на примере HelloJNI из файла android-ndk. Выглядит это так:

#define NOPE_LENGTH 4

typedef void (*FUNC) (void);

// 00000be4 <nope>:
//     be4: 46c0        nop         (mov r8, r8)
//     be6: 4770        bx  lr
void nope(void) {
    __asm__ __volatile__ ("nop");
}

void execute(void){
    void *code = mmap(NULL, NOPE_LENGTH, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);

    if (code != MAP_FAILED) {
        memcpy(code, nope, NOPE_LENGTH);

        ((FUNC)code)();
    }
}

Проблема в том, что этот код дает сбой. Что не так?

10
задан Иван 16 December 2010 в 14:23
поделиться