Por el momento estoy con esto: (corriendo como root)
Código
int fp = syscall(SYS_open,"/dev/mem",O_RDWR|O_SYNC,0); printf("ABIERTO\n"); syscall(SYS_lseek,fp,0x70000000,SEEK_SET); syscall(SYS_lseek,fp,0x10000000,SEEK_CUR); syscall(SYS_lseek,fp,inet_bind-0xC0000000+0x80C00000-0x80000000+0xB0,SEEK_CUR); printf("POSICIONADO\n"); ((unsigned int *)&path)[0] = 0xE3A00001; ((unsigned int *)&path)[1] = 0; syscall(SYS_write,fp,path,8); printf("PARCHEADO\n");
Esto me está generando algún kernel panic o algo, porque me reinicia el teléfono... Lo extraño es que, antes de reiniciar, la pantalla queda con "ABIERTO" y no en "POSICIONADO"... Sin embargo:
Código
int fp = syscall(SYS_open,"/dev/mem",O_RDWR|O_SYNC,0); printf("ABIERTO\n"); syscall(SYS_lseek,fp,0x70000000,SEEK_SET); syscall(SYS_lseek,fp,0x10000000,SEEK_CUR); syscall(SYS_lseek,fp,inet_bind-0xC0000000+0x80C00000-0x80000000+0xB0,SEEK_CUR); printf("POSICIONADO\n"); syscall(SYS_read,fp,path,8); printf("LEIDO 0x%08X 0x%08X\n",((unsigned int *)&path)[0],((unsigned int *)&path)[1]);
Devuelve correctamente los bytecodes que necesito parchear.. O sea, la posición de memoria es la correcta...
Con kmem, es exactamente igual...
Vi muchos ejemplos en google y son parecidos a este... Pero, por supuesto, ami no me funciona...
Quería consultar, si alguien conoce del asunto y que me pueda dar una mano...
Gracias y Salu2