[SOS] Problème de chargement de la GDT

morgan53 at evhr.net morgan53 at evhr.net
Mar 16 Aou 19:06:31 CEST 2005


Bonjour, et tout d'abord félicitations pour votre série d'articles.
Je développe actuellement mon propre kernel en m'appuyant sur vos codes et articles mais voilà deux jours que je tente de trouver la cause d'un bug et j'espère que vous pourrez m'aider à trouver son orgine. Celui-ci se situe dans la fonction chargée de configurer la GDT.

Jusqu'au chargement du registre par l'instruction lgdt et la mise a jour des segments tout se passe bien. La fonction se termine donc par un classique "leave ret".

Or lors de l'execution de l'instruction "leave" correspondant a un "movl %ebp, %esp popl %ebp", je me retrouve a chaque fois avec un esp = ebp + 2. Voici le log de la session de debug gdb: (avec bochs)

0x00201046 <x86_gdt_setup+50>:  leave

Breakpoint 2, 0x00201046 in x86_gdt_setup ()
(gdb) i r ebp esp
ebp            0x205460 0x205460
esp            0x205450 0x205450
(gdb) c
Continuing.

0x00201047 <x86_gdt_setup+51>:  ret

Breakpoint 3, 0x00201047 in x86_gdt_setup ()
(gdb) i r ebp esp
ebp            0x200000 0x200000
esp            0x205462 0x205462
(gdb) 

Du coup, ce décalage fausse la valeur d'ebp, ce qui dépile une mauvaise adresse de retour et se solde par une triple exception et un reboot de bochs.

J'espère que vous pourrez m'apporter un peu d'aide.



Plus d'informations sur la liste de diffusion Sos