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

x86 32-bits / 64-bits Assembleur Discussion :

Adressage en mode protégé


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut Adressage en mode protégé
    Bonjour,
    J'ai lu pas mal de cours sur le mode protégé (32 bits) des processeurs, et il subsiste à chaque fois une petite confusion sur le mode d'adressage des données.

    J'ai cru comprendre qu'en mode protégé, les registres de segment contenaient des sélecteurs pointant sur une table de descripteur, indiquant les adresses de début, le niveau de privilège, et la longueur des segments de données, code, et pile. L'assembleur (ou plutôt le lieur) peut sélectionner des adresses pour les données statiques sans tenir compte des autres processus, ces adresses n'étant qu'un offset par rapport au début du segment de données alloué au programme.

    J'ai écrit un court programme de test (syntaxe MASM)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    .data
     
    a 		WORD		 8
    b 		WORD		 3
     
    .code
    main PROC
     
    	mov eax, offset a
            mov ebx, offset b
    exit
    main ENDP
    Quand j'exécute le programme, EAX = 00403000 et EBX = 00403002
    Je ne comprends pas pourquoi des adresses si hautes sont allouées à des données statiques qui devraient se trouver au tout début du segment de données. Cela veut-il dire que ces variables sont allouées plus de 4 mégaoctets après le début de ce segment ? Qu'y a-t-il aux adresses basses ?

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Points : 84
    Points
    84
    Par défaut
    Euh je sais plus mais il me semble que c'est soit la pile, soit le tas enfin je pense

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 378
    Points
    20 378
    Par défaut
    Citation Envoyé par E-Sh4rk Voir le message
    J'ai cru comprendre qu'en mode protégé, les registres de segment contenaient des sélecteurs pointant sur une table de descripteur, indiquant les adresses de début, le niveau de privilège, et la longueur des segments de données, code, et pile. L'assembleur (ou plutôt le lieur) peut sélectionner des adresses pour les données statiques sans tenir compte des autres processus, ces adresses n'étant qu'un offset par rapport au début du segment de données alloué au programme.
    Oui mais l'éditeur de lien va créer un .exe ; il fait le lien en construisant un en-tête ( un PSP header en anglais ) avec ton code/programme en assembleur.
    Une fois ton programme "assemblé" c'est l'OS qui s'occupe d'allouer l'adresse du point d'entrée pour ton programme, l'adresse du début de la pile etc..

    http://www.wotsit.org/list.asp?fc=5

    Citation Envoyé par E-Sh4rk Voir le message
    Quand j'exécute le programme, EAX = 00403000 et EBX = 00403002
    Je ne comprends pas pourquoi des adresses si hautes sont allouées à des données statiques qui devraient se trouver au tout début du segment de données. Cela veut-il dire que ces variables sont allouées plus de 4 mégaoctets après le début de ce segment ? Qu'y a-t-il aux adresses basses ?
    C'est normal que les variables a et b soient aux adresses EAX = 00403000 et EBX = 00403002 parce que c'est le système d'exploitation qui va allouer ces adresses..
    en général Windows place les programmes utilisateurs .exe et .dll à l'adresse 0400000h
    Je dirais que cela n'a pas grand chose à voir avec le mode protégé et c'est même transparent pour toi.
    Si tu fais un programme en assembleur 32bits tu n'as pas à te préoccuper du mode protégé surtout sous Windows ( sinon plantages assurés )

    Windows Me/98/95
    The following table identifies the virtual address space on Windows Me, Windows 98, and Windows 95. Range Usage
    0K - ~64K (0xFFFF) Not writable. This boundary is approximate due to the way the system loads some features of Microsoft® MS-DOS®. This memory is private to the process.
    ~64K (0x10000) -
    4 MB (0x3FFFFF) Reserved for MS-DOS compatibility. This memory is fully readable and writable by the process. However, this range of memory may have some MS-DOS–related structures or code in it, so processes should not arbitrarily read from or write to it. This memory is private to the process.
    4MB (0x400000) -
    2GB (0x7FFFFFFF) Available for code and user data. User data is readable and writable by the process. Code is execute-only. This memory is private to the process.
    2GB (0x80000000) -
    3GB (0xBFFFFFFF) Shared area, readable and writable by all processes. A number of system DLLs and other data are loaded into this space.
    3GB (0xC0000000) -
    4GB (0xFFFFFFFF) System memory, readable or writable by any process. However, this is where low-level system code resides, so writing to this region may corrupt the system, with potentially catastrophic consequences.
    ( tiré du MSDN juillet 2005 )

Discussions similaires

  1. Appel d'interruption DOS ou BIOS sous Windows (mode protégé)
    Par SteelBox dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 30/04/2004, 10h30
  2. [EPROM] Adressage en mode réel
    Par ruda.tom dans le forum Assembleur
    Réponses: 16
    Dernier message: 05/11/2003, 23h56
  3. Passage en mode protégé avec DPMI
    Par Hell_Hibou dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 09/09/2003, 19h04
  4. Les INT en mode protégé
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 05/12/2002, 16h13
  5. Mode protégé pour un OS
    Par Ninkosen dans le forum Programmation d'OS
    Réponses: 2
    Dernier message: 25/11/2002, 13h46

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