Meuh si il faut des droits spéciaux, c´est écrit:
"The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process."
Je présume que ce ne sont pas des trucs très courants, comme semble dire le petit commentaire plus loin:
"Typically but not always, the process with address space that is being written to is being debugged."
Alors à moins que tu sois un déboggeur et que tu te crées ton process spécialement pour ça, tu pourra jamais les utiliser pour grand chose d´autre.
Mais! Je me trompes peut-être.
--------------------------------------------------
--------
Sinon, modifier les vars d´un programme de l´extérieur, non, ça ne se fait pas, normallement.
Trouver où sont les variables dans une virtual address space, ça, pas de problème. Il faut juste comprendre que les address spaces ne sont PAS interchangeables entre les programmes, du moins sous tout OS sous paging moderne. L´addresse 0x00400012 de ta variable dans ton programme Machin.exe et l´addresse 0x00400012 dans ton programme MachinTrainer.exe ne représentent pas la même "chose" (pas la même addresse physique en fait), surtout sous Windows.
C´est simple, pour interchanger des données, faut le plus souvent qu´autrement le demander, ou lui forcer la patte.
Le demander, ça peut être, par exemple, des appels aux fonctions de débogguage, c´est à dire trouver le moyen d´avoir un droit d´accès à ça. Comme j´ai mentionné plus haut, aucune idée comment on fait, maais en possiblement recréant l´environnement d´un déboggeur, c´est envisageable...
Le bidouiller(vous comprenez ce que je veux dire par là j´imagine, mais voilà bon, y´a de ces mots inderdits dans un post...), je ne vais pas te détailler comment on peut faire, c´est à la fois trop complexe pour toi probablement (à moins que tu aies des notions extensibles dans le fonctionnement de processus, multi-threading, exécution d´un programme sous un OS protégé, ect.), contraire à la charte, et moi même je n´y connais pas grand chose, donc mes explications seraient probablement fausses ou du moins s´éloignerait de la réalité.
Mais pour te donner une idée, on peut arriver à ses fins en modifiant le programme, en le forçant à se soumettre à ton programme (e.g. tu lui donne des ordres, il obéit, par exemple par communication interthreads), sauf que il faut pour ça modifier l´exécutable. Autant dire, c´est très,très,très loin d´être une chose élémentaire.
Y´a d´autres moyens dont j´aurais une idée comment faire, mais c´est trop rentrer dans les détails. Et puis bon y´a surement de meilleurs moyens.
Mais simplement, non: on ne modifie pas un programme simplement en trouvant l´addresse du var et en écrivant dessus. Et détourner pareilel sécurité est plus complexe que simplement "charger ce programme dans le meme segment que la variable", point de vue assez grossier (mais JYY l´a probablement fait exprès pour simplifier son explication) sur le concept.
Kelios
---------