Таким образом, каждый раз, когда я переполняю буфер, я вижу это:
Program received signal SIGABRT, Aborted.
0x00007ffff7a47c37 in __GI_raise (sig=sig@entry=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory
.
Вопрос , который у меня есть: что такое 0x00007ffff7a47c37
?
это довольно далеко от RSP
и RBP
и до того, как программа выдаст ошибку сегментации, если я сделаю:
(gdb) break 12
(gdb) x/x $rip
0x400654 <main+94>: 0xe0558d48
похоже, что это не RIP.
мой код:
#include <stdio.h>
int main(int argc, char *argv[])
{
int dummy;
int* rip = &dummy;
printf("%p\n", rip);
int *ret;
char buf[20];
strcpy(buf, argv[1]);
ret = buf;
printf("%p:%s\n", ret, buf);
return 0;
}
Я запускаю скрипт как run $(perl -e 'print "A"x40')