Datei ausführbares Programm



  • Hallo,

    ich habe einen Pfad zu einer Datei und würde gerne übeprüfen, ob es sich dabei um ein ausführbares Programm handelt.

    Wie kann ich das machen?

    gruß seux



  • if [ -x /bin/bash ]; then
      echo hello world
    fi
    


  • In C:

    #include unistd.h
    int access(const char *pathname, int mode);
    


  • Könntest du deine Frage evtl. präzisieren?
    Wenn du das als User herausfinden möchtest, geht das auch über ls -l <pfad> | grep <dateiname>



  • Nene, ich wollte das schon über C überprüfen. Die variante von gig sieht da ja sehr vielversprechend aus. Ich werde die später mal ausprobieren



  • ausführbare dateien unter linux sind ELF dateien.

    du brauchst nur die ersten 4 bytes (= magic number) prüfen, wenn die stimmen, dann ist es eine ausführbre datei.



  • seux schrieb:

    Nene, ich wollte das schon über C überprüfen. Die variante von gig sieht da ja sehr vielversprechend aus. Ich werde die später mal ausprobieren

    Wofür willst du das eigentlich verwenden? Wenn du nicht einfach nur sagen möchtest "Beim letzten Check war das Ding ausführbar", dann handelst du dir damit nämlich eine böse Racecondition ein. 🙂

    magic number prüfen: Nein, ausführbar ist alles mit +x. Ein Shellscript kann genauso eine Executable sein wie eine ELF-Binary. (Oder ein Ruby-Programm, oder ein Python-Programm, oder…)



  • also ich habe einen Pfad zu einer Datei. Nun möchte ich prüfen, ob es sich um ein ausführbares programm handelt. Wenn ja, dann möchte ich es mit execv() starten.



  • seux schrieb:

    also ich habe einen Pfad zu einer Datei. Nun möchte ich prüfen, ob es sich um ein ausführbares programm handelt. Wenn ja, dann möchte ich es mit execv() starten.

    1. datei öffnen (dabei kannst du gleich überprüfen, ob die datei existiert / geöffnet werden kann).

    2. die ersten 4 bytes der datei lesen

    3. bytes mit ELF-magic number überprüfen.

    hier mal ein beispielcode:

    #include <stdio.h> // für printf und fread
    
    int main(int argc, char *argv[])
    {
        FILE *executable_file=fopen(argv[1],"rb");
        if(executable_file == NULL)
        {
              printf("Fehler: Datei kann nicht geoeffnet werden\n");
              return 1;
        }
    
        unsigned int file_magic_number;
    
        // ersten 4 bytes einlesen
        fread(&file_magic_number,1,4,executable_file);
    
        fclose(executable_file); // Datei schließen
    
        // eingelesene bytes mit ELF-magic number überprüfen
    
        if( file_magic_number != 0x464C457F)
        {
             printf("Fehler: Datei ist nicht ausfuehrbar\n");
        }
    
        else
        {
             printf("Datei ist ausfuehrbar\n");
        }
    
        return 0;
    }
    

    der code ist aber nicht optimiert oder sonst irgendwie professionel, er soll nur zeigen, wie du das theoretisch machst.



  • Wie schon gesagt wurde, gibt es auch Shell-Scripts, Perl-Scripts, etc..., die keine magic number haben, aber trotzdem ausführbare Programme sind. Es geht darum, die Datei-Attribute auf -x (ausführbar) zu überprüfen.



  • seux schrieb:

    also ich habe einen Pfad zu einer Datei. Nun möchte ich prüfen, ob es sich um ein ausführbares programm handelt. Wenn ja, dann möchte ich es mit execv() starten.

    Damit faengst du dir aber eine Race-Condition ein.

    Versuche einfach nur via exec* zu starten und fertig.


Anmelden zum Antworten