Fonction ReBaseImage (imagehlp.h)
Modifie l’adresse de chargement de l’image spécifiée, ce qui réduit le temps de chargement requis pour une DLL.
Vous pouvez également utiliser l’outil Rebaser. Cet outil est disponible dans Visual Studio et le Kit de développement logiciel (SDK) Windows.
Notez que cette fonction est implémentée en tant qu’appel à la fonction ReBaseImage64 .
Syntaxe
BOOL IMAGEAPI ReBaseImage(
[in] PCSTR CurrentImageName,
[in] PCSTR SymbolPath,
[in] BOOL fReBase,
[in] BOOL fRebaseSysfileOk,
[in] BOOL fGoingDown,
[in] ULONG CheckImageSize,
[out] ULONG *OldImageSize,
[out] ULONG_PTR *OldImageBase,
[out] ULONG *NewImageSize,
[in, out] ULONG_PTR *NewImageBase,
[in] ULONG TimeStamp
);
Paramètres
[in] CurrentImageName
Nom du fichier à rebaser. Vous devez spécifier le chemin d’accès complet au fichier, sauf si le module se trouve dans le répertoire de travail actuel du processus appelant.
[in] SymbolPath
Chemin utilisé pour rechercher le fichier de symboles correspondant. Spécifiez ce chemin pour les images exécutables qui ont des informations symboliques, car lorsque les adresses d’image changent, le fichier de base de données de symboles (PDB) correspondant peut également avoir besoin d’être modifié. Notez que même si le chemin du symbole n’est pas valide, la fonction réussit si elle est en mesure de rebaser votre image.
[in] fReBase
Si cette valeur est TRUE, l’image est redéployée. Sinon, l’image n’est pas rebasée.
[in] fRebaseSysfileOk
Si cette valeur est TRUE, l’image système est rebasée. Sinon, l’image système n’est pas rebasée.
[in] fGoingDown
Si cette valeur est TRUE, l’image peut être rebasée sous la base donnée ; sinon, il ne peut pas.
[in] CheckImageSize
Taille maximale à laquelle l’image peut atteindre, en octets, ou zéro s’il n’y a aucune limite.
[out] OldImageSize
Pointeur vers une variable qui reçoit la taille d’image d’origine, en octets.
[out] OldImageBase
Pointeur vers une variable qui reçoit la base d’image d’origine.
[out] NewImageSize
Pointeur vers une variable qui reçoit la nouvelle taille d’image après l’opération de rebasement, en octets.
[in, out] NewImageBase
Adresse de base à utiliser pour rebasiser l’image. Si l’adresse n’est pas disponible et que le paramètre fGoingDown a la valeur TRUE, la fonction recherche une nouvelle adresse de base et définit ce paramètre sur la nouvelle adresse de base. Si fGoingDown a la valeur FALSE, la fonction recherche une nouvelle adresse de base, mais ne définit pas ce paramètre sur la nouvelle adresse de base.
[in] TimeStamp
Nouvel horodatage de l’en-tête du fichier image. La valeur doit être représentée dans le nombre de secondes écoulées depuis minuit (00:00:00), le 1er janvier 1970, heure universelle coordonnée, selon l’horloge système.
Si ce paramètre est 0, l’horodatage de l’en-tête du fichier actuel est incrémenté de 1 seconde.
Valeur retournée
Si la fonction réussit, la valeur de retour est TRUE.
Si la fonction échoue, la valeur de retour est FALSE. Pour récupérer des informations d’erreur étendues, appelez GetLastError.
Notes
La fonction ReBaseImage modifie l’adresse de charge souhaitée pour l’image spécifiée. Cette opération implique la lecture de l’image entière et la mise à jour de tous les correctifs, des informations de débogage et de la somme de contrôle. Vous pouvez rebaser une image pour réduire le temps de chargement requis pour ses DLL. Si une application peut s’appuyer sur le chargement d’une DLL à l’adresse de charge souhaitée, le chargeur système n’a pas besoin de déplacer l’image. L’image est simplement chargée dans l’espace d’adressage virtuel de l’application et la fonction DllMain est appelée, le cas échéant.
Toutes les fonctions ImageHlp, telles que celle-ci, sont à thread unique. Par conséquent, les appels de plusieurs threads à cette fonction entraîneront probablement un comportement inattendu ou une altération de la mémoire. Pour éviter cela, vous devez synchroniser tous les appels simultanés de plusieurs threads vers cette fonction.
Vous ne pouvez pas rebasier les DLL qui sont liées à /DYNAMICBASE ou qui résident dans des répertoires protégés, tels que le dossier System32.
En guise d’alternative à l’utilisation de cette fonction, consultez l’option de l’éditeur de liens /BASE .
Configuration requise
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | imagehlp.h |
Bibliothèque | Imagehlp.lib |
DLL | Imagehlp.dll |