Xhack

Un forum dedicato all'hacking
 
IndiceIndice  PortalePortale  CalendarioCalendario  FAQFAQ  CercaCerca  RegistrareRegistrare  Lista utentiLista utenti  GruppiGruppi  Connessione  

Condividere | 
 

 progetto per la creazione di una nuova shell...

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso 
AutoreMessaggio
darkjoker
Admin
Admin


Numero di messaggi: 813
Data d'iscrizione: 30.07.07

MessaggioOggetto: progetto per la creazione di una nuova shell...   Ven Gen 04, 2008 4:56 pm

ciao a tutti... come avrete capito dal titolo, ho un progetto un po' ambizioso... creare una shell interamente scritta in c...
Beh, dopotutto, pensandoci una shell è un semplice ( piu o meno) programma che agisce sopratutto coi file, ma svolge anche altri tipi di funzioni..
col c, anche se avete letto solo la mia guida, saprete certo operare tranquillamente con i file, se vi siete spinti oltre, allora avrete delle ottime conoscenze...
Bene, ora che ci avete pensato un attimo avrete capito che la shell è fattibile, dobbiamo solo unire le nostre menti...
questo è il programma che avevo fatto io un po di tempo fa..:
Codice:

//Beta Version
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
#define USERNAME "darkjoker" //mettete qui il vostro nickname...
int inizio ();
int view ();
int quit ();
int calc ();
int help ();
int aboutme ();
int hexdec ();
int dirx ();
int copia ();
main (){
    inizio ();
    while (1 == 1){
    char scelta;
    printf ("%s@shell: & ", USERNAME);
    scanf ("%c", &scelta);
    switch (scelta){
            case 'd':
                dirx ();
                break;
            case 'v':
                view ();
                break;
            case 'q':
                exit (1);
                break;
            case 'c':
                calc ();
                break;
            case 'h':
                help ();
                break;
            case 'a':
                aboutme ();
                break;
            case 'x':
                hexdec ();
                break;
            case 'p':
                copia ();
                break;
            default:
                break;
                }
}
}
int inizio (){
    printf ("\n\nBenvenuto %s\n\nVerra avviata una nuova sessione.\n\n\n", USERNAME);
}
int view (){
    FILE *toread;
    char file[20], txt[100];
    printf ("Inserire il nome del file da leggere: ");
    scanf ("%s", &file);
    toread = fopen (file, "r");
    if (toread == NULL){
              printf ("Impossibile leggere il file.\n");
    }
    while (!feof(toread)){
          fgets (txt, sizeof(txt), toread);
          printf ("%s", txt);
         
          }
}
int calc (){
    int scelta, ad1, ad2, sm, mn, st, df, ft1, ft2, pr, dv, ds, qu;
    printf ("Scegli che cosa fare:\n1. Addizione\n2. Sottrazione\n3. Prodotto\n4. Divisione\n");
    scanf ("%d", &scelta);
    switch (scelta){
          case 1:
                printf ("Inserire il primo addendo: ");
                scanf ("%d", &ad1);
                printf ("Inserire il secondo addendo: ");
                scanf ("%d", &ad2);
                sm = ad1 + ad2;
                printf ("Risultato: %d\n", sm);
                break;                       
          case 2:
                printf ("Inserire il minuendo: ");
                scanf ("%d", &mn);
                printf ("Inserire il sottraendo: ");
                scanf ("%d", &st);
                df = mn - st;
                printf ("Risultato: %d\n", df);
                break;
          case 3:
                printf ("Inserire il primo fattore: ");
                scanf ("%d", &ft1);
                printf ("Inserire il secondo fattore: ");
                scanf ("%d", &ft2);
                pr = ft1 * ft2;
                printf ("Risultato: %d\n", pr);
                break;
          case 4:
                printf ("Inserire il dividendo: ");
                scanf ("%d", &dv);
                printf ("Inserire il divisore: ");
                scanf ("%d", &ds);
                if (ds == 0){
                      printf ("Impossibile dividere per 0\n");
                      break;
                      }
                qu = dv / ds;
                printf ("Risultato: %d\n", qu); 
                break;
          default:
                  printf ("Comando non valido.\n");
                  break;
          }
}
int help (){
    printf ("\n\nHelp\n");
    printf ("\n");
    printf ("v : visualizza il contenuto di un file.\n");
    printf ("\n");
    printf ("c : apre una calcolatrice.\n");
    printf ("\n");
    printf ("q : esce dalla shell\n");     
    printf ("\n");
    printf ("a : mostra un messaggio riguardante l'autore\n");
    printf ("\n");
    printf ("h : visualizza questo messaggio\n");
    printf ("\n");
    printf ("x : apre un proramma per la conversione da decimale a esadecimale\n");
    printf ("\n");
    printf ("d : visualizza il contenuto di una directory\n");
    printf ("\n");
    printf ("p : copia un file.\n");
    printf ("\n\n");
}
int aboutme (){
    printf ("\n\nQuesto programma e stato creato da: darkjoker\nLa parte rigurdante le directory e stata fatta quasi completamente a cura di BlackLight.\n");
}
int hexdec (){
    int scelta, hexdec, dechex;
    printf ("Cosa vuoi fare?\n1. Decimale >> Esadecimale\n2. Esadecimale >> Decimale\n");
    scanf ("%d", &scelta);
    switch (scelta){
          case 1:
                printf ("Inserire valore decimale da trasformare: ");
                scanf ("%d", dechex);
                printf ("%d >> %x\n", dechex, dechex);
                break;
          case 2:
                printf ("Inserire valore esadecimale da trasformare: ");
                scanf ("%x", hexdec);
                printf ("%x >> %d\n", hexdec, hexdec);
          break;
          default:
                  printf ("Opzione non valida.\n");
          }
}


