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 utiliser la structure IMAGE_FILE_HEADER du handle ?


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut comment utiliser la structure IMAGE_FILE_HEADER du handle ?
    bonjour je suis en train de creer en soft en c , je me demande si on peut extraire du handle des information comme par exemple la structure IMAGE_FILE_HEADER pour diverse utilité ,en gros d'ou extraire les info , et comment
    en gros comment utiliser une structure typedef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct _IMAGE_NT_HEADERS {
      DWORD                   Signature;
      IMAGE_FILE_HEADER       FileHeader;
      IMAGE_OPTIONAL_HEADER32 OptionalHeader;
    } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
    en gros comment faire pour utiliser cette structure ? comment l'initialiser merci de vos reponse

  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 518
    Points
    41 518
    Par défaut
    Ça dépend des infos que tu veux, et à quoi tu veux accéder.
    Par exemple, je ne sais pas lire les infos de débogage, mais il est possible de lire les ressources d'un exécutable.

    Dans la structure IMAGE_FILE_HEADER elle-même, les infos les plus utiles "telles quelles" seront la timestamp de l'éditeur de liens (TimeDateStamp), qui indique quand l'exécutable a été compilé (sauf quand ce n'est pas le cas) et la "machine", qui indique la bitness de l'exécutable.
    Après, il faut creuser plus: SizeOfOptionalHeader et NumberOfSections indiquent la position et la taille de la table des sections, indispensable pour pouvoir lire quoi que ce soit d'intéressant (et si l'exécutable n'est pas mappé en mémoire, indispensable pour convertir une Relative Virtual Address (RVA) en offset dans le fichier).
    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
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    je veux lister les section et savoir a quel adresse est l l'OEP donc lesinfo que je veux sont dans IMAGE_FILE_HEADER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IMAGE_FILE_HEADER       FileHeader;
    peut on a partir d'un handle utilier la structure pour avoir : la taille de l'imagebase ,le nombre de section , etc ... et comment? un petit code en exemple m'aiderait beaucoup .
    je precise que j'obtient l'handle avec openprocess , je n'est pas compris l'histoire du timestamp*
    Merci de vos reponse

  4. #4
    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 518
    Points
    41 518
    Par défaut
    Un HANDLE de processus ne donne pas directement accès aux structures de données de l'exécutable. Toutefois il donne accès à EnumProcessModules(), qui lui donne plus ou moins accès (tu auras besoin de ReadProcessMemory() pour obtenir les infos).
    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.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    comment avoir accès aux structures de données de l'exécutable en execution et comment les lister ?(avec un code pour plus de comprehension )
    je pensait que avec le handle du process on pouvait le faire
    merci de vos futur reponse

  6. #6
    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 518
    Points
    41 518
    Par défaut
    Pour avoir accès à tes propres données, c'est là le plus simple: Utiliser le HMODULE de l'exécutable du processus courant, qui correspond à l'adresses de base où l'exécutable est chargé (du moins le début de l'exécutable, car ce qui suit la table des sections est géré un peu différemment).
    On obtient ce HMODULE avec GetModuleHandle(NULL).
    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.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    HANDLE file ;
    file=OpenProcess(PROCESS_VM_READ,TRUE,a);
    HMODULE a ;
    a= GetModuleHandle(file);
    // avec a on peut trouver les " structures de données de l'exécutable en execution ", si oui comment ?
    je ne pense pas trop car Openprocess() retourne un handle alors que GetModuleHandle accepte un lpModuleName(adresse du module dont on doit retourne sont handle pas un handle d'apres win32.chm (la doc )) bref comment retrouver le lpModuleName
    du process en execution , et
    depuis GetModuleHandle comment avoir acces au IMAGE_FILE_HEADER ?
    avec a on peut trouver les " structures de données de l'exécutable en execution ", si oui ? comment avoir IMAGE_FILE_HEADER ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IMAGE_FILE_HEADER       FileHeader;
    a.FileHeader ; //comme sa ?

  8. #8
    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 518
    Points
    41 518
    Par défaut
    Comme je l'ai dit, pour le processus actuel, c'est très différent d'un processus "autre".
    Pour le processus actuel, ceci suffit:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HMODULE hModExe = GetModuleHandle(NULL);
    unsigned char * pExeStart = (unsigned char*)hModExe;
    IMAGE_DOS_HEADER * pFirstHeader = (IMAGE_DOS_HEADER *)hModExe;
    IMAGE_FILE_HEADER * pPEHeader = (IMAGE_FILE_HEADER*)(pExeStart + pFirstHeader->e_lfanew);
    Pour un autre processus c'est beaucoup plus dur, il faut récupérer l'adresse avec EnumProcessModules(), faire des lectures via ReadProcessMemory()...
    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.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    excuse mais tu aurai un code pour m'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pour un autre processus c'est beaucoup plus dur, il faut récupérer l'adresse avec EnumProcessModules(), faire des lectures via ReadProcessMemory()
    c'est ce je veux faire mais je vois pas comment et c'est quoi un module ?

  10. #10
    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 518
    Points
    41 518
    Par défaut
    Du point de vue de Windows, un "module", c'est un exe ou DLL chargé dans la mémoire d'un processus.
    Et désolé je n'ai pas d'exemple de code, je n'ai jamais utilisé EnumProcessModules().

    Edit: Oh, et sous Windows 64 Bits, ça va être la galère si le processus qui lit la mémoire des autres n'est pas lui-même en 64 bits (parce que ReadProcessMemory() appelé depuis un processus 32 bits n'accepte que des pointeurs "distants" 32 bits).
    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.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Du point de vue de Windows, un "module", c'est un exe ou DLL chargé dans la mémoire d'un processus.
    par exe charger dans la memoire tu veux quoi ? son code ? c'est grace au module qu'on a le code du processus ou le code est dans le thread ?

  12. #12
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par risk69 Voir le message
    comment avoir accès aux structures de données de l'exécutable en execution et comment les lister ?(avec un code pour plus de comprehension )
    Regarde les deux excellents articles de Matt Pietrek (http://www.wheaty.net/) au sujet du
    format PE ainsi que le code source de PEDUMP.

  13. #13
    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 518
    Points
    41 518
    Par défaut
    Citation Envoyé par risk69 Voir le message
    par exe charger dans la memoire tu veux quoi ? son code ? c'est grace au module qu'on a le code du processus ou le code est dans le thread ?
    Son code, ses données, ses "ressources", ses informations de débogage, de relocation, etc. Pour autant que je sache, tout le contenu du fichier .exe ou .dll est mappé en mémoire (mais pas d'un seul tenant) dans le processus (sauf peut-être dans des cas spéciaux où des données se trouvent hors des sections).

    Le thread lui, contient relativement peu: Une pile et une copie des registres (contexte d'exécution, dont fait partie le pointeur d'instruction), c'est pour ça qu'il peut y avoir si facilement plusieurs threads dans un même processus.
    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.

Discussions similaires

  1. [WD16] Comment utiliser 1 structure dans 1 WebService ?
    Par GEOFDEN dans le forum WinDev
    Réponses: 9
    Dernier message: 14/02/2011, 14h20
  2. Réponses: 2
    Dernier message: 10/11/2009, 08h43
  3. [DÉBUTANT] Structure d'un programme / Comment utiliser les modules ?
    Par Le Barde dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 10/10/2007, 10h20
  4. [XSLT] Comment utiliser une structure de type if-then-ELSE ?
    Par ribrok dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/11/2006, 12h39
  5. Réponses: 7
    Dernier message: 18/04/2006, 17h44

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