IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Eclaircissement sur user_regs_struct


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Eclaircissement sur user_regs_struct
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     struct user_regs_struct {
            __u32 ebx, ecx, edx, esi, edi, ebp, eax;
            unsigned short ds, __ds, es, __es;
            unsigned short fs, __fs, gs, __gs;
            __u32 orig_eax, eip;
            unsigned short cs, __cs;
            __u32 eflags, esp;
            unsigned short ss, __ss;
    };
    Je peine à comprendre à quoi servent les zones __ds, __es, __fs, __gs, __cs, __ss?
    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

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Par défaut
    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 ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    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

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Par défaut
    Celui-là :

    The segment address is always added with a 16-bit offset to yield a linear address.
    http://en.wikipedia.org/wiki/X86_memory_segmentation

    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 ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    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

Discussions similaires

  1. Eclaircissement sur les clé dans un DWH(fact table)
    Par Melvine dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 12/05/2006, 18h46
  2. [Versioning]Quels eclaircissements sur Dll/GAC/References?
    Par chnew dans le forum Framework .NET
    Réponses: 4
    Dernier message: 22/03/2006, 19h11
  3. [RegEx] Eclaircissement sur un formulaire
    Par inferno66667 dans le forum Langage
    Réponses: 11
    Dernier message: 03/12/2005, 18h55
  4. Réponses: 10
    Dernier message: 03/10/2005, 16h42
  5. [VB.NET] Eclaircissement sur la fonction IsDBNull
    Par shinchan dans le forum Windows Forms
    Réponses: 9
    Dernier message: 04/01/2005, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo