En-tête PE et Largeaddressaware non évalués pour les modules DLL?
-
21-12-2019 - |
Question
Dans l'en-tête PE, il y a un drapeau pour indiquer si le binaire est larguaddressaware ou non.
L'en-tête PE lui-même existe pour les deux, * .exe et * .dll.
est-ce vraiment le cas que Windows OS évalue ce drapeau pour l'exécutable parent uniquement?
Est-ce complètement ignoré pour tous les modules DLL?
Alors, pourquoi devrais-je activer le drapeau de laa Linker pour les DLL si personne ne l'évalue?
J'avais ce qui suit:
Existe-t-il un moyen de forcer Windows émettre un avertissement dans le cas où une EXE activée A LAA charge un module qui n'est pas compilé comme laa?
Voir aussi question connexe: inconvénients de l'utilisation / larguaddressaware pour les exécutables Windows 32 bits?
La solution
est-ce vraiment le cas que Windows OS évalue ce drapeau pour l'exécutable parent uniquement?
Oui.
est-il complètement ignoré pour tous les modules DLL?
Oui.
Alors, pourquoi devrais-je activer le drapeau de laa Linker pour les DLL si personne ne l'évalue?
Vous ne devriez pas.Il est inutile de le faire.
J'avais ce qui suit: Existe-t-il un moyen de forcer Windows émettre un avertissement dans le cas où une EXE activée A LAA charge un module qui n'est pas compilé comme laa?
Non, il n'y a pas.
La chose est que le tas est large.Il est partagé par tous les modules.Vous ne pouvez pas avoir d'utiliser un tas LAA et d'autres non.Donc, seul l'exécutable a une chance de prendre cette décision.Le drapeau est dans le format de fichier PE qui est commun pour DLL et EXE.Mais cela n'a que la signification pour les exes.