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 :

Utilisation du tas en assembleur


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut Utilisation du tas en assembleur
    Bonsoir.
    Comment faut-il réserver de la place sur le tas pour une utilisation à partir d'un programme en assembleur ?
    Je pensais sous Linux utiliser l'appel système BRK, mais la documentation semble indiquer que cela sert à augmenter la taille mémoire du processus si cela est nécessaire.
    Ou alors le tas est libre d'accès en écriture et lecture à partir de la dernière donnée du segment .bss ?
    Je m'interroge !!

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 065
    Points
    43 065
    Par défaut
    C'est malloc qui gère les allocations dans le tas. Comme tu ne sais pas comment il fait, tu ne peux pas directement taper dans le tas comme ça, sauf à ce que ton programme ne fasse pas d'appels système.
    Si tu veux réserver de la RAM, tu peux aussi passer par mmap, qui va ajouter des pages mémoire dans l'espace de mémoires virtuelles
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonsoir.
    Merci de votre réponse.
    Si les appels système prennent de la place sur le tas réservé au programme, il risque d'y avoir des conflits.
    Cela n'est donc pas conseillé.

  4. #4
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonsoir.
    J'ai réfléchi à votre réponse concernant l'utilisation du tas lors des appels système.
    Un appel système ne s'execute-t-il pas sous forme d' un processus qui a son propre domaine mémoire et donc son propre tas ??

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 065
    Points
    43 065
    Par défaut
    Je me suis mal exprimé, je voulais plutôt parler d'appels aux fonctions de la libc, pas les appels systèmes du noyau. La libc peut utiliser la fonction malloc pour réserver de l'espace mémoire sur le tas, si de ton coté tu le modifie (le tas) avec tes propres fonctions, tu vas le corrompre pour les fonctions de la libc, et la libc risque d'écraser ce que tu as mis aux adresses mémoires occupées par le tas.

    Les appels systèmes, pour la partie userland vont interagir avec les adresses qu'on leur a passé en paramètre, qu'elles soient dans le tas ou non, elles doivent juste être dans l'espace d'adressage du processus.

    Voici l'organisation d'un processus :
    - segment code
    - segment datas
    - segment bss (données non initialisées)
    - tas
    -pile

    Si la taille du tas n'est pas suffisant, malloc va l'agrandir, d’où l'importance de laisser malloc gérer, ou si tu n'utilises pas les fonctions de la libc gérer l'allocation avec mmap voir recréer une fonction malloc.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Ok merci de ces précisions.

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut Question de vocabulaire
    Bonjour,
    Je m'insinue dans la discussion pour des problèmes de vocabulaire.
    Le tas,c'est quoi ?(J'ai simplement une vague idée me suggérant pile donc esp).
    J'utilise la programmation windows (et non pas linux) et le tas connait pas.
    Il y a la pile(segment esp),les data initialisés (ds),les data a allouer au chargement du prog (bss),une mémoire particuliere pour les appels com.
    Les fonctions utilisés varient en fonction de ce qu'on veut.
    Pour la pile,il y a certe malloc et ses dérivés mais aussi memheap ...
    Mais il y a aussi globalalloc....
    Le sujet est vaste.

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 065
    Points
    43 065
    Par défaut
    Pour la pile,il y a certe malloc et ses dérivés mais aussi memheap
    heap en anglais se traduit par tas.

    La pile est différente du tas. La pile se trouve en terme d'adresse à la fin du processus, quand on empile des valeurs l'adresse de la pile est décrémentée se rapprochant du tas.

    Le tas est l'endroit ou se trouvent les zones mémoires allouées. Chaque processus a sa pile et son tas, ceci est valable pour Windows et Linux.

    malloc va taper dans le tas pour allouer de la mémoire. heapalloc doit être la fonction d'allocation mémoire spécifique à Windows, malloc est la fonction portable.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/01/2014, 11h48
  2. Forcer l'utilisation de certaines instructions assembleurs
    Par ottomucha dans le forum Assembleur
    Réponses: 4
    Dernier message: 14/01/2014, 15h33
  3. Utiliser les interruptions en Assembleur sous Delphi
    Par crazyinf dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 01/04/2009, 20h13
  4. utilisation de l'assembleur ?
    Par sali dans le forum C
    Réponses: 7
    Dernier message: 16/09/2005, 20h59
  5. Utilisation de l'Assembleur
    Par dway dans le forum Assembleur
    Réponses: 19
    Dernier message: 09/08/2003, 00h22

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