我试图在
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)();
- }
- }
问题是这个代码崩溃了.哪里不对?