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

Windows Discussion :

Reconnaître un programme (dll ou exe) 64bits


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Points : 40
    Points
    40
    Par défaut Reconnaître un programme (dll ou exe) 64bits
    Bonjour à tous

    Y a t-il une soluce pour déterminer si une dll ou un exe est 64 ou 32 bits (signature particulière, analyse du header... ?)

    Et de manière plus générale qu'est ce qui différencie au niveau de la conception un programme 64 bits ?

    Merci beaucoup

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La solution à laquelle je pensais ne marchant pas, je crois qu'il va falloir une analyse du header.

    Pour ton autre question, ça dépend si on parle d'Itanium ("IA-64") ou de dérivé du x86 ("x86-64", "x64", "amd64"). Dans le premier cas, c'est carrément une autre façon de coder en asm (L'itanium utilise des instructions VLIW de 128 bits comprenant chacune trois instructions de 41 bits).

    Dans le second, c'est juste que les pointeurs sont sur 64 bits, que les registres 64 bits sont utilisés (RAX, etc. au lieu de EAX etc.) et que la convention d'appel des fonctions change pour un truc qui ressemble au __fastcall de 32 bits mais en différent.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Il faut regarder quelques signatures dans l'entête du fichier exécutable. Je te donne les infos issues de Portable Executable and Object File Format Specification, documentation officielle disponible chez Microsoft.

    • Offset 0x00 : Lire 2 caractères, signature "MZ" (2 octets).
    • Offset 0x18 : Lire 16 bits.
      • Si >= 0x40 : Exécutable étendu, continuer l'analyse.
      • Sinon, exécutable DOS.
    • Offset 0x3C : Lire 16 bits, offset "Off" de la donnée par rapport au début du fichier.
    • Offset "Off" : Lire 2 caractères.
      • Si "NE" : exécutable Win16.
      • Si "PE" : exécutable Win32.
    • Offset "Off+4" : Lire 16 bits.
      • Si 0x14c (constante IMAGE_FILE_MACHINE_I386) : Exécutable 32 bits.
      • Sinon : probablement 64 bits (tester IMAGE_FILE_MACHINE_IA64=0x200 et IMAGE_FILE_MACHINE_AMD64=0x8664 qui sont les plus courants).
    • Offset "Off+18" : Lire 16 bits, c'est un champ de bits "Characteristics".
      • Si (Characteristics & IMAGE_FILE_32BIT_MACHINE=0x100) != 0 : Machine 32 bits.
      • Sinon : Autre architecture (probablement 64 bits, vu les vérifications précédentes qui ont éliminé les machines 16 bits).


    Voilà, j'espère que ça pourra t'aider.


    EDIT : Tu peux aussi utiliser les fonctions de Image Help Library pour lire l'entête PE (via GetImageConfigInformation notamment), mais je n'ai pas le code correspondant sous le coude... Si tu écris le code via cette API, ce serait sympa de le poster, je pense, ça devrait intéresser pas mal de monde.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup pour ces réponses...

    Je potasse cela...

    Encore un grand merci...


    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Pour info j'ai trouvé ceci :

    http://www.pazera-software.com/products/peinfo/

    Logiciel freeware qui analyse les exécutables et entre autre donne l'info que je recherchais. Deuxième onglet (file header) lire le résumé en bas de page

    Merci beaucoup et a+

  6. #6
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Hello,

    Deux outils très sérieux du coté de l'exploration PE:

    CFF explorer: http://www.ntcore.com/exsuite.php

    PE Browse pro: http://www.smidgeonsoft.prohosting.c...le-viewer.html

    Coté programmation, comme le faisait remarquer Mac LAK, ImageHlp est la bonne lib. MapAndLoad est suffisant pour parser les entêtes PE.

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Tiens, en fouillant MSDN, je suis tombé sur GetBinaryType, fonction pourtant assez ancienne (Win2k).

    Cela n'offre pas les mêmes services que l'analyse des entêtes PE, bien sûr, mais cela peut simplifier la vie dans les cas "basiques".
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    ex RSI
    Inscrit en
    Février 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : ex RSI

    Informations forums :
    Inscription : Février 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    bonjour, je me posais en 2020 cette même question. Vos éléments de réponse m'ont fait regarder de plus près un utilitaire que j'utilise depuis de nombreuses annèes FileAlyzer vers.2 de Safer-Networking qui est très puissant, et donne dans l'onglet PE Header en seconde ligne 'Machine' le code hexa '014C' pour Intel 386, ou '8664' pour '64-bit Windows (AMD)'. Cela marche pour tout objet, exe, dll, ocx, raccourci...etc

Discussions similaires

  1. [Programmation] Creer un exe
    Par splif dans le forum Windows
    Réponses: 8
    Dernier message: 26/02/2007, 16h56
  2. Incrémentation du numéro de version (dll et exe) en C
    Par biglolo dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/02/2007, 18h09
  3. Afficher un programme d'un exe deja lancé
    Par pottiez dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/07/2006, 23h39
  4. probleme de debug d'une dll sur pc 64bits
    Par giova_fr dans le forum MFC
    Réponses: 2
    Dernier message: 12/12/2005, 16h40
  5. Réponses: 9
    Dernier message: 03/03/2005, 14h36

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