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

Free Pascal Discussion :

Récupérer le nom d'une fonction dans une librairie


Sujet :

Free Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut Récupérer le nom d'une fonction dans une librairie
    Bonjour,

    Je souhaiterais savoir s'il est possible (avec FreePascal) de récuperer d'une librairie dynamique (dll,.so, ...) le nom des fonctions contenues dans cette librairie pour ensuite les exécuter ?

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 539
    Points
    59 539
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Pour ce qui est d'une DLL, tu peux sans problème récupérer l'adresse d'une fonction qui y est contenue à l'aide de la fonction GetProcAddress :
    http://msdn2.microsoft.com/fr-fr/lib...y5(VS.80).aspx
    Mais il faut connaître le nom de la fonction à récupérer.

    Si le but du jeu est de déterminer la liste des fonctions de la DLL, il faut passer par la fonction MapDebugInformation de l'unité jwaImageHlp.

    Voici un exemple (en Delphi - l'unité jwaImageHlp s'appelle ImageHlp tout court) :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    // by Dmitry Streblechenko
    uses
      Forms,
      Classes,
      SysUtils,
      Dialogs,
      ImageHlp, // routines to access debug information
      Windows;
     
    procedure ListDLLFunctions(DLLName: String; List: TStrings);
    type
      chararr = array [0..$FFFFFF] of Char;
      var
      H: THandle;
      I,
      fc: integer;
      st: string;
      arr: Pointer;
      ImageDebugInformation: PImageDebugInformation;
    begin
      List.Clear;
      DLLName := ExpandFileName(DLLName);
      if FileExists(DLLName) then
      begin
        H := CreateFile(PChar(DLLName), GENERIC_READ, FILE_SHARE_READ or
          FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if H<>INVALID_HANDLE_VALUE then
          try
            ImageDebugInformation := MapDebugInformation(H, PChar(DLLName), nil, 0);
            if ImageDebugInformation<>nil then
              try
                arr := ImageDebugInformation^.ExportedNames;
                fc := 0;
                for I := 0 to ImageDebugInformation^.ExportedNamesSize - 1 do
                  if chararr(arr^)[I]=#0 then
                  begin
                    st := PChar(@chararr(arr^)[fc]);
                    if Length(st)>0 then
                      List.Add(st);
                    if (I>0) and (chararr(arr^)[I-1]=#0) then
                      Break;
                    fc := I + 1
                  end
              finally
                UnmapDebugInformation(ImageDebugInformation)
              end
          finally
            CloseHandle(H)
          end
      end
    end;
    Sinon, des utilitaires comme PEExplorer peuvent te permettre de lister les fonctions d'une librairie.


Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Récupérer variable d'une fonction dans une fonction
    Par ForceFlo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/10/2013, 22h47
  3. récupérer une variable d'une fonction dans une classe
    Par free_dom dans le forum Général Python
    Réponses: 20
    Dernier message: 08/07/2009, 12h35
  4. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  5. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04

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