Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Astuce : les variables sous Panoramic Mar 8 Fév 2011 - 10:55 | |
| En cherchant à déterminer l'adresse d'un tableau d'entier sous Panoramic, j'ai remarqué quelques petits trucs : Dans le cas d'un réel ou d'un entier, la structure de définition d'une variable Panoramic semble faire 80 octets. pour le vérifier : - Code:
-
dim a%,b% : print adr(b%)-adr(a%) ---> on obtient 80 dim a ,b : print adr(b) -adr(a) ---> on obtient aussi 80 La position du champ 'Value' dans la structure de définition est inconnue, par contre ce que l'on peut déduire : Dans le cas d'entier suivi d'un réel, l'offset entre les 2 champs 'value' est de 92 octets. Ce qui signifie que dans le cas d'un réel, le champs 'Value' se situe 12 octets plus bas que dans la structure d'un integer. Pour le vérifier : - Code:
-
dim entier%,reel : print adr(reel)-adr(entier%) --> on obtient 92 Par déduction, si on fait l'inverse : 80 octets - 12 soit 68 - Code:
-
dim reel,entier% : print adr(entier%) - adr(reel) --> on obtient bien 68. De là on peut s'amuser à calculer l'adresse de plusieurs variables: - Code:
-
dim e1%,r1,r2,e2%
dim adr_base,adr_r1,adr_r2,adr_e2
adr_base = adr(e1%) adr_r1=adr_base +80 + 12 adr_r2=adr_r1+80 adr_e2=adr_r2+80 -12 print "adr(r1):";adr(r1);" adr_r1:";adr_r1 print "adr(r2):";adr(r2);" adr_r2:";adr_r2 print "adr(e2%):";adr(e2%);" adr_e2:";adr_e2
@Klaus: Dans le cas de l'utilisation d'une fonction dans une DLL, on peut très bien ne passer que l'adresse de la premiere variable et côté delphi, en déduire les autres... Une petite contrainte : Cela implique de bien respecter coté Panoramic l'ordre de déclaration des variables utilisées par la Dll. - Code:
-
function RecupParamInt(pParam1:pInteger;paramNumber:integer):integer; var i:integer; begin for i :=1 to paramNumber-1 do Inc(pParam1,20); result:=pParam1^; end; PS: Pas la peine de faire le test : pour les tableaux ça ne fonctionne pas ! | |
|
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Astuce : les variables sous Panoramic Mar 8 Fév 2011 - 15:06 | |
| Bien intéressant tout ça, ami Nardo. Ne manque plus que savoir lire le contenu de la mémoire à l'adresse indiquée (genre Peek), pour pouvoir tracer le contenu de certaines variables... | |
|
Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Astuce : les variables sous Panoramic Mar 8 Fév 2011 - 15:24 | |
| Bonjour JL35 ! Le petit bout de code en Delphi permet justement de faire l'équivalent d'un peek... L'interet de la chose c'est surtout lorsqu'on se retrouve avec un nombre important de paramètres à faire passer à une dll. Par exemple au lieu d'écrire ceci : retour% = dll_call6("MaFonction",adr(param1),adr(param2),...,adr(param6))
avec ce petit calcul d'adresse tu pourrais écrire : retour%= dll_call1("MaFonction",adr(param1)) et puis la fonction dans la dll ferait le calcul nécessaire pour récupérer les autres paramètres...
Donc plus de limitation à 6 paramètres... Bon, des fonctions avec plus de 6 paramètres, ça ne doit pas être courant... ou alors la fonction est mal écrite. Pour l'instant j'en suis là... Cela prendra vraiment tout son sens si j'arrive à identifier l'adresse du tableau...
| |
|
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Astuce : les variables sous Panoramic Mar 8 Fév 2011 - 18:39 | |
| L'inconvénient pour moi c'est que je ne sais pas utiliser un bout de code en Delphi, même petit ! Mais enfin il y a de l'idée, et je sens bien que tu vas nous faire quelque chose d'utilisable par tous. Y compris les non Delphiniens N'écoute pas Pascal (qui comme chacun sait est l'ancêtre de Delphi) qui disait: "l'imagination est maîtresse d'erreur et de fausseté" ( Pensées) | |
|
Klaus
Nombre de messages : 12295 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Astuce : les variables sous Panoramic Mar 8 Fév 2011 - 19:13 | |
| J'avais essayé des explorations similaires, au début de mes travaux avec les DLL. J'ai abandonné assez vite car il n'y a aucun moyen, comme tu le dis, d'accéder des tableaux, ni d'ailleurs des variables string (nom$), ce qui limite singulièrement cette méthode d'accès.
Jack est en train d'implémenter les plugins, et je ne doute pas qu'il donnera accès aux variables de tout type, sinon, je ne vois pas bien l'intérêt. Pour ma part, j'attends cela, et je pense que cela sera assez intéressant. | |
|
Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Astuce : les variables sous Panoramic Mer 9 Fév 2011 - 22:39 | |
| L'adresse d'un tableau n'est franchement pas évidente à trouver : 12 octets plus "haut" que le champs "value" dans la structure de définition, il y a un pointeur sur apparemment une autre structure: on retrouve dedans le nom de la variable codé en DWORD en format intel (poids faible d'abord suivi du poids fort) ce qui donnerai par exemple pour la variable "tst%" -> "st%t" quand au reste c'est incompréhensible... Comme le dis Klaus, "wait & see" les plugins sous Panoramic... | |
|
Contenu sponsorisé
| Sujet: Re: Astuce : les variables sous Panoramic | |
| |
|