2010-09-19 2 views

Répondre

4

Le point d'entrée RVA, point d'entrée adresse brute, et l'adresse de base d'image ne sont pas liés de cette façon.

La base de l'image est « l'adresse préférée du premier octet de l'image lorsqu'il est chargé dans la mémoire ». En d'autres termes, c'est l'adresse virtuelle de l'image quand elle est chargée en supposant qu'il n'y a pas de conflit. S'il y a un conflit d'adresse lorsque l'image est chargée (par exemple, une autre image est déjà chargée dans une plage de chevauchement), alors une nouvelle adresse de base sera choisie pour l'image.

Une RVA est une adresse virtuelle relative. C'est "relatif" dans le sens où il est changé lorsque l'image est réellement chargée. C'est l'adresse lorsque l'adresse de base n'est pas connue (par exemple lorsque l'image n'est pas chargée). Une fois l'image chargée, le RVA devient une adresse virtuelle (VA), une adresse réelle dans la mémoire virtuelle.

La distinction brute vs. RVA est due à l'alignement. Il y a alignement des sections (alignement des sections lorsqu'elles sont chargées en mémoire) et alignement des fichiers (alignement des données brutes dans les sections). L'alignement de section ici est 0x1000 tandis que l'alignement de fichier est 0x200. Le point d'entrée RVA est utilisé pour déterminer le VA du point d'entrée lorsque l'image est chargée (c'est-à-dire que le point d'entrée sera situé à l'adresse virtuelle EntryPoint (rva) + ImageBase). L'adresse brute du point d'entrée est le décalage dans le fichier où se trouve le point d'entrée.

This document a une bonne explication de l'alignement.

+0

Je ne comprends pas tout à fait ce que vous entendez par 'décalage dans le fichier où le point d'entrée est located', pouvez-vous préciser ce? – COMer

+0

Je peux être incorrect, mais je crois comprendre que le point d'entrée a une adresse en mémoire lorsqu'il est chargé (RVA + base d'image), et une "adresse" sur le disque lorsque l'image n'est pas chargée. L '"adresse" sur le disque est vraiment juste le décalage dans le fichier. Donc, si vous voulez commencer à désassembler le point d'entrée sans avoir à charger l'image, vous devez chercher l'adresse du point d'entrée brut dans le fichier. –

+0

Le 'EntryPoint (rva)' devrait être calculé en fonction de 'EntryPoint (raw)' pendant le chargement de l'image, n'est-ce pas? – wamp

Questions connexes