|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 22 ![]() |
Bonjour,
je me pose une question a propos du champs "limit" d'un descripteur de "Task State Segment". Normalement la taille minimale d'un TSS est de 104 octets (0x68). Le champ "limit" doit contenir la taille du segment, en octet ou en page. (Manuel Intel Volume 3A 3-13) Citation:
(dans le cas d'un TSS avec le bit G a 0) mais le manuel Intel dit que: (Manuel Intel Volume 3A 6-7) Citation:
Voila ma question... Merci a ceux qui eclaireront ma lanterne |
||
|
|
00
|
|
|
#2 | |
|
Membre du Club
![]() Frédéric Inscription : mai 2009 Messages : 36 ![]() |
Bonjour,
La réponse se trouve dans ton post : Citation:
|
|
|
|
10
|
|
|
#3 | |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 22 ![]() |
Merci de ta réponse mais non je n'ai pas donné la réponse dans mon premier post.
Je sais bien que le manuel Intel autorise 0x67 mais ma question est pourquoi autoriser 0x67 alors que le champ "limit" est sense contenir la taille du segment (donc 0x68)... Sinon je ne crois pas que: Citation:
si la taille de mon segment fait 104 octets et c'est ce qui me fait me demander pourquoi on peut mettre 0x67. Quel est l'interet ? Je suis pas sur d'avoir bien reformulé mon interrogation... |
|
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() passe le balais et l'aspirateur Inscription : mars 2008 Messages : 111 ![]() |
le champ limite contient en fait l'adresse maximum autorisé pour acceder au segment. par exemple pour un segment de 64 octets, la valeur "limit" contiendrat 63 car on peut adresser de 0 à 63
cette confusion vient du faite que les ordinateurs compte a partir de zéro et pas de 1 comme les humains (ça ne vous a jamais semblé estrange que n'ou n'ayont aucun siècle zéro) ah le zéro quel belle invention! |
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 22 ![]() |
Ah oui,
en fait ma confusion vient du fait que lorsque le bit G est a 1 on met effectivement la TAILLE du segment dans le champ limit alors que quand le bit G est a 0 on ne met plus la taille mais la valeur du dernier offset... (effectivement tommy60 tu avais raison) Merci a vous deux. |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() passe le balais et l'aspirateur Inscription : mars 2008 Messages : 111 ![]() |
G c'est la granularité de la limite
quant g = 1 la limite est a multiplier par 4096 (4KiBi) j'ai pas vu d'indication comme quoi c'était différent pour les TSS |
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 22 ![]() |
|
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 22 ![]() |
Bonsoir,
je croyais avoir compris mais je viens de m'appercevoir que non. Dites moi si je me trompe mais si je met le bit G a 1 et que je met la limit a 1, alors je peux acceder a 2 pages: de base + 0x0 a base + 0x1FFF. (pas dans le cas d'un segment en expand-down biensur) Si c'est ca alors effectivement j'avais rien compris. Si vous pouviez me confirmer ce que je viens de dire... merci |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() passe le balais et l'aspirateur Inscription : mars 2008 Messages : 111 ![]() |
de ce que j'avait comprit c'est bien ça mais je ne l'ai pas encore vérifié dans la pratique
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 22 ![]() |
Ok merci de ta confirmation.
Pour ce qui est de la pratique, en debuggant avec bochs (avec qemu aussi) et en affichant des informations sur les segments, j'ai remarque que pour une limite que j'avais mis a 1, il m'affichait limit=0x00001fff. D'ailleurs je viens d'essayer en mettant la limite a 0 sur le meme segment de code et l'execution se deroule correctement (et bochs affiche limit=0x00000fff). Je demandai confirmation pour etre sur de pas avoir compris de travers cette fois. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com