Brauche dringend hilfe



  • das ist die aufgabe:

    Ein typisches Muster das Virus bedindet sich in der Datei V.
    Durchsucht werden soll die datei p nach dem virus.
    öffnen sie beide datein und lesen sie v und p auf einen datentypen ein. vergleichen sie
    suksesive die datein des virus v mit dennen aus der programmdatei p. finden Sie keine übereinstimmung
    so verschieben sie die position von p relativ zum virus und führen den vergleich beginnend an der nächsten stelle erneut
    aus bis p abgearbeitet ist

    wie mache ich das?



  • Eigentlich so, wie's dasteht ... Ein möglicher Anfang wäre

    #include <stdio.h>
    
    // Dateien öffnen
    {
    	FILE *pfile;
    	FILE *vfile;
    
    	pfile = fopen("pdatei.exe", "rb");
    	vfile = fopen("vdatei.sgn", "rb");
    
    	if (!(pfile && vfile))
    		return -1;
    	// .... schonmal von fgetc gehört?
    	// ...
    }
    

    Jetzt solltest Du Zeichen lesen und vergleichen, entweder völlig dateibasiert oder Du pufferst die Virendatei im RAM. Eigentlich kann man die Sache aber recht straight durchprogrammieren, das Kniffligste wird wohl werden, im Stream zurückzuspringen.

    Aber jetzt mußt Du erstmal selber ein bißchen was vorlegen ... 😉



  • ich habe bis jetzt das hier..

    #include <stdio.h>
    #include <stdlib.h>

    int main(){

    int *puffer,i,min,max, groesse,wertanzahl,status;
    FILE *input = NULL;
    char FileName[] = "P";

    /* Erster Schritt: Datei ¨offnen */

    input = fopen(FileName, "rb");
    if(input==NULL) {
    printf("Konnte Eingabedatei nicht oeffnen: %s\n",FileName);
    return -1;

    }

    //Größe der Datei
    fseek(input,0L,SEEK_END);
    groesse = ftell(input);
    wertanzahl = groesse/sizeof(int);

    puffer=(int*)calloc(wertanzahl,sizeof(int));

    /* Zweiter Schritt: Datei verarbeiten */

    fseek(input,0L,SEEK_SET);
    status = fread(puffer, sizeof(int), wertanzahl, input);
    if(status != wertanzahl){
    fprintf(stderr,"Werte konnten nicht in den Puffer geschrieben werden.");
    return EXIT_FAILURE;
    }

    max=min=i=0;

    for (i=0;i<wertanzahl;i++)
    {

    if (i==0) min = *puffer;
    if (i==0) max = *puffer;
    if (*puffer<min){min=*puffer;}
    if (*puffer>max){max=*puffer;}
    puffer++;

    }
    printf("Anzahl der Datenwerte=%d\n",wertanzahl);
    printf("Minimalwert Datenwert=%d\n",min);
    printf("Maximaler Datenwert=%d\n",max);

    /* Dritter Schritt: Datei schließen */
    if(input) fclose(input);
    return EXIT_SUCCESS;
    }



  • Ja, das sieht ja nach was aus, hast Du schon probiert, ob's geht?
    Ich hab's nur grob überflogen, jetzt kommt mein Standardspruch Du sollst malloc() nicht casten und benutze bitte C/C++- Codetags

    puffer=(int*)calloc(wertanzahl,sizeof(int));
    

    Also, Du willst beide im RAM puffern, OK. Dann wäre der nächste Schritt, die Virusdatei auch so einzulesen.
    Wenn Du die Dateien als char einliest, spart das übrigens meistens Platz und man könnte die Stringfunktionen problemlos verwenden, da ist schon so jede Menge Vergleichs und Suchzeugs dabei. 😉

    EDIT: aua, *hirnpatsch*, nein, ich vergesse immer wieder die idiotische Nullterminierung. Also, die Stringfunktionen werden uns nicht helfen können. Man kriegts trotzdem hin, dann halt händisch.





  • kein Frickler schrieb:

    Es gibt übrigens auch http://www.cppreference.com/wiki/c/string/memcmp.

    Öh, und wie soll ihm das helfen? Vergleicht ja nur die ersten n Elemente oder lese ich da was falsch?
    Klar, man könnte das mit dem Weiterschalten zusammentricksen, aber fünf, sechs Zeilen Handgemurkstes kommen da geschmeidiger rüber.


Anmelden zum Antworten