2015-12-08 1 views
1

Je développe une application jailbreaké sur iOS et obtenir errno 22 lorsque vous appelezmprotect errno 22 iOS

mprotect(p, 1024, PROT_READ | PROT_EXEC) 

errno 22 signifie arguments non valides, mais je ne peux pas comprendre ce qui est erroné. J'ai aligné p pour avoir un multiple de taille de page, et j'ai déjà utilisé la mémoire avant d'appeler mprotect.

Voici mon code et un exemple de sortie

#define PAGESIZE 4096 

FILE * pFile; 
pFile = fopen ("log.txt","w"); 

uint32_t code[] = { 
    0xe2800001, // add r0, r0, #1 
    0xe12fff1e, // bx lr 
}; 

fprintf(pFile, "Before Execution\n"); 

p = (uint32_t *)malloc(1024+PAGESIZE-1); 

if (!p) { 
    fprintf(pFile, "Couldn't malloc(1024)"); 
    perror("Couldn't malloc(1024)"); 
    exit(errno); 
} 

fprintf(pFile, "Malloced to %p\n", p); 

p = (uint32_t *)(((uintptr_t)p + PAGESIZE-1) & ~(PAGESIZE-1)); 

fprintf(pFile, "Moved pointer to %p\n", p); 

fprintf(pFile, "Before Compiling\n"); 

// copy instructions to function 
p[0] = code[0]; 
p[1] = code[1]; 

fprintf(pFile, "After Compiling\n"); 

if (mprotect(p, 1024, PROT_READ | PROT_EXEC)) { 
    int err = errno; 
    fprintf(pFile, "Couldn't mprotect2: %i\n", errno); 
    perror("Couldn't mprotect"); 
    exit(errno); 
} 

Et sortie:

Before Execution 
Malloced to 0x13611ec00 
Moved pointer 0x13611f000 
Before Compiling 
After Compiling 
Couldn't mprotect2: 22 

Répondre

0

fixe en utilisant ce posix_memalign(). Il s'avère que je n'alignais pas correctement mon pointeur sur le format de la page