Erreur de segmentation quand exe C

Donc, après avoir compilé et exécuté mon programme, le message d’erreur suivant s’affiche: «Erreur de segmentation», et le message d’erreur strace:

--- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ Segmentation fault 

La question est, des idées comment je peux corriger cette erreur et afficher le message dans le code shell?

Code d’assemblage:

 ;r3v.asm ;r3v3rs3c - 3x_z3r0 [SECTION .text] global _start _start: jmp short ender starter: xor eax, eax xor ebx, ebx xor edx, edx xor ecx, ecx mov al, 4 mov bl, 1 pop ecx mov dl, 18 int 0x80 xor ebx, ebx int 0x80 ender: call starter db 'r3v3rs3c' 

Assemblez-le avec: nasm -f elf r3v.asm Le lier avec: ld -o r3v r3v.o Dump-le avec: objdump -d r3v Extrayez le code shell dans un programme de test:

 /*shelltest.c r3v3s3c - 3x_z3r0*/ char code[] = "\xeb\x15\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59\xb2\x12\xcd\x80\31\xdb\xcd\x80\xe8\xe6\xff\xff\xff\x72\x33\x76\x33\x72\x73\x33\x63"; ; int main(int argc, char **argv) { int (*exeshell)(); exeshell = (int (*)()) code; (int)(*exeshell)(); } 

Ensuite, je comstack avec: gcc shelltest.c -o shelltest Exécutez-le avec: ./shelltest et la sortie lit “Défaut de segmentation”.

Actuellement, votre code de chaîne sera placé dans une partie de la mémoire du programme déclarée non exécutable lorsque vous déclarez que le tableau est mutable (pas const). Lorsque vous essayez de l’exécuter en tant que fonction, votre système d’exploitation verra que vous essayez d’exécuter du code dans une zone de mémoire qui ne peut pas être exécutée et supprimera votre programme d’un segfault.

Pour résoudre ce problème, changez votre déclaration de code pour qu’elle soit un caractère const char

c’est à dire

 const char code[] = "\xeb......." 

Cela permettra au compilateur de le mettre en mémoire exécutable et ainsi de l’exécuter.