2017-02-23 1 views
-1

Lorsque nous vidons PE à partir de la mémoire (MODULE/Process) pourquoi il ne s'exécute pas sans démappage?Pourquoi avons-nous besoin d'un démappage pour devenir un fichier PE valide?

Quels changements dans PE dans la mémoire, qui le rendent incapable d'exécuter directement?

+1

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. –

+0

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

Répondre

0

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.

+1

Cela n'a rien à voir avec une limite de 64 Ko. Le mappage est nécessaire car, dans les premiers temps, la plupart du code n'était pas indépendant de la position et ne pouvait donc pas être chargé sur une adresse arbitraire sans la casser. – Devolus

+0

Merci pour ce détail. –