У меня есть простой код, который был взят из Protostar 0 (строка формата) - Код немного изменился (см. Ниже).
Я изучил кадр стека функции vuln.Я заметил, что между локальными и ebp есть два значения.
Не уверен, являются ли эти два значения канарейками или нет, потому что я скомпилировал программу следующим образом:
gcc proto_0.c -oproto_0 -fno-stack-protector -m32
Насколько я понимаю, флаг -fno-stack-protector отключает канареек, так что это за значения?
void vuln(char *string)
{
int target = 1;
char buffer[32];
sprintf(buffer, string);
if(target == 0xdeadbeef) {
printf("you have hit the target correctly :)\n");
}
}
int main(int argc, char **argv)
{
vuln(argv[1]);
}
кадр стека:
адрес возврата
сохраненный ebp
0x00000000
0xf7fab3fc
target
буфер
Ожидаемый кадр стека:
ret адрес
сохраненный ebp
target
buffer