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

  1. #1
    Membre actif
    Taille des exécutables augmente avec Delphi 10 ?
    Salut la communauté,

    J'ai voulu migrer une petite dll écrite avec Delphi 7 en la compilant avec Delphi 10. Hormis un changement de format de String, tout se passe bien. La dll fait moins de 150 lignes...

    Je suis surpris par la taille de la dll, et je n'ai trouvé aucun moyen d'y remédier :
    - Avec Delphi 7 : 97 ko
    - Avec Delphi 10.3.3 : 1 100 ko

    Lorsque j'ai recompilé une autre dll écrite en C++ avec Visual Studio, il s'est passé la même chose (le code avait 7 ans...). Mais l'explication était simple : je compilais en mode debug. Une fois passé en "release", tout est rentré dans l'ordre.

    J'ai cherché dans Delphi 10, je suis passé en "release" (peut être mal ?), mais rien n'y fait, ma dll a grossi...

    Je sais qu'à l'air de la fibre et du cloud, tout le monde se moque de la taille d'un fichier. Mais j'aimerai comprendre

    Avez vous des idées sur le sujet ?

  2. #2
    Membre émérite
    Bonsoir,

    tu n'y peux rien, c'est dans l'air du temps. Les exe n'ont cessés d'augmenter de taille depuis D7 (et même D3 !)

    je pense qu'il doit y avoir un tas de trucs inutiles "à l'intérieur". Mais les experts disent que c'est normal. Pourquoi ? mystère.

    Avec FMX, c'est encore pire (mais là cela semble un peu plus normal, vu le multiplateforme)

    A+
    Charly

  3. #3
    Membre émérite
    Bonjour,

    La responsabilité de l'augmentation de la taille des EXE revient en grande partie aux RTTI, qui sont bien pratiques mais ajoute énormément de choses qui font grossir l'application.
    On peut retirer l'utilisation des RTTI en précisant dans chaque unité du projet :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    {$WEAKLINKRTTI ON}
    {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}


    Mais on aura plus accès aux RTTI dans ce cas là. Attention que certaines fonctionnalités de Delphi utilisent les RTTI, comme par exemple les LiveBindings. Donc si on les utilise on doit garder les RTTI.

  4. #4
    Rédacteur/Modérateur

    Matinal ou couche tard Thierry m'a devancé.
    J'exhume quand même le billet de son compagnon des DevDuJeudi qui eux aussi semblent ressortir des limbes
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  5. #5
    Membre actif
    Merci les gars ! Je vais me renseigner sur les RTTI (je ne sais pas ce que c'est )

  6. #6
    Expert éminent sénior
    Citation Envoyé par declencher Voir le message
    Merci les gars ! Je vais me renseigner sur les RTTI (je ne sais pas ce que c'est )
    Run Time Type Information : informations de type à l’exécution.

    quand je place un bouton sur une fiche, il s'appelle Button1 et possède une méthode OnButton1Click...dans la fichier DFM on a son nom et le nom de la méthode sous forme de texte...mais une fois le code compilé, les noms de variables n'existe normalement plus...alors comment Delphi retrouve-t-il la variable Button1: TButton et la méthode OnButton1Click ? justement avec les RTTI, ce sont des meta informations sur les types qui permettent de connaitre le nom des variables.

    c'est utilisé également pour transformer un objet ou un record en JSON par exemple, le nom des champs du record servant de nom de champ JSON sans qu'il soit nécessaire de les donner explicitement, les RTTI contiennent déjà cette information
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre actif
    Salut Paul,

    Merci pour cette explication très claire ! Décris comme ça je comprends que les RTTI sont indispensables alors comment ça fonctionne quand on les retire ?

  8. #8
    Membre averti
    Moi je compresse toujours mes executables, ainsi l'exe de mon application qui fait 24 Mo passe à 8Mo après compression.

    Pour cela j'utilise le logiciel libre UPX: https://fr.wikipedia.org/wiki/UPX

    J'ai intégré cela dans mon script inno setup avant de générer le setup d'installation.

  9. #9
    Expert éminent sénior
    Citation Envoyé par franckcl Voir le message
    Moi je compresse toujours mes executables, ainsi l'exe de mon application qui fait 24 Mo passe à 8Mo après compression.

    Pour cela j'utilise le logiciel libre UPX: https://fr.wikipedia.org/wiki/UPX

    J'ai intégré cela dans mon script inno setup avant de générer le setup d'installation.
    c'est une très mauvaise idée, le défaut de ces solutions c'est qu'elles ont un fort impact sur la mémoire à l'exécution...sauf éventuellement si l'exe est décompressé dans un répertoire temp avant d'être lancé...mais là ce sont les antivirus qui râlent.

    personnellement mes exe ne sont pas compressés, et au lancement ils sollicitent un serveur web pour une mise à jour qui au besoin est téléchargée ZIPée...la taille disque n'a pas bcp d'importance (même si je fais en sorte de limiter la taille: PNG et non BMP par exemple)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Débutant
    Citation Envoyé par franckcl Voir le message
    Moi je compresse toujours mes executables, ainsi l'exe de mon application qui fait 24 Mo passe à 8Mo après compression.

    Pour cela j'utilise le logiciel libre UPX: https://fr.wikipedia.org/wiki/UPX

    J'ai intégré cela dans mon script inno setup avant de générer le setup d'installation.
    je fais pareil ! et ce depuis toujours !

    je suis étonné que tu ne le recommande pas Paul, en même temps tu soulignes quelque chose de très important, qui tue souvent tous mes efforts : les antivirus !!!

    je ne pense pas que se soit lié à l'utilisation d'un packer, mais si le taux de détection est réduit, je suis prêt à ne plus compresser ! parce qu'avec les connexions internet qu'on a de nos jours, 30 ou 50 mo, c'est vite téléchargé donc je suis moins désavantagé qu'il y a 10 ans par rapport à la taille de l'exe !

    il me semble même qu'à un moment donné, un projet compilé, même vide, était détecté par certain antivirus !

    comment expliquer à un utilisateur labda que sont antivirus dit faux ? comment le convaincre à le désactiver ? sachant que l'expliquer comment exclure est un véritable parcours du combattant !!!

  11. #11
    Expert éminent sénior
    bon comme ça fait très longtemps que je n'ai pas testé UPX et que je ne voudrais pas répéter bêtement quelque chose qui n'est plus vrai...j'ai fait le test

    j'ai une appli Delphi de 21.4Mo
    en la passant dans la dernière version de UPX en mode --brute, elle passe à 7,08Mo...pas mal !

    1) je lance l'appli normale, elle prend 11,5Mo en RAM
    2) je lance l'appli UPX, elle prend 33,4Mo en RAM

    ça c'est juste le lancement qui affiche la boîte de login

    1) je lance l'appli et charge quelques données BDD je passe à 27,6Mo
    2) meme manip sur UPX 49,7Mo

    à vu de nez on a une copie de l'exe en mémoire (11.5 + 21.4 = 32.9) (27.6 + 21.4 = 49) alors que l'exe seul n'est pas chargé totalement...ie les ressources sont chargées à la demande.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #12
    Débutant
    j'ai tellement pris l'habitude de passer à upx que je ne m'étais jamais soucié, comme quoi, ce poste m'a fait prendre conscience de quelques chose

    et concernant les antivirus qui détectent quel est ton point de vu ? embarcadero ne peut rien faire du côté des antivirus ? c'est pas normal qu'il nous détecte aussi facilement !

  13. #13
    Membre averti
    Citation Envoyé par Paul TOTH Voir le message

    1) je lance l'appli normale, elle prend 11,5Mo en RAM
    2) je lance l'appli UPX, elle prend 33,4Mo en RAM
    Oui effectivement, je confirme, l'application compressée occupe plus de RAM.

    1) Je lance l'appli normale qui occupe 24Mo (24097Ko) sur disque , elle prend 63Mo (63508Ko) en RAM (avec tous les fichiers annexes qui sont chargés)
    2) Je lance la même appli mais compressée qui occupe 8Mo (8095Ko) sur disque, elle prend 87Mo (87528Ko) en RAM.

    La différence en RAM est de 24020Ko soit pratiquement la taille de l'exécutable non compressé.

  14. #14
    Expert éminent sénior
    J'ai aussi utilisé UPX car c'était la coutume dans la société, j'ignore pourquoi, je suppose que c'était principalement parce que les EXE s'auto-téléchargaient sur les Postes utilisateurs (le CITRIX étant à l'époque reservé aux utilisateurs externe en VPN)
    On a eu une version qui d'ailleurs était mis en quarantaine par l'antivirus 'UPX + AutoUpgrade' (j'avais viré la lib AutoUpgrade par un simple système de BAT, plus de soucis et surtout, l'utilisateur n'avait pas le choix)

    Quand tout le monde est passé en CITRIX sur des Servers 2012, on a constaté que Windows conservaient une copie en mémoire (on pouvait changer le fichier et ça mettait rien à jour) tant qu'un seul utilisateur était connecté et tous les utilisateurs conservaient cette version (au lieu de lancer cette du fichier)

    Du coup, comment se passe la consommation mémoire initial du chargement ? une seule conso pour tous les utilisateurs de ce serveur de la ferme ?
    Je me demande si le fait qu'il soit en UPX avait une incidence sur ce phénomène de cache ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  15. #15
    Expert éminent sénior
    ceci dit, cela peut avoir un intérêt...on sait que la mémoire contient une copie de l'exe décompressé...mais du coup, tous les accès sont hyper rapides.

    par contre sur un Terminal Server/Citrix, ça peut être catastrophique sur l'usage mémoire puisque toutes les instances tournent sur la même machine et que chaque instance possède sa propre copie décompressée.

    Et pour ce qui est de la mise à jour, ce n'est pas propre à Citrix, à ma connaissance, Windows ne sait pas lire deux versions d'un même fichier...à l'époque ou je bossais en réseau Novell, je lançais le programme depuis le disque partagé, et la première chose qu'il faisait c'était de se copier localement (cf MakeLocal bien qu'il date un peu ), comme ça je pouvais toujours mettre à jour la version en réseau...une autre approche est d'avoir un numéro de version dans le nom de l'exe...et éventuellement un launcher comme point d'entrée afin d'avoir un raccourci fixe.

    et les antivirus, c'est juste la merde...chez Avast il est possible de s'inscrire pour déposer les exe sur leur serveur FTP afin qu'ils passent en Whitelist.

    Tient d'ailleurs je me demandais si le fait de signer ses exe avait une incidence sur la détection de virus ou pas...le savez vous ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  16. #16
    Débutant
    @Paul TOTH, les antivirus, de la merde, je confirme ! à cause de leur manège à tout détecter l'utilisateur ne peut même plus savoir ce qui est vrai et ce qui est faux ! du coup soit il bloque tout et se prive de plein de choses, ou soit il accepte tout, et peut se faire infecter un jour ou l'autre !

    à un moment je contactais les antivirus pour leur remonter le problème, mais non seulement ils sont de plus en plus nombreux, mais en plus, ils sont de moins en moins réactif

    concernant la signature, je m'étais renseigné à un moment donné, il me semble qu'un membre d'ici me l'avait évoqué, et un mec de chez avast qui m'avait fait la remarque

    après je ne savais pas trop ou et comment m'en procurer, j'étais passé sur un site anglais j'avais posé des questions sur la fiabilité, ils disaient qu'ils délivraient des certificats après avoir validé l'identité de l'acheteur (nom, prénom, adresse) + ne sorte d’attestation sur l'honneur ou utre bidule, au final j'ai laissé tombé

    donc si quelqu'un à ds infos, je suis preneur

  17. #17
    Expert éminent sénior
    Citation Envoyé par Coussati Voir le message
    @Paul TOTH, les antivirus, de la merde, je confirme ! à cause de leur manège à tout détecter l'utilisateur ne peut même plus savoir ce qui est vrai et ce qui est faux ! du coup soit il bloque tout et se prive de plein de choses, ou soit il accepte tout, et peut se faire infecter un jour ou l'autre !

    à un moment je contactais les antivirus pour leur remonter le problème, mais non seulement ils sont de plus en plus nombreux, mais en plus, ils sont de moins en moins réactif

    concernant la signature, je m'étais renseigné à un moment donné, il me semble qu'un membre d'ici me l'avait évoqué, et un mec de chez avast qui m'avait fait la remarque

    après je ne savais pas trop ou et comment m'en procurer, j'étais passé sur un site anglais j'avais posé des questions sur la fiabilité, ils disaient qu'ils délivraient des certificats après avoir validé l'identité de l'acheteur (nom, prénom, adresse) + ne sorte d’attestation sur l'honneur ou utre bidule, au final j'ai laissé tombé

    donc si quelqu'un à ds infos, je suis preneur
    oui ça c'est le principe des certificats électroniques en général...si tu veux que ton certificat certifie ton identité, tu dois en effet faire une démarche qui passe normalement par une rencontre physique avec un organisme accrédité qui va contrôler ton identité avant de te délivrer le certificat. Sinon le certificat ne pourrait rien certifier. et ça c'est un service payant.

    après techniquement un certificat c'est juste deux paires de nombre (des clés) qui sont utilisés dans une formule mathématique. La paire de nombre privée permet d'obtenir un résultat que elle seule peu produire mais que l'autre paire de clé peut contrôler. Tu gardes donc précieusement ta clé privée et l'autre paire est elle connue et référencée comme clé publique qui permet donc de connaitre l'identité attachée au certificat et de vérifier que le document (ici l'exécutable) a bien été signé avec la clé privée que toi seul détient.

    le calcul en question c'est un hash SHA1 (ou SHA256) du fichier, élevé à la puissance e et dont on prend le modulo n (la paire de clé privée)...e et n étant de grands entiers premiers avec pleins de bits pour que ce soit compliqué à retrouver. Ensuite, avec la clé publique, si tu fais la même opération sur le résultat, donc signature à la puissance d modulo n, tu dois retrouver le hash de l'exe...si c'est le cas, c'est que le fichier n'a pas été modifié (le hash est bon) et que ce hash a été chiffré par ta clé privée...on peut en déduire que c'est bien l'application que tu as délivré.

    après ça ne garanti pas que tu n'as pas un virus dans l'application, mais ça permet de savoir que c'est bien toi qui en est l'auteur et qu'elle n'a pas été modifiée depuis....si les antivirus considèrent que tu es un fournisseur de confiance, ils peuvent mettre toutes tes applications en whitelist (mais ça je ne sais pas s'ils le font)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  18. #18
    Membre actif
    Très intéressant votre échange !

    Ces jours ci je me suis penché sur la signature de l'exe, pensant qu'avec un Let's encrypt ou solution accessible équivalente, je pourrai au moins limiter les alertes de Windows à l'installation.
    Chez certains utilisateurs les antivirus ralent mais c'est très rare, je n'ai pas trouvé de règle et je n'ai jamais changé mon appli pour les contenter.

    J'ai finalement laissé tombé le certificat. C'est minimum 80euros par an d'après mes recherches, et pour un soft gratuit, sans achat inapp et sans pub, qui s'adresse à une petite communauté de bidouilleurs passionnés, je n'ai pas envie de faire grossir la facture. Je paie déjà le serveur, et je passe bénévolement un temps de dingue sur l'appli (et ce n'est pas mon métier...).

  19. #19
    Expert éminent sénior
    Citation Envoyé par declencher Voir le message
    Très intéressant votre échange !

    Ces jours ci je me suis penché sur la signature de l'exe, pensant qu'avec un Let's encrypt ou solution accessible équivalente, je pourrai au moins limiter les alertes de Windows à l'installation.
    Chez certains utilisateurs les antivirus ralent mais c'est très rare, je n'ai pas trouvé de règle et je n'ai jamais changé mon appli pour les contenter.

    J'ai finalement laissé tombé le certificat. C'est minimum 80euros par an d'après mes recherches, et pour un soft gratuit, sans achat inapp et sans pub, qui s'adresse à une petite communauté de bidouilleurs passionnés, je n'ai pas envie de faire grossir la facture. Je paie déjà le serveur, et je passe bénévolement un temps de dingue sur l'appli (et ce n'est pas mon métier...).
    Let's encrypt c'est gratuit mais ça ne fonctionne que pour les site web, car la seule vérification qu'ils font c'est que tu es capables de mettre une information donnée sur le site à certifier...mais on ne sait absolument rien sur ton identité...du coup c'est très limité comme solution, tout hacker qui prend la main sur un site peu lui créer un certificat, il faut simplement renouveler l'opération tous les 90 jours (durée de vie des certificats Let's Encrypt)...ça n'est donc évidemment pas adapté pour certifier un logiciel.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  20. #20
    Débutant
    Paul TOTH merci pour ton explication concernant le fonctionnement des certificats

    mais je pense que les antivirus ne se cassent pas la tête plus que ça ... du moment que tu n'es pas certifié et qu'ils détectent 2-3 procédures / fonctions louchent, hope ils te mettent positif

    le pire dans tout ça, c'est que ce n'est pas une détection heuristique, vu qu'après la compilation très peu (ou aucun) antivirus ne détectent

    ils ont donc eu mon application entre leur main, et l'ont ajouté à leur base en tant que positif ! et j'ai comme l'impression que le site virustotal y est beaucoup pour quelque chose !

    mon application est gratuite certes, mais touche du public assez novice en informatique, et ces alertes antivirus rebutent pas mal de monde ! si je dois payer un certificat ou un service, je peux faire l'effort du moment que c'est efficace et pas trop onéreux ... mais j'aimerais éviter quand même de distribuer mes noms aux prénoms à des utilisateurs que je ne connais pas forcément, ou mettre publiquement des informations personelles