• STATISTIQUES
  • Il y a eu un total de 0 membres et 41912 visiteurs sur le site dans les dernières 24h pour un total de 41 912 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [EN] SecurityFocus
    SecurityFocus a été conçu pour faciliter la discussion sur des sujets liés la sécu...
    Vulnérabilités
    [EN] Lost-chall
    Site de challenge présenté sous la forme de différente saison. Pour passer une saison vous devez avoir accumulÃ...
    Challenges
    [EN] Astalavista
    JavaScript: 1, Exploit: 2, Crypto: 34, CrackIt: 15, Stegano: 8, Programming: 12, Logic: 36, Special: 6, Science: 4, Info...
    Challenges
    [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!

    €



Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Adressage de la mémoire
05-03-2013, 23h17
Message : #1
Serphentas Hors ligne
Thall
*



Messages : 41
Sujets : 10
Points: 29
Inscription : Oct 2012
Adressage de la mémoire
Salut Smile

Dans ma quête à l'optimisation ultime d'un certain logiciel (SuperPi), je suis tombé sur la gestion de la mémoire physique par l'OS. De ce que j'ai lu, c'est sous forme hexadécimale et sous forme d'adresses (par exemple, 0x1000000).

Vous me semblez être plus à jour que moi sur ce sujet (notamment stack overflow si je me trompe pas), donc mes questions sont:

- la mémoire physique est-elle bien adressée comme expliqué ci-dessus ?
- si oui, comment savoir où une adresse se situe ? (barrette de RAM n°1, puce 3, etc)
- y a-t-il un moyen de choisir l'emplacement/de bouger (d')une adresse ?

J'espère ne pas trop vous faire peur avec tout ça. Big Grin
+1 (0) -1 (0) Répondre
06-03-2013, 01h28
Message : #2
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: Adressage de la mémoire
Plop,

La mémoire, tu peux voir ça comme un gros tableau, avec plein de cases. quand un élément est alloué en mémoire : c'est a dire qu'il occupe une certaine place en mémoire, il se situe a une certaine adresse. Les adresses, sont représentées en notation hexadécimales car la plage d'adresse est très étendue sur nos systèmes actuels, ca n'est qu'une question pratique. tu peux très bien donner un nombre décimal, ça sera juste plus long.

Pour ce qui est de la deuxième question, je n'en sais rien. :p

Bouger une adresse te sera impossible, c'est ton système qui le gère. Tu peux de ton coter choisir a quel adresse placer tes éléments dans la mémoire (si ton OS te l'autorise) a l'aide de fonction comme mmap() (en C).

Tu parles aussi de stack overflow, un stack overflow est ce qui s'appel un "stack based buffer overflow" ce qui signifie un dépassement de mémoire sur la stack. Il faut savoir que pour chaque processus, la mémoire est diviser en différentes parties. On retrouve notamment la Stack et la Heap. (La pile et le tas en français). Sur la stack, on retrouve les variables locales, les paramètres des fonctions, etc... Dans le cadre d'un "stack based buffer overflow", on va écraser certains éléments de la stack, et par exemple écraser l'adresse de retour d'une fonction, qui fait qu'on pourra contrôler le fonctionnement du programme. Smile

I hope it helped.
+1 (4) -1 (0) Répondre
06-03-2013, 10h21
Message : #3
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,609
Sujets : 71
Points: 465
Inscription : Jan 2012
RE: Adressage de la mémoire
Sinon, pour préciser la réponse de Ark, il y a deux "types" de mémoire.
Tout d'abord il y à la mémoire physique, qui comme son nom l'indique, correspond à la mémoire disponible dans tes barettes de RAM. Cette mémoire est exclusivement gérée par le système d'exploitation et rien ne permet de la manipuler dans l'espace utilisateur.

Ensuite vient la mémoire "virtuelle" ou "paginée", qui, elle, est totalement visible et manipulables par ton processus. C'est la mémoire virtuelle qui fait croire à ton process qu'il est "seul" dans la RAM, et cette mémoire est composée de portions de RAM physique, de morceaux de fichiers de pagination, etc... (je te renvoie vers n'importe cours de programmation d'OS si jamais mes explications sont pas assez claires :þ)
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
06-03-2013, 21h45
Message : #4
Serphentas Hors ligne
Thall
*