int dirx(){
        DIR *dy;
        struct dirent*info;
        int num=0;
        int max_fname=0;
        int i,rnd;
        char **names;
        char direct[20];
        printf ("Inserire il nome della directory da analizzare: ");
        scanf ("%s", &direct);
        dy = opendir(direct);
        while (info=readdir(dy))  {
                num++;

                if (strlen(info->d_name)>max_fname)
                        max_fname=strlen(info->d_name);
        }
        names = (char**) malloc(num*sizeof(char*));

        for (i=0; i<num; i++)
                names[i] = (char*) malloc(max_fname*sizeof(char));
               

        closedir(dy);
    dy = opendir(direct); 

        for (i=0; info=readdir(dy); i++)
                strncpy (names[i],info->d_name,max_fname);


        closedir(dy);
        i--;
        while (i >= 0){
    printf ("%s\n", names[i]);
    i--;
}
}
int copia (){
    FILE *orig;
    FILE *des;
    char origine[20], dest[20], linea[1000];
    printf ("Inserire il nome del file da copiare: ");
    scanf ("%s", &origine);
    printf ("Inserire il nome della destinazione: ");
    scanf ("%s", &dest);
    if (origine == NULL){
                printf ("Impossibile aprire il file di origine.\n");
    }
    if (dest == NULL){
                printf ("Impossibile aprire il file di destinazione.\n");
    }
    orig = fopen (origine, "r");
    des = fopen (dest, "w");
    while (!feof (orig)){
          fgets (linea, sizeof (linea), orig);
          fprintf (des, "%s", linea);
    }
}

se lo usate, vedete che è abbastanza elementare, usando il comando h potete vedere le sue "capacita".. molto limitate... no?
quello che vi chiedo è di copiarvi il codice e modificarlo a vostro piacimento, aggiungendo nuove funzioni e modificando quelle esistenti...
Se poi c'è qualcuno di voi che se la cava con le stringhe, gli chiederei di trasformare i comandi da semplici lettere a intere parole... Purtroppo bisogna usare la libreria string.h e io, sinceramente, sono un po'imbranato...
Se poi qualcuno riesce a risolvere il problema che quando si mette un comando non valido fa qualcosa di "strano" (ho provato in un po di modi a risolvere, ma niente...)
Beh, io la proposta l'ho lanciata; sta a voi accoglierla o rifiutarla, spero che prendiate la strada giusta...

darkjoker

_________________
L'unico computer sicuro, è un computer spento.

Nel software esiste sempre almeno un bug, generalmente è localizzabile tra la tastiera e la sedia

Tornare in alto Andare in basso
Vedere il profilo dell'utente
certaindeath
Admin
Admin


Numero di messaggi: 343
Data d'iscrizione: 30.07.07

MessaggioOggetto: Re: progetto per la creazione di una nuova shell...   Ven Gen 04, 2008 5:49 pm

buono; un progretto collettivo.
vediamo se insieme riusciamo a fare qualcosa di buono...

_________________
è strano quante cose bisogna sapere prima di sapere quanto poco si sa...
Tornare in alto Andare in basso
Vedere il profilo dell'utente
darkjoker
Admin
Admin


Numero di messaggi: 813
Data d'iscrizione: 30.07.07

MessaggioOggetto: Re: progetto per la creazione di una nuova shell...   Ven Gen 04, 2008 5:52 pm

speriamo...
che qualcuno abbia ancora qualche interesse... come dice black, ci stiamo dividendo....
questa mi sa che è una prova definitiva prima di decidere se proseguire o no...

_________________
L'unico computer sicuro, è un computer spento.

Nel software esiste sempre almeno un bug, generalmente è localizzabile tra la tastiera e la sedia

Tornare in alto Andare in basso
Vedere il profilo dell'utente
certaindeath
Admin
Admin


Numero di messaggi: 343
Data d'iscrizione: 30.07.07

MessaggioOggetto: Re: progetto per la creazione di una nuova shell...   Ven Gen 04, 2008 5:55 pm

siamo alla resa dei conti.....

_________________
è strano quante cose bisogna sapere prima di sapere quanto poco si sa...
Tornare in alto Andare in basso
Vedere il profilo dell'utente
darkwolf
membro importante
membro importante


Numero di messaggi: 225
Localizzazione: Un pò più a destra ecco bravo adesso un pò più in basso perfetto abito lì
Data d'iscrizione: 05.11.07

