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 :

sauvegarde maximale pile


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut sauvegarde maximale pile
    Salut,

    Je me demandais quelle est la taille maximale de donnée qu'on peut empiler sans risque d'écraser d'autres données qui se trouveraient au-dessus.
    Y-a t-il un standard concernant ce genre de chose ?
    Que ce soit en x32 ou x64.

    Par exemple, sous win32, il y a toujours des choses au dessus de l'addresse courante d'esp. Le point d'entrée du programme en cours par exemple.
    Est-ce que tout ce qui se trouve au-dessus (donc les adresses négatives) de l'adresse courante est à considérer comme disponible ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Hello,

    Pas de standard en la matière à ma connaissance.

    Il faudrait pour cela pouvoir déterminer à tout instant la taille maximum de la pile. C'est possible dans une certaine mesure, mais c'est difficile et ça devient presque impossible de manière universelle avec des fonctions récursives.

    Ça dépend aussi de l'implémentation de cette pile. Sur les x86, il y a désormais un segment dédié à cela. Si tu en sors, ça déclenche une segfault comme sur les segments de données.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    D'accord, alors je vais analyser ça un peu mieux car je veux pour un code utiliser la pile au lieu de faire des variables locales, car après un test de performance je me suis aperçu que stocker sur la pile était deux fois plus performant.
    Par contre pour ce code je ne pourrais pas connaître la taille a stocker à l'avance, pour ça que je voulais être certain d'avoir une quantité relativement importante de disponible.

    Merci a+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    En faite je voulais me servir de la pile de la même façon qu'un buffer.
    En faisant par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    add ecx,4
    mov eax,dword [esp-ecx]
    Mais je me suis aperçu qu'on ne pouvait pas faire un reg moins reg.
    Curieusement c'est la première fois que je m'en aperçois.
    Je pourrais passer outre en faisant des "sub ecx" au lieu des "add" pour des pointages linéaires.
    Mais pour les pointages imprévisible, du style ecx=0xb6, suivie de ecx=0xd3 etc.. ça m'obligerait à faire un double neg reg, et ça compliquerait le code.
    Au final, ça perdrait peut être en performance au point de ne plus être meilleur que des variables locales.
    Arf.. Je vais quand même tester avec la pile pour voir si ça vaut vraiment le coup.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Finalement, après test, la différence entre variable locale et buffer est quasie inexistante.
    Je trouve que ça ne vaux pas le coup pour de gros stockage (256 dword), en dehors de la réduction de poid du binaire.

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [NASM][Pile] Sauvegarder variable locale dans variable passée en paramètre
    Par homeostasie dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 20/01/2007, 09h48
  2. Chargement et sauvegarde d'un pile d'objet
    Par zorely dans le forum Entrée/Sortie
    Réponses: 15
    Dernier message: 16/12/2004, 23h24
  3. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  4. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23
  5. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

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