c++ - createprocessa - createprocess



Windows EXE/DLL: qu'est-ce qu'une "image compressée" (1)

Une "image compressée" est une image dans laquelle le code exécutable est compressé avec l'intention de réduire le fichier. La réduction de la taille de fichier typique oscille autour de 50%. Il utilise un "chargeur" ​​à l'exécution pour décompresser les données en code exécutable avant qu'il ne commence à s'exécuter. Il était utile dans les temps anciens avec une capacité de stockage de disque limitée et une bande passante réseau limitée.

Aujourd'hui, avec les disques téraoctets et les réseaux mégabits, c'est une odeur, l'emballage peut également être exploité pour cacher le code malveillant. Sûrement la raison pour laquelle Process Explorer le colore différemment.

L'heuristique exacte utilisée par PE pour détecter l'empilement n'est pas documentée. Bien sûr que non, cela le rendrait trop facile à contourner. Ce n'est pas trivial, il n'y a pas de façon standard de mettre en place l'emballage. En gros, il regarderait les sections dans le fichier exécutable et lèverait le drapeau bleu quand trop de celui-ci ressemble à du code non-exécutable.

Et oui, quand vous utilisez / ZI alors il y en aura beaucoup. Plus significatif est l'option de l'éditeur de liens / INCREMENTAL, activée automatiquement lorsque vous utilisez / ZI. Ce qui vous permet d'écrire du code pendant le débogage, l'option Modifier + Continuer. Reliez rapidement le fichier exécutable sans que l'éditeur de liens ait à générer de nouveau le fichier. Cela ne peut fonctionner que lorsqu'il y a beaucoup d'espace vide dans le fichier exécutable, disponible pour ajouter de nouveaux octets de code machine. C'est un drapeau bleu.

Ce n'est pas une réelle préoccupation, bien sûr, votre utilisateur verra seulement la version Release de votre programme. Qui est construit sans / ZI et sans / INCREMENTAL.

https://ffff65535.com

Process Explorer affiche parfois un fichier EXE comme "image compressée", mais qu'est-ce que cela signifie.

Ce que j'ai découvert est: Compiler un exe (en utilisant Visual C ++ 2010) avec l'option /ZI donne une image empaquetée, mais pas /Zi . Pourquoi une telle différence?

BTW: une DLL compilée avec /ZI est également considérée comme "empaquetée" et marquée en violet.





process