Messages : 41
Sujets : 10
Points: 29
Inscription : Oct 2012
RE: Adressage de la mémoire
Merci pour vos réponses. Smile

Concernant l'adresse mémoire, plus c'est bas plus c'est proche de la première barrette de RAM ? (dans le cas d'une mémoire physique) Par exemple, 0x10000000 est/serait plus au "début" comparé à 0xFF000100 (j'invente, c'est sûrement incorrect Big Grin).

Donc on ne peut pas toucher à la mémoire physique, contenu ou emplacement, puisque c'est l'OS qui se réserve tous les droits d'écriture/lecture. Est-ce qu'on pourrait modifier quelque chose comme le BIOS/UEFI pour que l'OS change sa manière de gérer la mémoire ?
Quand tu (Ark) parles de "choisir a quel adresse placer tes éléments dans la mémoire", tu veux dire que je peux choisir à quelle adresse placer des choses de mon choix ou bien des choses gérées par l'OS (comme SuperPi) ?

Pour finir, la mémoire virtuelle. De ce que j'ai lu, c'est uniquement le swap donc disque système/local (du moins sur Windows). Pour les imprécisions, je vais sûrement me diriger vers des sources externes. x)
+1 (0) -1 (0) Répondre
06-03-2013, 22h44
Message : #5
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: Adressage de la mémoire
(06-03-2013, 21h45)Serphentas a écrit : Pour finir, la mémoire virtuelle. De ce que j'ai lu, c'est uniquement le swap

oui et non, c'est valable pour windows peut-être ça l'est pas pour linux par exemple, au risque de paraphraser Ark et supersnail, les barettes de RAM et la swap ce sont des mémoires, l'OS (le noyau) se débrouille pour les gèrer et te permettre de les utiliser de manière transparente
quand tu exécutes un programmes tu ne peux donc pas dire (enfin si, mais peu importe) qu'il utilise la swap ou qu'il utilise la RAM

quand tu exécutes un programmes (processus), il a un espace d'adressage rien que pour lui fournit par le noyau, sous linux x86 par exemple cet espace d'adressage va de 0x00000000 à 0xffffffff (avec une limite à 0xc0000000 pour userland/kernelland), ça veut dire que n'importe quel programme qui s'exécute peut écrire à l'adresse 0x12345678 sans que ça gêne le programme d'à coté, ils ne partagent pas les mêmes adresses, chacun à son propre espace d'adressage virtuel

[Image: clip_image002%5B7%5D.jpg]

avec des adresses pour userland qui vont de 0x00000000 à 0xbfffffff chaque processus peut donc utiliser 3Go de mémoire potentiellement, mais ça n'est évidement jamais le cas, si vraiment il avait besoin de ces 3Go de mémoire le noyau s'efforcerait de la lui donner, quand il n'y a plus de RAM il prend dans la swap, quand il n'y a plus de swap il y a de fortes chances que le processus se fasse oom-killer par le noyau Wink
+1 (3) -1 (0) Répondre
08-03-2013, 16h46
Message : #6
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: Adressage de la mémoire
Hello,

Dernier morceau d'information qui te manque: c'est le CPU qui s'occupe de traduire, directement en hardware, les addresses virtuelles en addresses physiques. Sur x86 ça peut se faire avec deux mécanismes, la segmentation (que linux n'utilise pas, et qui n'existe plus en mode 64bits) et la pagination.

Pour la pagination, on stocke quelque par en mémoire des tables de correspondance entre les addresses physiques et les addresses virtuelles, puis on indique la position de la table au CPU en l'écrivant dans un registre de contrôle dédié à ça. L'OS peut ensuite contrôler la correspondance entre addresses logiques et physiques en modifiant la table ou en changeant la table en cours.
+1 (1) -1 (0) Répondre
08-03-2013, 17h23
Message : #7
Serphentas Hors ligne
Thall
*



Messages : 41
Sujets : 10
Points: 29
Inscription : Oct 2012
RE: Adressage de la mémoire
Merci pour toutes ces précisions. Wink Je vous tiens au courant dès que j'ai trouvé un lien entre la partie théorique/logicielle et les barrettes elles-mêmes (ou autre).
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [Defi du gromanche] - Memoire, CPU d'un programme notfound 3 221 01-06-2014, 19h18
Dernier message: notfound

Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut