Bon, je pensais au
«vous enverriez l'adresse où se trouve le pointeur, et ça, excusez mon langage, mais on s'en fout complètement» de M@téo, et... c'est là que je me demande quelques trucs
Si j'étais du style «Moi chu full ben organisé, j'aime quand tout est en ordre, je veut savoir où son mes variables. Je veut que la variable "Cocio" soit à l'adresse "16"».
Je pourrais l'exiger?
Si oui, il y a des gens qui font ça? (je parle en C, je crois que c'est une opération très commune dans des languages comme l'assembleur)
Ou, si je suis chez moi, je suis du style cheater, je joux seul contre des bots sur mon ordi à Counter-Strike. Et... comble de pas d'but, je veut modifier la valeur de la variable "MonScoreACounterStrike". (C'est un exemple )
Si on concidère que je connais l'adresse de cette variable. Je pourrais me faire un autre programme à part qui vas à l'adresse et modifie sa valleur?
Heu... voilà
En passant, je fais juste me le demander
Ce que tu demandes est totalement impossible et interdit.
En C, comme en assembleur, on ne PEUT PAS exiger une adresse précise. C'est l'OS qui te donne une adresse, qui te dit où tu peux stocker tes variables. Tu ne peux rien exiger de l'OS, sinon l'OS risque tout simplement de te couper ton programme car il n'aura pas agi de manière "conforme".
En outre, il est interdit d'accéder aux variables situées ailleurs dans la mémoire. Tu ne peux modifier que les variables de ton programme.
Si tu essaies de lire / modifier des valeurs en mémoire de CS par exemple, l'OS te jettera et coupera ton programme.
Les processeurs modernes (datant d'environ moins de 10-15 ans) disposent d'un mode protégé qu'utilisent tous les OS modernes, et qui empêche donc les programmes d'accéder à la mémoire les uns des autres.
Si j'étais du style «Moi chu full ben organisé, j'aime quand tout est en ordre, je veut savoir où son mes variables. Je veut que la variable "Cocio" soit à l'adresse "16"».
Personne ne fait ça, du moins, pas pour cette raison.
Citation
Je pourrais l'exiger?
Pas de manière portable et pas comme tu le crois.
Citation
Si oui, il y a des gens qui font ça? (je parle en C
Ceux qui programment en bas niveau : kernels, drivers, etc.
Citation
, je crois que c'est une opération très commune dans des languages comme l'assembleur)
Pas vraiment commune non, même à bas niveau.
Le fait est que m@t ne l'explique pas mais il y a plusieurs mémoires : La mémoire physique (au sens large) et la mémoire virtuelle. En haut niveau et même en moyen-bas niveau, on fait avec la mémoire virtuelle, rien n'est absolu, tu peux bien tweaker le linker pour qu'il te place ta var où tu veux par exemple ou le système pour mapper en runtime à une adresse donnée (c'est faisable), mais au final ça ne changera pas grand chose qu'elle soit ici ou là ; le système est plus à même que toi de décider où va chaque chose.
Sous Unix, ya par ex shmat() et sous Windows VirtualAlloc().
Citation
Si on concidère que je connais l'adresse de cette variable. Je pourrais me faire un autre programme à part qui vas à l'adresse et modifie sa valleur?
Oui et ça s'appelle un debugger. Faut un moyen de demander au système l'accès à l'espace d'adresses du processus en question et après bah faut trouver la variable, la patcher et tout blahblah.
Ton processus fonctionne avec des adresses qui lui appartiennent, un autre processus peut avoir des variables avec une même adresse mais néanmoins qui n'ont rien à voir. C'est pour ça qu'il faut demander à utiliser les adresses d'un autre programme. Sous Unix je connais mal, on m'a parlé de ptrace(), sous Windows ya WriteProcessMemory().
Voilà tout.
Organisation d'adresse et vairable pas au programme
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)