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 :

manipulation de ImageLoad()


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut manipulation de ImageLoad()
    bon ça y est je m'y remet (à essayer de bidouiller du c++)

    au bout de 3 heures de recherches je crie au secours


    je voudrai utiliser la fonction imageload(pointer image_name,pointer file_path)

    je ne comprend pas trop bien, le resultat est un pointeur sur une structure definie dans imagehlp.h ou DbgHelp.h (pas grave j'ai inclu les deux)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    LOADED_IMAGE
     
    Contains information about the loaded image.
     
    typedef struct _LOADED_IMAGE {  
        PSTR ModuleName;  
        HANDLE hFile;  
        PUCHAR MappedAddress;
        PIMAGE_NT_HEADERS32 FileHeader;
        PIMAGE_SECTION_HEADER LastRvaSection;
        ULONG NumberOfSections;
        PIMAGE_SECTION_HEADER Sections;
        ULONG Characteristics;
        BOOLEAN fSystemImage;
        BOOLEAN fDOSImage;
        BOOLEAN fReadOnly;
        UCHAR Version;
        LIST_ENTRY Links;
        ULONG SizeOfImage;
    } LOADED_IMAGE,  *PLOADED_IMAGE;
    donc j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    using namespace::std;
     
    char *filename = "C:\\windows\\system32\\calc.exe";
    char *img_name = "calc.exe";
     
    int main()
    {
        using namespace std;
     
        PLOADED_IMAGE = ImageLoad(img_name,filename);
    j'ai tout essayé à la place de PLOADED_IMAGE, declaration de pointeur, rajouter des * etc.. mais j'ai toujours un message d'erreur

    quelqu'un pourrait m'éclairer sur le mode d'exploiter cette ressource ?

    rogerio

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Tu as une déclaration de structure LOADED_IMAGE et une déclaration d'un type ( PLOADED_IMAGE ) qui est directement un pointeur de type LOADED_IMAGE.

    Dans ton code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PLOADED_IMAGE pImage = ImageLoad( img_name, filename );
    Le problème ne provient pas de la lib, mais semblerait-il d'une mauvaise compréhension du langage que tu utilises sans vouloir te vexer

    J'espère t'avoir aider.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    t'inquietes pas, je suis déjà habitué à me faire insulter par mon compilateur

    bon sinon ça ne marche pas non plus

    j'ai a peu près tout fait et quand le compilo est pas trop enervé il me sort ça

    undefined reference to `_imp__ImageLoad@8'
    ça m'a mis la puce à l'oreille et je me rend compte que l'ai bien les fichiers headers mais je n'ai pas les fichiers ci-dessous qui sont cités comme required par msdn

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Library Use Imagehlp.lib. 
    DLL Requires Imagehlp.dll.
    le pire c'est que je fais mes essais sous windows mais le script final sera compilé sous linux

    rog

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    ImageLoad() est une fonction Windows exclusivement.
    Et j'ignore si tu le sais, mais "Image" ici ne signifie pas "une Image qu'on regarde" mais "Un fichier exécutable qu'un veut déboguer"...
    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
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    rogerio attention, je ne t'ai pas insulté loin de là. Je suis aussi passé par des erreurs de programmation ou des incompréhensions de ma part concernant l'utilisation de certaines bibliothèques.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour désosser un PE, je pense qu'ImageLoad() est bon dans ce cas (tu n'avais pas précisé au début).

    Par contre, comme ImageLoad() n'existe que sous Windows, ne pense même pas à utiliser ça sous Linux (quant à ReactOS, je ne sais pas s'ils implémentent ImageHlp). Sinon, tu te documentes un peu plus profondément sur le format PE et tu charges le fichier en mémoire comme n'importe quel autre fichier binaire pour regarder dans ses en-têtes...
    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
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <windows.h>
    #include <imagehlp.h>
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char *filename = "C:\\windows\\system32\\";
            char *img_name = "calc.exe";
    	PLOADED_IMAGE ploadImage = ImageLoad(img_name,filename);
    	return 0;
    }
    ---> Ajouter la dépendance à imagehlp.lib dans le makefile ou dans les propriétés du projet (en fonction de l'environnement de dév. utilisé)

    Tu trouveras l'entrypoint de la manière suivante:

    Le pointeur PLOADED_IMAGE pointe sur une structure de type LOADED_IMAGE

    Dans LOADED_IMAGE, tu as un attribut de cette structure qui s'appelle FileHeader qui est un pointeur de type PIMAGE_NT_HEADERS32. Ce pointeur pointe vers une structure de type IMAGE_NT_HEADERS32

    Dans cette structure, tu as un attribut de type IMAGE_OPTIONAL_HEADER32 qui s'appelle OptionalHeader.

    Dans la structure IMAGE_OPTIONAL_HEADER32, tu as un attribut qui s'appelle AddressOfEntryPoint. Tu y es !!

    Donc, pour obtenir ton EntryPoint, tu auras un truc du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ploadImage->FileHeader->OptionalHeader.AddressOfEntryPoint

Discussions similaires

  1. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    Réponses: 1
    Dernier message: 09/05/2003, 18h51
  2. Manipuler JAVA et SSL ?
    Par jah dans le forum Sécurité
    Réponses: 6
    Dernier message: 05/05/2003, 00h30
  3. [VB6]manipuler les semaines en VB ?
    Par kamadji dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/05/2003, 12h33
  4. Réponses: 2
    Dernier message: 18/01/2003, 17h06
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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