Pour une bibliothèque de threads à levier utilisateur, j'ai besoin de sauter à une fonction en modifiant la valeur du PC stockée dans jmp_buf.Modification d'un PC dans jmp_buf pour passer à une autre fonction
Voici ce que je l'ai écrit:
jmp_buf env;
void print (void) {
printf("\nHello World!");
}
static int ptr_mangle(int p) {
unsigned int ret;
asm(" movl %1, %%eax;\n"
" xorl %%gs:0x18, %%eax;"
" roll $0x9, %%eax;"
" movl %%eax, %0;"
: "=r"(ret)
: "r"(p)
: "%eax"
);
return ret;
}
int main() {
int i = setjmp(env);
env[0].__jmpbuf[5] = ptr_mangle(print);
longjmp(env, 2);
return 0;
}
Je suis en train de modifier PC jmp_buf en mettant à l'adresse de la fonction que je suis en train de sauter. Je reçois une erreur de segmentation. Je n'arrive pas à comprendre ce qu'il faut exactement faire. Dois-je également modifier le SP?
Toute aide serait grandement appréciée.