Это только для академического использования. Курс по обеспечению безопасности. Учитель хочет, чтобы я одурачил программу, введя что-нибудь, по-моему, для ввода другой функции, чем f2 или f3. Я вижу все адреса памяти, используя GDB. Что мне следует вводить для запуска f1?Программа Fooling C, указав адрес указателя
Спасибо за помощь.
void f1 (void) {...} // f1 address 0x8048559
void f2 (void) {...} // f2 address 0x804857e
void f3 (void) {...} // f3 adrress 0x8048627
fptr ptrs[2] = {NULL, f2, f3}; // ptrs adress 0x804a0d4
int main(int argc, char *argv[]) {
char buf[1024] = {0}; // buf address 0xbffff130
int r; // r address 0xbffff530
fptr p1 = f1; // p1 address 0xbffff534
r = read(0, buf, sizeof(buf)-sizeof(char));
if(r > 0) {
buf[r] = '\0';
int s = atoi(buf);
fptr tmp = ptrs[s];
tmp();
} else {
break;
}
}
Почему вы пытались это сделать? где проблемы? – lrleon
Я не знаю, как обмануть содержимое переменной os s для запуска функции f1. Это проблема. Я попытался ввести адрес f1, но не работал. –
Возможно, вам нужно использовать переполнение буфера? –