OVH Cloud OVH Cloud

Relocations

8 réponses
Avatar
yarocco
Salut a vous,
Je suis en train d'essayer de refaire la fonction LoadLibrary, bien
sur, elle est un peu basique pour le moment mais j'avance petit a
petit.
Pour le moment, je suis capable de charger un fichier image et faire un
pseudo getProcAddress (que j'ai du recoder pour l'occasion) et de faire
un call dessus.
Le probleme, c'est qu'avec le chargement d'un fichier image qui exporte
des fonctions (souvent les dll) avec des ImageBase de $40000, il faut
les charger autre part qu'a cette adresse car c'est souvent
l'executable "de base" (qui charge la librairie) qui occupe cette
adresse.
Je suppose donc que le loader charge les Dll a un autre emplacement
puis effectue les relocations =E0 faire. C'est ce que j'essaie de faire
en ce moment.
Le probleme, c'est que je bute sur un type de relocation :
IMAGE_REL_BASED_HIGHADJ : The fixup adds the high 16 bits of the delta
to the 16-bit field at Offset. The 16-bit field represents the high
value of a 32-bit word. The low 16 bits of the 32-bit value are stored
in the 16-bit word that follows this base relocation. This means that
this base relocation occupies two slots.
D'apres mon anglais pas terrible du tout (je sais, c'est tres mauvais
en infos), je comprend qu'apres avoir ajoute les 16 bits du Delta aux
16 bits de poids fort d'une donn=E9e de 32 bits , il faut que je recopie
les 16 bits de poids faible de ce dword dans un word qui suit le dword
?
En clair, la memoire peut se representer sur 48 bits ainsi : 16bits
poids fort du dword | 16 bits poids faible du dword | 16 bits poids
faible du dword ?? ou j'ai rien compris :(
Si je me suis trompe sur la facon dont le loader charge les librairies,
dites le moi aussi ;)

Autre chose, je recherche des informations sur la structure de l'objet
point=E9 par un HModule.

Merci d'avance.

Pour voir mes "travaux" : http://glayag.free.fr/Delphi/PeFile.pas (pour
etudier/modifier les PE)
http://glayag.free.fr/Delphi/Emu_Loader.pas (Emulation de l'API)

8 réponses

Avatar
Vincent Burel
"yarocco" wrote in message
news:
Salut a vous,
Je suis en train d'essayer de refaire la fonction LoadLibrary, bien
sur, elle est un peu basique pour le moment mais j'avance petit a
petit.

bizarre ca ! sur quel OS ? parce que sous win, la fonction existe !

VB
Avatar
yarocco
Je sais :)
Premierement, j'essaye de la refaire pour savoir exactement comment
elle marche, en second lieu, pour l'integrer dans mon OS dans un futur
plus ou moins lointain (il me reste quand meme pas mal de chose a finir
avant d'attaquer le loader).

N'y a t-il donc personne pour confirmer/infirmer ma petite traduction
?? :(
Avatar
Vincent Burel
"yarocco" wrote in message
news:
Je sais :)
Premierement, j'essaye de la refaire pour savoir exactement comment
elle marche, en second lieu, pour l'integrer dans mon OS dans un futur
plus ou moins lointain (il me reste quand meme pas mal de chose a finir
avant d'attaquer le loader).

N'y a t-il donc personne pour confirmer/infirmer ma petite traduction
?? :(



ben ici, y'a AMcD qui est prof d'anglais, peut-être pourra t-il te dépanner
! :-)

VB
Avatar
Arnold McDonald
> ben ici, y'a AMcD qui est prof d'anglais, peut-être pourra t-il te
dépanner ! :-)



Désormais, pour toute question sur le format PE, faut me payer :-).

--
Arnold McDonald (AMcD®)

http://arnold.mcdonald.free.fr/
Avatar
Vincent Burel
"Arnold McDonald" wrote in message
news:437dc237$0$18633$
> ben ici, y'a AMcD qui est prof d'anglais, peut-être pourra t-il te
> dépanner ! :-)

Désormais, pour toute question sur le format PE, faut me payer :-).



ha, il fallait bien que ca arrive un jour :-)

VB
Avatar
yarocco
>Désormais, pour toute question sur le format PE, faut me payer :-).



Ohoh... :(
On peut dire que c'est pas sur le PE mais sur l'anglais ?? :)
Avatar
Arnold McDonald
yarocco wrote:

Ohoh... :(
On peut dire que c'est pas sur le PE mais sur l'anglais ?? :)



T'es sûr ? Je veux dire, VRAIMENT sûr ? :-).

--
Arnold McDonald (AMcD®)

http://arnold.mcdonald.free.fr/
Avatar
yarocco
>T'es sûr ? Je veux dire, VRAIMENT sûr ? :-).



Ben, oui, on va faire une exception.
Si tu veux, je te refais le message :

J'ai un probleme de traduction :
IMAGE_REL_BASED_HIGHADJ : The fixup adds the high 16 bits of the delta
to the 16-bit field at Offset. The 16-bit field represents the high
value of a 32-bit word. The low 16 bits of the 32-bit value are stored
in the 16-bit word that follows this base relocation. This means that
this base relocation occupies two slots.

D'apres mon anglais pas terrible du tout (je sais, c'est tres mauvais
en infos), je comprend qu'apres avoir ajoute les 16 bits du Delta aux
16 bits de poids fort d'une donnée de 32 bits , il faut que je recopie
les 16 bits de poids faible de ce dword dans un word qui suit le dword
?
En clair, la memoire peut se representer sur 48 bits ainsi : 16bits
poids fort du dword | 16 bits poids faible du dword | 16 bits poids
faible du dword ?? ou j'ai rien compris :(

Ca parait mieux maintenant ou faut que je creer un nouveau thread sur
le newsgroup ?? :)