Le mappage est nécessaire avant l'exécution car vous ne pouvez pas prédire les adresses de chaque DLL et autres ressources en mémoire, ainsi que l'adresse résultant de la mémoire allouée dynamiquement dans votre programme. L'en-tête du fichier PE indique au système d'exploitation comment allouer les segments de mémoire .text
et .data
.
Dans les années 80 et au début des années 90, vous pouvez rappeler les fichiers .COM
. Celles-ci où la copie de la mémoire qui ont été copiés et exécutés (% EIP pointé vers son adresse) directement, car là où limitée à 64kb de données .text.
Difficile de deviner ce que "ne peut pas exécuter" pourrait signifier. Le déchargement d'une DLL mais ayant toujours un appel de vie à une fonction DLL importée est un bogue très courant. Heureux si elle génère un AVE, un jour vraiment mauvais si l'espace d'adresse libéré a été réutilisé par une autre DLL. –
Que voulez-vous dire par "Dump from memory"? Alors qu'il est déjà en cours d'exécution, ou que vous venez de le charger et de le mapper, et de le vider avant que la première instruction ne commence? Fait toute une différence ... – Devolus