MessaggioOggetto: Re: progetto per la creazione di una nuova shell...   Ven Gen 04, 2008 7:42 pm

proseguire un corno xhack NON DEVE CHIUDERE !!!!!!!!!!!!!!!!!!!!!!!!!!!
il progetto mi piace ma io non ne sono capace devo studiare di +
Tornare in alto Andare in basso
Vedere il profilo dell'utente
giga hertz
apprendista
apprendista


Numero di messaggi: 42
Data d'iscrizione: 01.09.07

MessaggioOggetto: Re: progetto per la creazione di una nuova shell...   Ven Gen 04, 2008 8:16 pm

Bel progetto, credo che mi impegnerò a contribuire.
PS:
Ho visto che quando si inserisce un comando non supportato esce tante volte la scritta del nome utente, credo sia un bug nell while.
PSS:
nella calcolatrice basta dichiarare due variabili.
Tornare in alto Andare in basso
Vedere il profilo dell'utente
BlackLight
Moderatore
Moderatore


Numero di messaggi: 277
Età: 25
Data d'iscrizione: 22.08.07

MessaggioOggetto: Re: progetto per la creazione di una nuova shell...   Sab Gen 05, 2008 1:31 am

Dai su non è questa la giusta base da cui partire per una shell...una shell deve essere innanzitutto un componente software costruito intorno al kernel, quindi i comandi di base dovranno utilizzare quasi esclusivamente primitive del kernel, e non primitive per l'I/O ad alto livello come quelle di stdio (anche perché una shell deve essere ottimizzata il più possibile rispetto al kernel). Inoltre una buona shell deve essere completamente multiutente e multiprocesso. Ciò vuol dire che, a parte ad avere una buona gestione degli utenti, dovrà implementare pipe e redirezioni varie, che a livello utente vengono viste al solito modo (<, > e |) mentre invece a livello C sono chiusure e duplicazioni di file descriptor e creazioni di canali per la comunicazione inter-processo. Tempo fa ho implementato una mezza shell in questo modo proprio per il corso di sistemi operativi, ed è questo il consiglio che vi posso dare se volete implementare una shell simile quantomeno a quella sui sistemi Unix, non certo mettere insieme un paio di comandi C di base in un solo programmino...

_________________
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/CM/CC/E/IT/LS/M d-(--) s:- a-- C+++$ UBL++++$ P+++ L+++++$ E- W+++ N+ o? K? w-- !O !M>+ !V PS+++ PE-- Y++ PGP+ !t !5 !X R+ tv-- b++>+++ DI? D+ G>+++ e++>++++ h r++ y+++
------END GEEK CODE BLOCK------

Codice:
blacklight@nightmare:/$ touch figa
touch: cannot touch `figa': Permission denied
Tornare in alto Andare in basso
Vedere il profilo dell'utente http://blacklight.gotdns.org
darkjoker
Admin
Admin


Numero di messaggi: 813
Data d'iscrizione: 30.07.07

MessaggioOggetto: Re: progetto per la creazione di una nuova shell...   Sab Gen 05, 2008 10:04 am

lol... hai ragione... ma non punto alla bash Very Happy
pero, sai, mi è venuta in mente cosi, senza che essa facesse molto... bah.. prima o poi, comunque, ne faro una.. spettate e sperate... Very Happy (che poi, piu che una shell vera e propria,.... puntavo piu che altro ad un'insieme di utility, solo che mi è venuto da chiamarla shell, visto che la bash (forever Very Happy ) ne implementa un sacco di queste cose Very Happy

Citazione:
proseguire un corno xhack NON DEVE CHIUDERE !!!!!!!!!!!!!!!!!!!!!!!!!!!
il progetto mi piace ma io non ne sono capace devo studiare di +

anche noi non vorremmo chiudere, ma la community sta morendo... se leggi su annunci troverai i motivi...
ci dispiace, ma stiamo seriamente pensando di andare in pensione... dipende tutto da voi...

Citazione:

Ho visto che quando si inserisce un comando non supportato esce tante volte la scritta del nome utente, credo sia un bug nell while.

lo so... mi sono dannatto abbastanza per mandarlo via... l'unica cosa che ho ottenuto era... sbagliata... piu giusta ma sbagliata...

_________________
L'unico computer sicuro, è un computer spento.

Nel software esiste sempre almeno un bug, generalmente è localizzabile tra la tastiera e la sedia

Tornare in alto Andare in basso
Vedere il profilo dell'utente
 

progetto per la creazione di una nuova shell...

Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto 
Pagina 1 su1

 Argomenti simili

-
» NUOVA OPPORTUNITA'! WAZZUB!
» [THREAD INUTILE] Creazione di una Nuova Sezione dedicata a virus e consigli per evitarli
» NUOVA ZELANDA: PUBBLICATI I DOSSIER TOP SECRET SUGLI UFO
» Iit di Genova studia progetto di robot umanoide con pelle
» Nuova Manutenzione By Luigi46

Permesso del forum:Non puoi rispondere agli argomenti in questo forum
Xhack :: Programmazione :: C/C++-