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 :

DLL - Demande d'explications


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 97
    Points
    97
    Par défaut DLL - Demande d'explications
    Bonjour,

    Je m'en remets à vous car je me pose de grandes questions au sujet des DLL. J'espère avant tout que ma questions trouvera sa place dans ce forum.

    Pour le contexte : je dispose de compétences en développement web (PHP plutôt qu'ASP). En Objective-C et en Java. Je m'intéresse de plus en plus au C#, langage avec lequel j'ai vu qu'il était possible de créer des DLL (voilà pourquoi je poste ici).

    Aujourd'hui, je me demande quel est le mode de fonctionnement des DLL, la logique qui va derrière. Pour moi, jusqu'à aujourd'hui, une DLL c'est une library, qui contient un certain nombre de méthodes, c'est un moyen de "compartimenter" le projet tout en ayant la possibilité de le modifier facilement. Par exemple, si j'ai un logiciel pour dessiner, je vais avoir une DLL qui va définir toutes mes formes et paramètres de pinceaux. Comme ça, si demain je veux en ajouter une, j'ai juste à modifier cette DLL et la remplacer.
    Est-ce bien ainsi que fonctionnent ces fichiers ?

    Si je me pose toutes ces questions, c'est parce qu'en tant que joueur occasionnel, je joue à des jeux de shoot en ligne (Combat Arms en l’occurrence) et je me suis demandé comment fonctionnaient les logiciels de hack, comment un programme peut en modifier un autre sans que cela ne pose de problèmes de sécurité. Là je me suis rendu compte qu'en faite, il s'agissait de DLL. Mais, ces DLL ont toutes des noms différents donc j'en suis venu à me demander, est-ce qu'il suffit d'insérer une DLL custom dans le dossier d'un logiciel pour qu'il l'interprète ? Cela me semble impossible, il faut bien que quelque part dans le code de base, il y ai un appel à la dll non ?
    Comment ces dll interagissent avec le logiciel ?

    Enfin, pour comprendre d'avantage le fonctionnement et trouver plus de réponses, je souhaiterais savoir s'il est possible et facile de réaliser une DLL qui, par exemple, ajoute un bouton à la calculatrice Windows, un simple bouton qui au clique affiche "Hello World" ? Est-ce que dans le principe, la modification d'un logiciel comme ça est légale et d'un point de vue sécurité, est-ce que les anti-virus l'acceptent ?
    Si c'est facile et possible, auriez-vous des tutoriaux sous la main pour me guider ?


    Pour finir avec toutes mes questions et si je ne me trompe pas en affirmant qu'une DLL est réalisable en C#, je crois savoir qu'elle l'est aussi en C++. Concrètement, y aura-t-il une différence sur le rendu en fonction du langage utilisé pour le développement ? Est-ce que l'une sera plus rapide en terme de temps d'exécution que l'autre, ou seront-elles parfaitement identique ? Si cela dépend des compilateurs, est-ce que ceux pour C++ ont un meilleur rendu que celui de Visual Studio pour le C# ?

    Merci à vous d'avoir pris le temps de me lire, j'espère vraiment ne pas faire fausse route depuis le début.
    Et merci d'avance à ceux qui apporteront des réponses à mes questions.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Une DLL est une Librairie Dynamique.

    Au sens C, une DLL contient uniquement des fonctions qu'elle exporte pour qu'un programme puisse les appeler.

    Une DLL peut aussi exposer des classes (en C#, on appelle celà une assembly).

    Le principe de la DLL est que le programme qui va l'utiliser s'est que cette DLL contient la fonction "TOTO" par exemple, et donc, appeler la fonction TOTO...

    Evidemment, il est possible de changer et de faire une DLL avec le même nom qui exposera la même méthode TOTO en changeant le code.


    Pour prendre les questions d'en l'ordre:

    L'histoire des formes et pinceaux:
    Une DLL contient des choses... S'est au programme de "découvrir" ce que contient la DLL ou bien à la DLL de fournir des fonctions qui disent à un programme ce qu'elle contient pour être exploitée... On n'a pas de "magie" donc, c'est pas parce que je vais rajouter une "forme ou un pinceau" que mon programme va le voir. Il faut définir un mode d'échange, d'analyse, bref, pas simple du tout (un sujet à lui même)...

    Pour ton HACK, j'ai répondu... souvent, en remplaçant une DLL par une autre exposant les mêmes fonctions, on va pouvoir "hacker".. à condition que les fonctions exposées soient identiques en terme de prototype (même type retourné, meme arguments, etc...)

    Calculatrice Windows:
    Réponse : Non, ce n'est pas simple... et la DLL n'est qu'une librairie. donc, elle ne fait que rendre un service quand on lui demande de réaliser une action... Si la calculatrice de Windows s'appuie sur une DLL pour obtenir les boutons à afficher ou leur comportement, là, il est envisageable de modifier ce comportement sinon, il te faut faire un programme à part.

    Une DLL en C# est une assembly.

    Un programme C++ ou C ne peut pas appeler facilement une DLL C#. Donc, si ton objectif final est de hacker, il te faut faire du C++...

    C++ / C#...
    au niveau rendu, performance, c'est très proche... par contre, le C#, c'est un monde ou la mémoire est géré par un garbage collector, le monde C++ n'en a pas.. C++ et C#, s'est 2 philosophies différentes et en fonction de ce que tu veux "hacker", il faut regarder...

    Si la DLL à "hacker" est en .Net, autant écrire une DLL en C#... sinon, si c'est du C++, tu fais ta DLL en C++...

    Voilà

    Difficile de t'en dire plus sans écrire un article complet !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par oOXimOo Voir le message
    Pour le contexte : je dispose de compétences en développement web (PHP plutôt qu'ASP). En Objective-C et en Java. Je m'intéresse de plus en plus au C#, langage avec lequel j'ai vu qu'il était possible de créer des DLL (voilà pourquoi je poste ici).
    Tu as bien raison de t'intéresser à C#, qui est un excellent langage, mais le fait qu'on puisse créer des DLLs n'est pas vraiment un argument pertinent, vu que la plupart des langages ont cette possibilité ou une possibilité équivalente...

    Citation Envoyé par oOXimOo Voir le message
    Aujourd'hui, je me demande quel est le mode de fonctionnement des DLL, la logique qui va derrière. Pour moi, jusqu'à aujourd'hui, une DLL c'est une library, qui contient un certain nombre de méthodes, c'est un moyen de "compartimenter" le projet tout en ayant la possibilité de le modifier facilement. Par exemple, si j'ai un logiciel pour dessiner, je vais avoir une DLL qui va définir toutes mes formes et paramètres de pinceaux. Comme ça, si demain je veux en ajouter une, j'ai juste à modifier cette DLL et la remplacer.
    Est-ce bien ainsi que fonctionnent ces fichiers ?
    Oui c'est à peu près ça. Mais il faut quand même que le programme sache comment utiliser la DLL, donc tu auras sans doute besoin de le modifier aussi pour tirer parti de ce qui a été ajouté à la DLL (à moins que le code soit écrit de façon à faire abstraction du type de forme et puisse dynamiquement utiliser toutes les formes disponibles)

    Citation Envoyé par oOXimOo Voir le message
    Si je me pose toutes ces questions, c'est parce qu'en tant que joueur occasionnel, je joue à des jeux de shoot en ligne (Combat Arms en l’occurrence) et je me suis demandé comment fonctionnaient les logiciels de hack, comment un programme peut en modifier un autre sans que cela ne pose de problèmes de sécurité. Là je me suis rendu compte qu'en faite, il s'agissait de DLL. Mais, ces DLL ont toutes des noms différents donc j'en suis venu à me demander, est-ce qu'il suffit d'insérer une DLL custom dans le dossier d'un logiciel pour qu'il l'interprète ? Cela me semble impossible, il faut bien que quelque part dans le code de base, il y ai un appel à la dll non ?

    Comment ces dll interagissent avec le logiciel ?
    Non, il ne suffit pas d'insérer une DLL custom pour qu'elle soit utilisée par le programme (sauf dans le cas de plugins, mais c'est un cas particulier). En général les hacks consistent à remplacer une DLL ou un exécutable pour changer son code. Simplement ajouter une DLL ne sert à rien si le programme ne l'utilise pas.

    Citation Envoyé par oOXimOo Voir le message
    Enfin, pour comprendre d'avantage le fonctionnement et trouver plus de réponses, je souhaiterais savoir s'il est possible et facile de réaliser une DLL qui, par exemple, ajoute un bouton à la calculatrice Windows, un simple bouton qui au clique affiche "Hello World" ? Est-ce que dans le principe, la modification d'un logiciel comme ça est légale et d'un point de vue sécurité, est-ce que les anti-virus l'acceptent ?
    Si c'est facile et possible, auriez-vous des tutoriaux sous la main pour me guider ?
    Facile ? non, sûrement pas. Possible ? Peut-être, mais pas sans modifier l'exécutable de la calculatrice ou une des DLL qu'il utilise... et si tu fais ça, c'est même pas l'antivirus qui va gueuler, mais le système lui-même, car il vérifie l'intégrité des programmes du système.


    Citation Envoyé par oOXimOo Voir le message
    Pour finir avec toutes mes questions et si je ne me trompe pas en affirmant qu'une DLL est réalisable en C#, je crois savoir qu'elle l'est aussi en C++.
    Oui, mais ce n'est pas le même type de DLL... En C++ tu fais du code natif (directement interprétable par le processeur), alors qu'en C# c'est du code .NET, qui cible une machine virtuelle (appelée Common Language Runtime), et qui sera traduit en code natif lors de l'exécution. C'est à peu près le même principe qu'avec la VM Java. Une application native ne peut pas (en tous cas pas simplement) utiliser une DLL .NET.

    Citation Envoyé par oOXimOo Voir le message
    Concrètement, y aura-t-il une différence sur le rendu en fonction du langage utilisé pour le développement ? Est-ce que l'une sera plus rapide en terme de temps d'exécution que l'autre, ou seront-elles parfaitement identique ? Si cela dépend des compilateurs, est-ce que ceux pour C++ ont un meilleur rendu que celui de Visual Studio pour le C# ?
    Les langages natifs peuvent être un peu plus rapides que les langages utilisant une machine virtuelle, mais dans la plupart des scénarios ce n'est pas vraiment significatif.

    Pour ce qui est du rendu, tu veux dire l'aspect graphique ? Ca n'a pas grand chose à voir avec le langage, ça dépend plutôt du framework d'interface graphique utilisé... tu peux faire à peu près les mêmes choses en n'importe quel langage, ce sera juste plus ou moins difficile en fonction des frameworks disponibles...

    Citation Envoyé par oOXimOo Voir le message
    j'espère vraiment ne pas faire fausse route depuis le début.
    Je crains que si

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Par contre si tu es dans un soucis de performance et que tu veux développer tes DLL en C ou C++ par exemple, tu peux les utiliser en C# ou même en VB en suivant ce tutoriel

    Moi personnellement, je fait mes DLL soit en VB soit en C# vu que j'utilise ces deux langages.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. DLL - Demande d'explications
    Par oOXimOo dans le forum Débuter
    Réponses: 3
    Dernier message: 04/02/2014, 19h52
  2. [C#] demande d'explication sur un sample msdn
    Par legillou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/06/2006, 17h01
  3. [final]demande d'explication sur ce mot-clé
    Par Invité dans le forum Langage
    Réponses: 10
    Dernier message: 18/04/2006, 11h32
  4. utilisation de code barre - demande d'explication
    Par cortex024 dans le forum Windows
    Réponses: 15
    Dernier message: 16/02/2006, 16h37
  5. Demande d'explication : "return false"
    Par mickeliette dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/10/2004, 10h06

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