NewbieContest

Divers => Cracking => Discussion démarrée par: Antilles le 11 Mai 2016 à 18:03:26



Titre: Executable linké statiquement
Posté par: Antilles le 11 Mai 2016 à 18:03:26
Bonjour à tous,

Ca fais très très longtemps que je ne me suis pas connecté ici, ça à bien changé ! J'aime bien.

Je dois changer le comportement d'un exe  dont on me dit qu'il est linké statiquement.

Concrètement qu'est ce que cela change pour moi ?

D'après ce que je sais, il ne serait pas donc possible de modifier le comportement d'une méthode en écrasant une DLL. Je m'égare ?



Titre: Re : Executable linké statiquement
Posté par: dionosis le 12 Mai 2016 à 01:52:50
Salut,

Il y a tout un tas de fonctions dont tu n'écris pas directement le code mais ne fais que les appeler depuis le tiens.

Lorsque tu emploies la fonction malloc() par exemple, voilà ce qu'il se passe :
 - soit tu lies statiquement, auquel cas le corps de la méthode sera copié directement dans le binaire produit
 - soit tu lies dynamiquement, auquel cas le code n'existera pas dans le binaire produit mais l'os l'importera au loadtime (msvcrX.dll sous windows)

Lier dynamiquement produira un binaire plus petit et si un bug dans la fonction malloc est découvert puis corrigé, celui-ci sera corrigé avec une mise à jour de la runtime sans que tu n'ais à reproduire et livrer ton binaire.
En revanche ça implique que la runtime correpondante soit présente sur la machine exécutant le binaire, sans quoi celui-ci ne pourra pas fonctionner correctement (message d'erreur au chargement).

Lier statiquement produira un binaire plus lourd et si un bug dans la fonction malloc est découvert puis corrigé, il te faudra mettre à jour tes outils de dev puis reproduire et livrer ton binaire pour profiter de la correction.
En revanche ton binaire sera autonome et pourra s'exécuter sur une machine ne possédant pas la runtime correspondante.

Passser de l'un à l'autre ne changera rien pour l'utilisateur final pour peu qu'il possède la runtime correspondante commme expliqué ci-dessus.
Dans la majorité des cas, passer de l'un à l'autre se fait en un clic dans ton outils de dev mais impliquera forcément de reproduire et livrer ton binaire.

Edit:
Ca c'est s'il s'agit de la runtime 'système' comme dans mon exemple.
S'il s'agit d'une ou plusieurs autres dll propriétaire(s), passer de l'un à l'autre se fait en incluant la librairie correspondant au mode de liaison souhaité (extension '.lib' généralement).


++


Titre: Re : Re : Executable linké statiquement
Posté par: pixis le 12 Mai 2016 à 02:27:35
Il me semble qu'il y a une petite coquille

- soit tu lies dynamiquement statiquement, auquel cas le corps de la méthode sera copié directement dans le binaire produit
- soit tu lies statiquement dynamiquement, auquel cas le code n'existera pas dans le binaire produit mais l'os l'importera au loadtime (msvcrX.dll sous windows)


Titre: Re : Executable linké statiquement
Posté par: dionosis le 12 Mai 2016 à 12:14:12
Salut,

Citation de: pixis
Il me semble qu'il y a une petite coquille
Yep, tu as raison. J'ai posté ça un peu vite avant d'aller dormir.
Je corrige.

++


Titre: Re : Executable linké statiquement
Posté par: Antilles le 12 Mai 2016 à 16:29:46
Merci pour vos réponses, ça m'a bien aidé.