IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Comment verifier qu'un fichier regulier soit un executable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 96
    Par défaut Comment verifier qu'un fichier regulier soit un executable
    bonjour

    toute la question est dans l'intitule j'ai regarder du cote de la commande file decrite dans man(1) elle semblais correspondre mais je ne suis ni sur du resultat ni de comment l'appliquer a un fichier

    d'avance merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Bonjour,

    Citation Envoyé par Torx26 Voir le message
    toute la question est dans l'intitule j'ai regarder du cote de la commande file decrite dans man(1) elle semblais correspondre mais je ne suis ni sur du resultat ni de comment l'appliquer a un fichier d'avance merci
    Ça dépend du système d'exploitation que tu utilises. Ici, on considère que tu travailles sous Unix ou Linux. Ensuite, il faut distinguer d'une part les « droits d'exécution », soit le bit X modifié par chmod(), et que tu peux lire avec stat() en même temps que pas mal d'informations.

    Après, pour savoir si un fichier est en soi un exécutable (sous-entendu, en langage machine, je suppose), il n'y a pas de méthode directe : il faut ouvrir le fichier comme un fichier de données ordinaires, le lire et vérifier si ce qu'il contient correspond au format d'un exécutable et en respecte la norme. C'est ce que fait la commande « file » effectivement, mais elle s'appuie sur une base de connaissances (régulièrement mise à jour, donc) et sur certains headers spécifiés dans la man page.

    Par ailleurs, ton noyau lui-même, en fonction de ses options de compilation, peut reconnaître ou non différents type d'exécutables. Difficile de dire à l'avance, donc, si un fichier même reconnu comme exécutable pourra l'être sur ta machine.

    Enfin, sache que le noyau est capable de reconnaître les fichiers débutant par « #! » et de lancer l'interpréteur dont le nom suit ce motif. Ça sert à lancer des scripts mais, de ce point de vue, n'importe quel fichier peut devenir exécutable.


    Maintenant, est-ce que tu as réellement besoin d'écrire ça en C ou est-ce que c'est pour faire des tâches d'administration système, auquel cas tu aurais plus vite fait d'écrire un script ?

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Enfin, sache que le noyau est capable de reconnaître les fichiers débutant par « #! » et de lancer l'interpréteur dont le nom suit ce motif. Ça sert à lancer des scripts mais, de ce point de vue, n'importe quel fichier peut devenir exécutable.
    Salut
    C'est vrai qu'un fichier qui contient "#!/bin/sh" et un droit "x" peut être lancé comme un exécutable. Mais l'est-il vraiment ???
    En tout état de cause, même si on lui met un setuid, le processus généré par le script ne prend quand-même pas les droits de son propriétaire. Donc j'aurais tendance à dire qu'il ne l'est pas...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/02/2009, 15h38
  2. [XML] comment verifier l'existence du contenu d'un fichier en php.
    Par dadex dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/12/2008, 13h26
  3. Réponses: 7
    Dernier message: 24/04/2008, 09h38
  4. [VC++] comment verifier qu'un fichier existe deja
    Par ksoft dans le forum Visual C++
    Réponses: 17
    Dernier message: 21/09/2006, 14h56
  5. Réponses: 6
    Dernier message: 28/09/2005, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo