Я хочу достичь бесконечного l oop с n oop slide.
Я использую 64-разрядную версию MacOS Mojave. Мой C код выглядит как
#include <stdio.h>
int main() {
char name[100];
printf("What is your name?\n");
gets(name);
printf("I %s\n", name);
return 0;
}
Я компилирую его следующим образом:
gcc main.c -O0 -g -Xlinker -allow_stack_execute -fno-stack-protector
Мой вывод GDB при переполнении:
0x7ffeefbffa20: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa28: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa30: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa38: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa40: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa48: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa50: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa58: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa60: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa68: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa70: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa78: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa80: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa88: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa90: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0x7ffeefbffa98: 0x28 0xfa 0xbf 0xef 0xfe 0x7f 0x00 0x00
0x7ffeefbffaa0: 0x28 0xfa 0xbf 0xef 0xfe 0x7f 0x00 0x00
Информация о кадре без переполнение:
Stack level 0, frame at 0x7ffeefbffaa0:
rip = 0x100000f44 in main (main.c:15); saved rip = 0x7fff6fcf03d5
source language c.
Arglist at 0x7ffeefbffa90, args:
Locals at 0x7ffeefbffa90, Previous frame's sp is 0x7ffeefbffaa0
Saved registers:
rbp at 0x7ffeefbffa90, rip at 0x7ffeefbffa98`
Ошибка, которую я получаю
Thread 2 received signal SIGSEGV, Segmentation fault.
0x00007ffeefbffa28 in ?? ()
Я новичок ie в этом. Я думаю, что по логике я все делаю правильно, и я должен получить «бесконечный n oop слайд», но это не работает.