我试图在
Android上做一些自我修改的本机代码,并在仿真器中运行它.我的示例是基于来自android-ndk的HelloJNI示例.看起来像这样:
#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)(); } }
问题是这个代码崩溃了.哪里不对?