jnbrunet
Messages postés258Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention13 novembre 2012
-
10 déc. 2009 à 20:21
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
22 déc. 2009 à 09:39
Bonjour,
Il y a une application faite en cpp donc j'aimerais récupérer les données à l'intérieur d'une liste de données (multi colonne). La liste est créée par winforms.
Ma question est la suivante :
Croyez-vous qu'il est possible, à partir d'une librairie dynamique injectée dans l'application cible, de récupérer les données de la liste et de par la suite les modifier?
J'avais pensé à récupérer l'adresse mémoire de la liste winform et de créer une nouvelle variable liste winform. Par la suite récupérer ses infos à partir de cette nouvelle variable...
Qu'est-ce que vous en pensez? Si ce n'est pas clair, je vais reprendre mon explication sans aucun problème.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 19 déc. 2009 à 20:53
Salut,
Heu... Ce genre de manip sur du code managé c'est de la folie furieuse. La liste est très certainement morcelée dans la mémoire. Elle est gérée par un garbage collector... Bref, c'est mort.
Si la liste est affichée, utilises plutôt une méthode à base de GetWindowText.
Peut être que si je "hook" la fonction qui remplie la liste je pourrais avoir un bon contrôle sur la liste?
J'ai accès à l'exécutable mais je ne peux pas le modifier puisqu'il est sur un serveur à mon travail dont je n'ai pas l'accès. L'équipe de dev de l'outil que je veux modifier est terriblement lent et occupé sur d'autres trucs. Alors je veux faire mes modifs directement dans la mémoire. Cela me donnera une bonne pratique de ce genre de programmation en même temps.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 22 déc. 2009 à 09:39
Ce type de technique ne fonctionne pas non plus sur du code managé. Elle est basée sur une exploitation de la structure des exécutables natifs.
Le code managé est compilé à l'exécution. Les mécanismes de compilation et donc la structure du code généré par la CLR (Machine virtuelle dotnet) ne sont pas documentés (Et dépendent de la machine virtuelle). Et pas grand monde ne s'y est intéressé, car la plupart de gens ayant le temps et les connaissances suffisantes pour étudier le fonctionnement de la CLR considère le dotnet comme une fumisterie.
Comme je le disais, tu devrais plutôt t'orienter vers une récupération en GUI, peut être en passant par LVM_GETITEM si une liste dotnet est bien une list view windows.
Pour la récupération du handle sur la listview, tu peux regarder ce code.