shellcode asm dans le tampon C – prolog

J’essaie de construire une fonction dans un tampon en C. Avec gdb, je peux traduire

push rbp mov rbp,rsp (...) leave ret 

à

 0x55 0x48 0x89 0xe5 (...) 0xc9 0xc3 

J’ai donc écrit un code C:

 int main() { char buffer[]={0x55,0x48,0x89,0xe5,0xc9,0xc3}; void (*j)(void)=buffer; j(); } 

mais mon programme semble planter à l’intruction “push rbp” (0x55 dans le tampon) Savez-vous pourquoi?

    La cause habituelle est que la stack (où votre buffer est stockée) n’est pas exécutable. Il y a principalement deux manières de contourner cela:

    1. comstackr / lier de telle sorte que la stack soit marquée comme exécutable (par exemple, gcc -z execstack )
    2. utilisez mprotect au moment de l’exécution pour marquer la page où votre code est exécutable