|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
Bonsoir,
Je dois créer un petit debugger maison en utilisant un appel système bien pratique, j'ai nommé ptrace. Si on le demande poliment lorsqu'on a arrêté le processus débuggé, on peut rappatrier dans le processus deboggeur une structure avec les valeurs des registres du processus débuggé. Sur mon système, la structure a cette forme: Code :
Que veut dire le double underscore devant le registre de segment? Après avoir écumé le net sans résultats, je m'en remets à un gourou linux de passage pour m'éclairer. Sur la version 64 bits de la structure, je n'ai pas remarqué de zones avec un double underscore devant le registre de segment. Merci pour votre aide |
||
|
|
01
|
|
|
#2 |
|
Membre expérimenté
![]() |
Je précise bien: je ne prétends absolument pas être un gourou. Donc il faut prendre avec précaution ma proposition:
est-ce que cs ne serait pas le segment et __cs l'offset ? |
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
Quel offset?
cs pointe vers une entrée dans la table des descripteurs de segments, dans laquelle on a une base une limite et des vérifications de sécurités. A chaque fois que le processeur addresse qq chose, le processeur additionne cette adresse et la base du segment concerné. Donc si eip pointe sur 1050, et que cs pointe vers un descripteur de segment dont la base est 2000, l'adresse utilisé "réelement" est 3050. Réelement entre guillemets car il y a après la pagination qui modifie encore cette adresse. Edit: Dans des versions plus récentes de la structure, on a plus mais à la place: ce qui revient au même en terme de taille |
|
|
10
|
|
|
#4 | |
|
Membre expérimenté
![]() |
Celui-là :
Citation:
C'est exactement ce que tu décris. D'où ma suggestion: est-ce que ton __cs n'est pas ce bitonio (si vraiment tu ne veux pas l'appeler offset) que tu ajoutes à ton cs ? |
|
|
|
01
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
La phrase que tu cites concerne le mode réel, or je suis en mode protégé.
En mode réel comme ils avaient des registres 16bits et qu'il voulait avoir des adresses sur 20bits, ils ont bricolé un calcul d'adresse: adresse de 16bits (segment) + adresse mais décalé de 4 bits à droite. 1111111111111111 base + 0000000000000001 offset ------------------------------------ 11111111111111110001 adresse finale |
|
|
01
|
Copyright © 2000-2012 - www.developpez.com