Ha ouais, j ai vu un sujet dans la rubrique pascal, dans lequel tu explique que tu cherches à modifier une constante. On t a répondu que c était impossible, ils avaient tord, c est tout à fait possible:
Quand tu déclare une constante, elle n est pas stockée avec les autres données, elle est stockée dans le segment de code, à chaque fois que tu l utilise. Pour la repérer, tu y mets une valeur bidon, tu compile et tu scan le fichier executable en binaire pour repérer tous les endroits où se trouve la constante.
Comme la plupart des OS interdisent l écriture dans un segment de code, c est plus facile de changer toutes les copies de la constante avant d executer le programme.
Si tu as besoin de changer la constante au cours de l execution, tu doit d abord hacker ton système d exploitation (c est plus facile avec linux, il y a les sources) pour lui faire accepter d écrire dans le segment de code. Ensuite tu construit un fichier texte avec les adresses relative des constante, en vue de charger le fichier au cours de l execution du programme pour changer la constante.
Quand ton programme est terminé et compilé, tu remplis le fichier texte avec les adresse relatives que tu trouve dans le fichier binaire. Ça aide d avoir le code assembleur de la compilation, un désassembleur et un debogueur, surtout que quand par exemple tu additionne deux constantes, le compilo stoque en fait le résultat de l addition.
Voilà, tu est prêt pour changer toutes les constantes de ton programme d un seul coup, quand tu en as besoin.
Si tu cherche une solution plus simple, comme avoir un pointeur sur la constante, c est possible dans certains langages mais le compilateur refusera que tu change la valeur puisque tu l a déclaré constante.
Tu peut à la rigueur hacker le compilateur, mais bien que l adresse retournée soit dans le segment de données, le compilateur a tout de même recopié cette valeur partout où tu l a utilisé puisque tu lui avait dit que c était une constante. Il faudrait dans ce cas que tu hacke le compilo pour qu il traite les constantes comme les autres variables.
Le plus simple finalement reste à dire au compilteur que c est pas une constante comme ça il ne la recopie pas partout, il la stocke dans le segment de donnée uniquement et tu peut la changer.
Bon, c est vrai que les compilos ils sont pas très futés de recopier les constantes partout, mais si tu regarde la définition du mot <<constant>>, ça peut se comprendre.
Les hackers font tout ça souvent, le cas le plus répandu étant les cheat codes dans les jeux, que tu peut repérer en examinant le fichier executable avec un éditeur binaire ou un desassembleur.
Pour augmenter le nombre de vies dans un jeu, tu le désassemble et tu recherche tous les nombres <<3>> (s il y a 3 vies au départ) et tu le change à 255, tu recommence jusqu à ce que tu tombe sur les bonnes constantes.
Ça prends beaucoup de temps le hacking, alors j ai arrêté, mais c est très marrant, et puis ça permet d aller à la fin des jeux quand tu rames, de débloquer des logiciels, ou de tester des trucs auquels les développeurs n avaient pas pensé.