Witam,
Mam pobrać z konsoli ciąg znaków za pomocą
int main(int argc, char *argv[])
i następnie porównać na if'ach tzn.
if(argv[1]="a")
// jakieś polecenie
if(argv[1]="b")
//jakieś polecenie
I nie bardzo wiem jak się do tego zabrać.
Witam,
Mam pobrać z konsoli ciąg znaków za pomocą
int main(int argc, char *argv[])
i następnie porównać na if'ach tzn.
if(argv[1]="a")
// jakieś polecenie
if(argv[1]="b")
//jakieś polecenie
I nie bardzo wiem jak się do tego zabrać.
po 1: = oznacza przypisanie. == to porównanie.
po 2: tak się nie porównuje - char* to tablica znaków. możesz porównywać char* za pomocą funkcji strcmp(). a jeśli to c++, to możesz robić tak:
string arg1 = argv[1];
if(arg1=="a")
...
hmmm
czyli mam zrobić coś takiego:
char *operacja = argv[1];
if( strcmp (operacja, "d") == 0 )
//jakieś polecenie
Lepiej dać:
strncmp(operacja, "d", 2);
nie rozumiem twojego zapisu. strcmp ma porównać te 3 napisy? Nie wiem po co ta 2.
Nie. To zapewni Ci bezpieczeństwo, że nie sprawdzi za dużo (exploity i takie tam).
char *operacja=argv[1];
strcmp(operacja,"d");
strncmp(operacja,"d",2);
Przyjmujemy, że hakerowi udaje się w jakiś sposób nadpisać długość stringu w taki sposób, że przeszukiwać będzie więcej informacji ze stringa niż wymagane 2 potrzebne w programie. Wtedy może umieścić tam adres powrotu do shellcode umieszczonego gdzieś w pamięci i przejąć kontrolę nad przepływem programu.
Taaaaa, porównywanie oczywiście u ciebie coś nadpisuje, a hacker ten twój jest jakiś dziwny napis zmienić może zaś tą liczbę 2 - nie może!
Wiesz co, chyba o tej porze nie powinieneś odpowiadać na pytania na forum ;-P