La décompilation de Ravenloft : Strahd's possession

Au début je pensais que la relocation table était une sorte de table donnant les adresses mémoires des différentes variables globales du programme mais après quelques succinctes lectures il semble que cela soit plus lié à comment la mémoire été géré par DOS.

Dans le fichier, un élément de la relocation table est en fait une paire de Offset / Segment, chaque valeur étant un entier non-signé sur 16bits. Il s'avère que cette combinaison s'appelle un far pointer, le dernier message de ce lien donne la technique pour récupérer la valeur de l'adresse :

Effectuer un décalage de 4 bits à gauche sur le Segment et ajouter la valeur de l'Offset.

Cette technique est conforme avec l'implémentation qu'en a fait DCC.

De ce que je comprends : un système DOS possède une mémoire de 1Mo, cette mémoire est divisée en segment de 64Ko, du coup l'Offset est l'adresse au sein d'un segment et le Segment désigne quel segment en mémoire.

Malgré tout reste la question de savoir comment le programme fait référence à ces pointeurs et comment il les utilises.

La relocation table de R.EXE nous indique l'utilisation de trois Segment : 0x0000, 0x0255 et 0x026E. Je suppose que le Segment 0x0000 correspond au segment où le Système d'Exploitation décide de charger le programme.

Laissez un commentaire

1 Commentaire

Laissez un commentaire

Vous devez être connecté pour commenter sur le Refuge. Identifiez-vous maintenant ou inscrivez-vous !


Marre des pubs ? Inscrivez-vous !