Код:
#include <stdio.h>
int main(int argc, char *argv[]){
char buf[512];
strcpy(buf, argv[1]);
return 0;
}
Компиляция:
gcc -g -z execstack buf.c -o buf -fno-stack-protector
Вопрос:
Итак, в основном, используя gdb
, я устанавливаю точку останова в строке return 0;
и запускаю скрипт следующим образом: run $(python -c 'print "A"*600')
, а затем, когда я выполняю x/600x $rsp
, я получаю начало буфера в:
0x7fffffffdcf0: 0xffffdfe8 0x00007fff 0xf7fd3298 0x00000002
0x7fffffffdd00: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffdd10: 0x41414141 0x41414141 0x41414141 0x41414141
// it goes on... until
0x7fffffffdf50: 0x41414141 0x41414141 0x00000000 0x00000000
Но потом, когда я иду дальше вниз по стеку, я также вижу:
0x7fffffffe2f0: 0x776f6c66 0x6675622f 0x41414100 0x41414141
0x7fffffffe300: 0x41414141 0x41414141 0x41414141 0x41414141
// It goes until
0x7fffffffe540: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffe550: 0x48530041 0x3d4c4c45 0x6e69622f 0x7361622f
Также для эксплойта с переполнением буфера. Если я использую первое местоположение, мой эксплойт не работает, но если я использую второе местоположение, оно работает.
Итак, могу ли я знать, почему мой буфер хранится в двух разных местах?