Λιγο help με την cpp

herculesthemad | Κυρ, 01/13/2008 - 23:26 | 3' | 2

Για σας,

γραφω ενα προγραμματακι σε cpp με vim και g++ 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2) το οποιο μπορει να ψαχνει πακετα στο apt και να εγκαθηστα. Το προβλημα τωρα γινετε μια χαρα compile το τρεχω και αφου επιλεξω τι θελω να κανω και εισαγω το ονομα του προγραμματος , μου τρεχει της εντολες και μετα
*** stack smashing detected ***: ./ji terminated
Aborted (core dumped)
Μαλλον ειναι η char progs[50];

Και ο κώδικας:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
void aptsearch();
void aptinstall();
cout << 'Just Install by Hercules Karagiozoglou.
';
int i;
for (i =1; i > 0; i++)
{
    cout << ' To search a package press (s), to install packages press (i) and for exit press(ex): ';
    char choi[5];
    cin >> choi;
    if (strcmp (choi,'s') == 0)
        {
        aptsearch();       
        }
    else if (strcmp (choi,'i') == 0)
        {
        aptinstall();       
        }
    else if (strcmp (choi,'ex') == 0)
        {
        exit(0);
        }
    else
        {
        cout << 'You have entered an invalid option. Please, try again!
';
        }
}

}
void aptinstall()
{
    cout << 'Enter programs: ';
    char progs[50];
    char apt[] = 'sudo apt-get install ';
    cin.getline(progs,sizeof (progs));
    strcat(apt,progs);
    system(apt);
}

void aptsearch()
{
    cout << 'Enter program to search: ';
    char progs[50];
    char apt[] = 'sudo apt-cache search ';
    cin >> progs;
    strcat(apt,progs);
    system(apt);
}


herculesthemad2007-10-22 10:35:34

Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Όχι το λάθος είναι στο char apt[].

Έχεις κάνει λάθος που οδηγεί σε buffer overflow και πιθανό vulnerability. Και το έξυπνο Linux (βασικά GCC) για να το αποτρέψει κάνει compile με αυτόματο  έλεγχο για buffer overflow. Αυτό λέγεται Stack Smashing Protection (SSP). Ουσιαστικά το μήνυμα στο runtime σου λέει ότι έχεις κάνει μ****α και πρέπει να τη διορθώσεις.

Εγώ έβαλα στο πρόγραμμά σου, τα εξής
  char apt[150] = "sudo apt-cache search ";

και δουλεύει μια χαρά.

Για περισσότερα σχετικά με το SSP:
http://www.de-brauwer.be/wiki/wikka.php?wakka=StackSmash
http://www.debian-administration.org/articles/408