Witam wszystkich!
Przerabiam sobie 2 raz wydanie Hacking Sztuka penetracji wyd. 2 i natknalem sie na cos glupiego.
Mam problem z ta funkcja, poniewaz niezaleznie czy int auth_flag czy char password_buffer jest napisane jako piewrsze w kodzie C to i tak na stosie tablica char jest zawsze pierwsza. Nie wiem dlaczego tak sie dzieje, poniewaz w tym przypadku adres tablicy powinien miec wyzszy adres niz zmienna int.
=================================
int check_authentication(char *password) {
char password_buffer[16];
int auth_flag = 0;
strcpy(password_buffer, password);
if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;
return auth_flag;
}
=================================
Ale jezeli dodam do tej funkcji:
printf("%p\n", password_buffer);
prinft("%p\n", &auth_flag);
to adres int jest wczesniej niz adres buffora i dziala poprawnie.
Tutaj umieszczam caly kod zrodlowy:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char *password) {
char password_buffer[16];
int auth_flag = 0;
strcpy(password_buffer, password);
if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;
return auth_flag;
}
int main(int argc, char *argv[]) {
if(argc < 2) {
printf("Sposób użycia: %s <hasło>\n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])) {
printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
printf(" Uwierzytelniono.\n");
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
} else {
printf("\nDostęp zabroniony.\n");
}
}
Jesli ktos potrafi rozwiac moje watpliwosci to piszcie!![]()