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 :

Vérifier la validité d'une bibliothèque dynamique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut Vérifier la validité d'une bibliothèque dynamique
    Bonjour,

    J'ai un programme principal qui charge dynamiquement une bibliothèque à l'exécution.

    Cette bibliothèque a une interface précise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class IBar {
             virtual void foo(void) = 0;
             virtual void faa(void) = 0;
    }
     
    IBar & foo(void);
    Quand je charge ma bibliothèque, je recherche donc le symbole foo et je reçoit un void *.
    Sauf que ma bibliothèque peut avoir plusieurs implémentations différentes et je n'ai aucune garantie de la validité des symboles dans une implémentation.
    De plus, une bibliothèque peut se retrouver invalide si elle a été compilée avec un compilateur différent que celui qui a compilé l'exécutable.

    J'ai donc pensé à compiler une bibliothèque "vide" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class IBar {
             virtual void foo(void) = 0;
             virtual void faa(void) = 0;
    }
     
    IBar & foo(void){}
    Celle-ci pourrait être fournie avec l'exécutable.
    Dès lors, j'aurais les symboles (ex. 3fooZA_IBar_foo_faa) exacts générés par le compilateur et je pourrais les comparer avec ceux de la bibliothèque que je chargerais.

    Par contre, je n'ai pas beaucoup de connaissances sur les ABI des compilateurs, est-ce que vous auriez une idée pour effectuer cette comparaison de la manière la plus efficace possible ?

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Pour g++, j'ai réussi à trouvé deux/trois choses (si on ne déclare pas les fonctions comme "extern C") :

    Les fonctions sont précédées de _Z.
    On donne ensuite la taille du nom de la fonction puis le nom de la fonction.

    Ensuite, pour chaque argument on donne la taille du nom du type de l'argument puis son nom. Le tout précédé de "R" pour une référence et de "P" pour un pointeur.

    Exemple : _Z3fooR4IBar.


    En revanche, impossible de vérifier à vu d’œil le type de l'argument retourné ni de vérifier les classes.
    J'essaye de continuer de creuser.

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Pour les classes, après réflexion, c'est un peu normal de ne rien voir pour une classe virtuelle pure.

    Pour une classe "normale" sans méthodes inlines :
    _ZN3BarC2Ev\00_ZTV3Bar\00_ZN3BarC1Ev\00_ZN3Bar3fooEii\00_ZN3BarC2ERKS_\00_ZN3BarC1ERKS_\00_Z4totoR3Bar\00_ZTI3Bar\00_ZTVN10__cxxabiv117__class_type_infoE\00_ZTS3Bar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Bar
    {
        public :
        Bar(void);
        virtual void foo(int, int);
    };
     
    Bar::Bar(void)
    {
     
    }
     
    void Bar::foo(int,int){}
    Il faut donc que je continue de creuser à ce niveau là.
    Par contre, pour les arguments de retours, je ne sais pas encore comme bien les vérifier...


    EDIT :
    Je peux faire des classes "virtuelles" mais il faut que celui qui implémente la bibliothèque implémente un constructeur, c'est pas génial, mais au moins, on a des symboles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ELF\00\00\00\00\00\00\00\00\00\00>\00\00\00\00`\00\00\00\00\00\00@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00@\008\00\00@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00D    \00\00\00\00\00\00D    \00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00H    \00\00\00\00\00\00H     \00\00\00\00\00H     \00\00\00\00\00\98\00\00\00\00\00\00\A0\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\90    \00\00\00\00\00\00\90     \00\00\00\00\00\90     \00\00\00\00\00\F0\00\00\00\00\00\00\F0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\90\00\00\00\00\00\00\90\00\00\00\00\00\00\90\00\00\00\00\00\00$\00\00\00\00\00\00\00$\00\00\00\00\00\00\00\00\00\00\00\00\00\00P\E5td\00\00\00\9C\00\00\00\00\00\00\9C\00\00\00\00\00\00\9C\00\00\00\00\00\00$\00\00\00\00\00\00\00$\00\00\00\00\00\00\00\00\00\00\00\00\00\00Q\E5td\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00GNU\00A}\C9N\9CmAE\9EQ\CD\FC\F9\EFm\95\00\00\00\00\00\00\00    \00\00\00\00\00\00\00\00\00\88\E4!$D        \00\00\00\00\00\00\00\00\00\B2<\D7Z\BA\E3\92|CE\D5\EC    R\90R=\D8qX\B9\8D\F1"w\8C&\EA\D3\EFe{\8C&\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\008\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00R\00\00\00"\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C8\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\AC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\96\00\00\00\00\00|\00\00\00\00\00\00\00\00\00\00\00\00\002\00\00\00\00\E8 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E0 \00\00\00\00\00\00\00\00\00\00\00\00\00\BF\00\00\00!\00 \00\95\00\00\00\00\00\00\00\00\00\00\00\00\00\A3\00\00\00!\00\00\80     \00\00\00\00\00\00\00\00\00\00\00\00\81\00\00\00!\00\00`     \00\00\00\00\00\00\00\00\00\00\00\00&\00\00\00\00\E0 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\8A\00\00\00\00\00`\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\8C\00\00\00\00\00\00\00\00\00\00\00\00\00\00u\00\00\00\00\00`\00\00\00\00\00\00\00\00\00\00\00\00\00\00__gmon_start__\00_init\00_fini\00_ITM_deregisterTMCloneTable\00_ITM_registerTMCloneTable\00__cxa_finalize\00_Jv_RegisterClasses\00_ZN3BarC2Ev\00_ZTV3Bar\00_ZN3BarC1Ev\00_Z4totoR3Bar\00_ZTI3Bar\00__cxa_pure_virtual\00_ZTS3Bar\00_ZTVN10__cxxabiv117__class_type_infoE\00libstdc++.so.6\00libm.so.6\00libgcc_s.so.1\00libc.so.6\00_edata\00__bss_start\00_end\00CXXABI_1.3\00GLIBC_2.2.5\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EE\00\00\00\00\00\00 \00\00\00ӯk\00\00\007\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00ui    \00\00\00B\00\00\00\00\00\00H     \00\00\00\00\00\00\00\00\00\00\00\000\00\00\00\00\00\00P     \00\00\00\00\00\00\00\00\00\00\00\00\F0\00\00\00\00\00\00\D8 \00\00\00\00\00\00\00\00\00\00\00\00\D8 \00\00\00\00\00h     \00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00p     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\80     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\88     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\80 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\88 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\90 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\98 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\A0 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\A8 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C8 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\D0 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00H\83\ECH\8Bm \00H\85\C0t\E8#\00\00\00H\83\C4\C3\00\00\00\00\00\00\00\00\00\00\00\00\00\00\FF5\82 \00\FF%\84 \00@\00\FF%\82 \00h\00\00\00\00\E9\E0\FF\FF\FF\FF%z \00h\00\00\00\E9\D0\FF\FF\FFH\8D=y \00H\8Dy \00UH)\F8H\89\E5H\83\F8vH\8B \00H\85\C0t    ]\FF\E0fD\00\00]\C3fffff.\84\00\00\00\00\00H\8D=9 \00H\8D52 \00UH)\FEH\89\E5H\C1\FEH\89\F0H\C1\E8?H\C6H\D1\FEtH\8B\D1 \00H\85\C0t]\FF\E0f\84\00\00\00\00\00]\C3fffff.\84\00\00\00\00\00\80=\E9 \00\00u'H\83=\A7 \00\00UH\89\E5tH\8B=\CA \00\E8=\FF\FF\FF\E8H\FF\FF\FF]\C6\C0 \00\F3\C3fffff.\84\00\00\00\00\00H\8D=! \00H\83?\00u\E9^\FF\FF\FFfD\00\00H\8B9 \00H\85\C0t\E9UH\89\E5\FF\D0]\E9@\FF\FF\FFUH\89\E5H\89}\F8H\8BE\F8H\8B% \00H\8DRH\89]\C3UH\89\E5H\89}\F8H\8BE\F8]\C3\00\00H\83\ECH\83\C4\C33Bar\00\00\00; \00\00\00\00\00\00\94\FE\FF\FF<\00\00\00\C4\FF\FF\FFd\00\00\00\E0\FF\FF\FF\84\00\00\00\00\00\00\00\00\00\00zR\00x\90\00\00$\00\00\00\00\00\00P\FE\FF\FF0\00\00\00\00FJw\80\00?;*3$"\00\00\00\00\00\00\00D\00\00\00X\FF\FF\FF\00\00\00\00A\86C W\00\00\00\00\00\00d\00\00\00T\FF\FF\FF\00\00\00\00A\86C I\00\00\00\00\00\00\00\00\00\00\000\00\00\00\00\00\00\F0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EE\00\00\00\00\00\00\00\00\00\00\00\00\00\00\FD\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\8C\00\00\00\00\00\00\00\00\00\00\00\00\00H     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00P     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F5\FE\FFo\00\00\00\00\B8\00\00\00\00\00\00\00\00\00\00\00\00\00\E8\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00
    \00\00\00\00\00\00\00N\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\B0 \00\00\00\00\00\00\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\D8\00\00\00\00\00\00\00\00\00\00\00\00\00\A0\00\00\00\00\00\00\00\00\00\00\00\00\008\00\00\00\00\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\FE\FF\FFo\00\00\00\00`\00\00\00\00\00\00\FF\FF\FFo\00\00\00\00\00\00\00\00\00\00\00\F0\FF\FFo\00\00\00\006\00\00\00\00\00\00\F9\FF\FFo\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\90     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00F\00\00\00\00\00\00V\00\00\00\00\00\00\D8 \00\00\00\00\00GCC: (Debian 4.9.1-15) 4.9.1\00\00.symtab\00.strtab\00.shstrtab\00.note.gnu.build-id\00.gnu.hash\00.dynsym\00.dynstr\00.gnu.version\00.gnu.version_r\00.rela.dyn\00.rela.plt\00.init\00.text\00.fini\00.rodata\00.eh_frame_hdr\00.eh_frame\00.init_array\00.fini_array\00.jcr\00.data.rel.ro\00.dynamic\00.got\00.got.plt\00.data\00.bss\00.comment\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\90\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\B8\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E8\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\A0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\D8\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00
    \000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\8C\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\95\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\9C\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00H     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00P     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00X     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\90     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\80 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\B0 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\D8 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E0 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F1\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00X     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`\00\00\00\00\00\00\00\00\00\00\00\00\00\00.\00\00\00\00\00\A0\00\00\00\00\00\00\00\00\00\00\00\00\00\00A\00\00\00\00\00\F0\00\00\00\00\00\00\00\00\00\00\00\00\00\00W\00\00\00\00\00\E0 \00\00\00\00\00\00\00\00\00\00\00\00f\00\00\00\00\00P     \00\00\00\00\00\00\00\00\00\00\00\00\00\8D\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\99\00\00\00\00\00H     \00\00\00\00\00\00\00\00\00\00\00\00\00\B8\00\00\00\00\F1\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F1\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C1\00\00\00\00\00@    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\CF\00\00\00\00\00X     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F1\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\DB\00\00\00\00\00\B0 \00\00\00\00\00\00\00\00\00\00\00\00\00\F1\00\00\00\00\00\E0 \00\00\00\00\00\00\00\00\00\00\00\00\00\FD\00\00\00\00\00\D8 \00\00\00\00\00\00\00\00\00\00\00\00\00
    \00\00\00\00\90     \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00|\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00`\00\00\00\00\00\00\00\00\00\00\00\00\00,\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00;\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00O\00\00\00\00\8C\00\00\00\00\00\00\00\00\00\00\00\00\00\00U\00\00!\00 \00\95\00\00\00\00\00\00\00\00\00\00\00\00\00^\00\00!\00\00\80     \00\00\00\00\00\00\00\00\00\00\00\00g\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\83\00\00!\00\00`     \00\00\00\00\00\00\00\00\00\00\00\00\8C\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\A6\00\00"\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C2\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F4\00\00\00\00`\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E0 \00\00\00\00\00\00\00\00\00\00\00\00\00+\00\00\00\00\E8 \00\00\00\00\00\00\00\00\00\00\00\00\000\00\00\00\00\E0 \00\00\00\00\00\00\00\00\00\00\00\00\007\00\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00crtstuff.c\00__JCR_LIST__\00deregister_tm_clones\00register_tm_clones\00__do_global_dtors_aux\00completed.6659\00__do_global_dtors_aux_fini_array_entry\00frame_dummy\00__frame_dummy_init_array_entry\00lib2.cpp\00__FRAME_END__\00__JCR_END__\00_GLOBAL_OFFSET_TABLE_\00__TMC_END__\00__dso_handle\00_DYNAMIC\00_Z4totoR3Bar\00_ZN3BarC1Ev\00__gmon_start__\00_Jv_RegisterClasses\00_fini\00_ZTS3Bar\00_ZTI3Bar\00_ITM_deregisterTMCloneTable\00_ZTV3Bar\00_ITM_registerTMCloneTable\00__cxa_finalize@@GLIBC_2.2.5\00_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3\00_ZN3BarC2Ev\00__cxa_pure_virtual@@CXXABI_1.3\00__bss_start\00_end\00_edata\00_init\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\90\00\00\00\00\00\00\90\00\00\00\00\00\00$\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00.\00\00\00\F6\FF\FFo\00\00\00\00\00\00\00\B8\00\00\00\00\00\00\B8\00\00\00\00\00\00P\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\008\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00@\00\00\00\00\00\00\00\00\00\00\00\00\00\E8\00\00\00\00\00\00\E8\00\00\00\00\00\00N\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00H\00\00\00\FF\FF\FFo\00\00\00\00\00\00\006\00\00\00\00\00\006\00\00\00\00\00\00(\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00U\00\00\00\FE\FF\FFo\00\00\00\00\00\00\00`\00\00\00\00\00\00`\00\00\00\00\00\00@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00d\00\00\00\00\00\00\00\00\00\00\00\00\00\A0\00\00\00\00\00\00\A0\00\00\00\00\00\008\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00n\00\00\00\00\00\00B\00\00\00\00\00\00\00\D8\00\00\00\00\00\00\D8\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00
    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00x\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00s\00\00\00\00\00\00\00\00\00\00\00\00\000\00\00\00\00\00\000\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00~\00\00\00\00\00\00\00\00\00\00\00\00\00`\00\00\00\00\00\00`\00\00\00\00\00\00*\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\84\00\00\00\00\00\00\00\00\00\00\00\00\00\8C\00\00\00\00\00\00\8C\00\00\00\00\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\8A\00\00\00\00\00\00\00\00\00\00\00\00\00\95\00\00\00\00\00\00\95\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\92\00\00\00\00\00\00\00\00\00\00\00\00\00\9C\00\00\00\00\00\00\9C\00\00\00\00\00\00$\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\A0\00\00\00\00\00\00\00\00\00\00\00\00\00\C0\00\00\00\00\00\00\C0\00\00\00\00\00\00\84\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\AA\00\00\00\00\00\00\00\00\00\00\00\00\00H     \00\00\00\00\00H    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\B6\00\00\00\00\00\00\00\00\00\00\00\00\00P     \00\00\00\00\00P    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C2\00\00\00\00\00\00\00\00\00\00\00\00\00X     \00\00\00\00\00X    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C7\00\00\00\00\00\00\00\00\00\00\00\00\00`     \00\00\00\00\00`    \00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\D4\00\00\00\00\00\00\00\00\00\00\00\00\00\90     \00\00\00\00\00\90    \00\00\00\00\00\00\F0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\DD\00\00\00\00\00\00\00\00\00\00\00\00\00\80 \00\00\00\00\00\80\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E2\00\00\00\00\00\00\00\00\00\00\00\00\00\B0 \00\00\00\00\00\B0\00\00\00\00\00\00(\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EB\00\00\00\00\00\00\00\00\00\00\00\00\00\D8 \00\00\00\00\00\D8\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F1\00\00\00\00\00\00\00\00\00\00\00\00\00\E0 \00\00\00\00\00\E0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F6\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\FD\00\00\00\00\00\00\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\D0\00\00\00\00\00\00\00\00\00,\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\D0\00\00\00\00\00\00=\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00
    Il faut quand même que je vérifie qu'on peut bien se passer des "extern C" pour utiliser dlsym() et getSymbole().
    Restera plus qu'à trouver comment tenter de vérifier les types de retours et exactement quels symboles rechercher/ignorer pour comparer deux dll efficacement.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 436
    Par défaut
    Heu, pourquoi ne pas utiliser les Framework de composants/plugIns qui sont fait pour ça ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 436
    Par défaut
    >Pour ne pas intégrer de dépendances, je ne veux pas que mon exécutable ai la moindre dépendances.
    Mais bien sûr, t'as même réimplémenté la lib C et le Kernel et tous les drivers, GG.

    Et faire un truc "indépendant" mais qui se base sur un mangling de g++, non documenté, c'est carrément Kafkaïen.

    Tu cherches à réinventer une roue carrée. Et si tu avais pris la peine de voir comment les autres ont implémentés ces Frameworks, que tu décris sans même connaitre, tu aurais vu des choses comme des fonctions implémentant des Design Pattern Factory et des trucs comme de IUID et des CUID venant de Corba et autres IDL, COM, XCOM etc.

    Si ton but est d'avoir une architecture à composant ou à base de plugIn, ouvres les yeux, t'as en 2014, t'es pas un pionnier du Far West.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par bacelar Voir le message
    >Pour ne pas intégrer de dépendances, je ne veux pas que mon exécutable ai la moindre dépendances.
    Mais bien sûr, t'as même réimplémenté la lib C et le Kernel et tous les drivers, GG.



    Et faire un truc "indépendant" mais qui se base sur un mangling de g++, non documenté, c'est carrément Kafkaïen.
    Qui a dit que je me basais sur le mangling de g++ ?
    Pour le moment je cherche à comprendre le fonctionnement.

    Tu cherches à réinventer une roue carrée. Et si tu avais pris la peine de voir comment les autres ont implémentés ces Frameworks, que tu décris sans même connaitre, tu aurais vu des choses comme des fonctions implémentant des Design Pattern Factory et des trucs comme de IUID et des CUID venant de Corba et autres IDL, COM, XCOM etc.
    Ah ? Et avec un DP Factory, IUID ou CUID, je peux vérifier la compatibilité d'ABI C++ entre les différents compilateurs ?

    En quoi un DP Factory pourrait m'aider ?
    D'ailleurs j'ai un peu de mal à voir en quoi un CUID va m'aider à protéger ma dll d'une mauvaise implémentation d'un utilisateur.

    Et puis bon, j'ai aussi le droit de faire ce que je veux non?
    Si j'ai envie de coder un pong, j'ai le droit non? Oui, cela a déjà été codé un nombre incalculable de fois et alors ?

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    dlsym est très bête et va rechercher le symbole tel quel.

    Si on utilise extern "C", il ne va écrire que toto au lieu de _Z4totoP4IBar.

    Donc soit on perd l'information en utilisant extern "C" soit on la conserve mais il faudra écrire _Z4totoP4IBar à la place, ce qui dans mon cas est pas très gênant vu que je peux faire des recherches dans la "dll vide".

    Citation Envoyé par bacelar Voir le message
    Heu, pourquoi ne pas utiliser les Framework de composants/plugIns qui sont fait pour ça ?
    Pour ne pas intégrer de dépendances, je ne veux pas que mon exécutable ai la moindre dépendances.

Discussions similaires

  1. Vérifier la validité d'une ip ?
    Par drweb001 dans le forum Langage
    Réponses: 8
    Dernier message: 20/12/2006, 19h24
  2. Vérifier la validité d'une adresse email
    Par Tourix dans le forum Langage
    Réponses: 9
    Dernier message: 09/10/2006, 16h56
  3. vérifier la validité d'une date
    Par youp_db dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2006, 11h38
  4. vérifier la validité d'une date
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2006, 16h11
  5. vérifier la validité d'une url (abs/rel)
    Par jacky12 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/05/2006, 13h59

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