60

Si si, c'est un pointeur de HANDLE :
HANDLE *handle;
lolpaf

IroS> Regarde un cours de C sur l'arithmétique des pointeurs... Ajouter un entier à un "HANDLE *" et à un "char *", ça ne fait pas la même chose...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

61

Je comprends pas comment t'as pu faire cette erreur alors que tu viens juste de recopier mot à mot (même les commentaires !) le code de Kevin...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

62

Vertyos
: Je comprends pas comment t'as pu faire cette erreur alors que tu viens juste de recopier mot à mot (même les commentaires !) le code de Kevin...

cf post #38 lol
Realloc(sym->handle,size+add+2);mais à chaque fois que je lance HANDLE h=Heap, h vaut H_NULL, pourtant je ne pense pas avoir fait d'erreur sur les 3 lignes précédentes et j'ai toute la place dispo?

63

et que vaut sym->handle ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

64

49

65

est-ce que ton handle était locké ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

66

(HeapGetLock)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

67

pUnlock(sym->handle);oui, j'ai rajouté ça if (!(HeapGetLock(sym->handle))) sym->handle = Hea

68

Petites remarques :
* pas besoin de réaffecter le numéro de handle, HeapUnlock ne le change pas
* pas besoin de mettre des parenthèses autour de HeapGetLock()
* pas besoin de tester si le handle est locké, HeapUnlock marche même sur un handle non locké

Sinon tu es sûr que size+add+2 est bien à une valeur "raisonnable" ? Parce qu'à part un bug à un autre endroit du code qui corrompt le heap, je vois pas...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

69

Pollux :
Petites remarques :
* pas besoin de réaffecter le numéro de handle, HeapUnlock ne le change pas
* pas besoin de mettre des parenthèses autour de HeapGetLock()
* pas besoin de tester si le handle est locké, HeapUnlock marche même sur un handle non locké
Sinon tu es sûr que size+add+2 est bien à une valeur "raisonnable" ? Parce qu'à part un bug à un autre endroit du code qui corrompt le heap, je vois pas...

* si j'enlève handle=HeapDeref(h); ça plante
* OK
* OK

size vaut env. 400, add vaut 100

variable passe bien de x à x+100 mais devient de type expr. ça doit venir de *(unsigned char*)(handle+*(unsigned short*)handle+1)=243;maintenant ça marche + ou -, après execution du prog, la

[Edit]
le)) = 243;en mettant *(HToESI (sym->hand ça me le remet bien de type ASM, par contre j'ai l'erreur "Invalid relocation data in ASM program".
Je vais me plonger un peu dans la table des relogements

70

... tu veux vraiment pas lire un tuto sur le C ? (celui de squale92 par exemple)

Parce que là "handle" (qui n'a rien avoir avec un handle, d'ailleurs, tu peux éventuellement appeler ça un handle déréférencé si tu veux, mais c'est un pointeur vers un bloc mémoire [par opposition à handle = numéro de bloc mémoire] ) n'a aucune raison d'être un HANDLE *... C'est un pointeur vers un bloc mémoire (que l'on peut identifier par un HANDLE si on veut, mais ça n'a rien à voir), ce n'est pas un pointeur vers un tableau de HANDLE...

Résultat quand tu fais l'addition, il considère qu'il doit prendre l'adresse du "*(unsigned short*)handle+1"-ème élément de handle vu comme un tableau de HANDLE, ce qui n'est pas la même chose que si on le déclare comme un "char *"... cf tuto C pour plus d'explication.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

71

Chui po si nul en fait (façon de parler!) void _main(void) {      SYM_ENTRY *sym = FindProgramVar();      if (!sym) return;            sym->handle = HeapUnlock(sym->handle);      HANDLE *handle = HeapDeref(sym->handle);            short add=100,size=*(unsigned short*)handle;      //Modifie la taille      HANDLE h=HeapRealloc(sym->handle,size+add+2);            //Si ça a réussi      if (h)      {           // Met à jour le pointeur handle            handle=HeapDeref(h);             // Pointe "old" sur le tag avant redimensionnement            //char *old=(char*)(handle+*(unsigned short*)handle+1);             char *old= (HToESI (sym->handle));                       // Ajoute 10 octets à la variable (partie 2)            *(unsigned short*)handle=size+add;              // Pointe "p" sur l'octet precedant le tag            char *p=old-1;              // cherche le mot nul (pas while(*--p || *--p) à cause de l'évaluation paresseuse)            while(*(p--) || *p) p-=3;              // déplace la table de relogements            memmove(p+add,p,old-p);              // Réécrit le tag            *(HToESI (sym->handle)) = 243;      } }
je l'ai lancé plus de 100x et ça marche!
Pollux :
... tu veux vraiment pas lire un tuto sur le C ? (celui de squale92 par exemple)
Parce que là "handle" (qui n'a rien avoir avec un handle, d'ailleurs, tu peux éventuellement appeler ça un handle déréférencé si tu veux, mais c'est un pointeur vers un bloc mémoire [par opposition à handle = numéro de bloc mémoire] ) n'a aucune raison d'être un HANDLE *... C'est un pointeur vers un bloc mémoire (que l'on peut identifier par un HANDLE si on veut, mais ça n'a rien à voir), ce n'est pas un pointeur vers un tableau de HANDLE...


pour le nom des variables, c'est comme pour les commentaires (cf. #60)
Pollux
: Résultat quand tu fais l'addition, il considère qu'il doit prendre l'adresse du "*(unsigned short*)handle+1"-ème élément de handle vu comme un tableau de HANDLE, ce qui n'est pas la même chose que si on le déclare comme un "char *"... cf tuto C pour plus d'explication.

j'ai pas tout compris ce que tu essais de dire là confus

72

IroS
: pour le nom des variables, c'est comme pour les commentaires (cf. #60)

Tu n'es qd même pas en train de sous-entendre que Kevin a écrit "HANDLE *handle" ? hum
Pollux
: Résultat quand tu fais l'addition, il considère qu'il doit prendre l'adresse du "*(unsigned short*)handle+1"-ème élément de handle vu comme un tableau de HANDLE, ce qui n'est pas la même chose que si on le déclare comme un "char *"... cf tuto C pour plus d'explication.

j'ai pas tout compris ce que tu essais de dire là confus

Lis un tuto C et renseigne-toi sur l'arithmétique de pointeurs...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

73

topics/17996-surement-deja-demande-self-pointing#23
moi quand je lis le commentaire "... et un pointeur sur son handle "handle"" j'écris "HANDLE *handle"
si ça peut te faire plaisir je l'appelerai autrement

bref, j'en reste là. chew
merci quand même pour toutes les infos

74

lis la doc de tigcc sur heapderef : void* ptr serait plus approprié ici
euh...

75

En fait ça serait plutôt un pointeur sur le contenu du bloc mémoire décrit par le handle. Mais plutôt que recopier le code, mieux vaut essayer de le comprendre smile
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

76

>D'ailleurs, le hack de Kevin ne marchera plus si TI ajoute de la RAM (ça a l'air bien parti pour, avec la suppression du ghost)
AMS 3.00 detecte dynamiquement la taille de la RAM.

> euh, ça marche pas si c dans le ghost space...
Ca marche dans le ghost space.

> bah ça doit pas marcher sous Titanik
Ca marche sous Titanik

> Lla solution plus propre serait de faire "move.l #un_label_du_prog,a0",
>comme ça on est sûr que c la relocation du kernel (donc a priori pas dans le ghost) qui est utilisée.
Completement faux. La relocation kernel peut aussi te mettre dans le ghost.

77

IroS :
topics/17996-surement-deja-demande-self-pointing#23
moi quand je lis le commentaire "... et un pointeur sur son handle "handle"" j'écris "HANDLE *handle"si ça peut te faire plaisir je l'appelerai autrement

Euh mais je ne vois marqué nulle part que c'est un HANDLE *, tu te mélanges les pinceaux... cf ./74 et ./75.
PpHd :
>D'ailleurs, le hack de Kevin ne marchera plus si TI ajoute de la RAM (ça a l'air bien parti pour, avec la suppression du ghost) AMS 3.00 detecte dynamiquement la taille de la RAM.

i.e. ?
> euh, ça marche pas si c dans le ghost space... Ca marche dans le ghost space.

OK, c tout ce que je voulais savoir.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

78

Que veux-tu que je dises ? Il y a une routine au demarrage d'AMS 3.00 qui calcule la taille de la RAM de la calculatrice. C'est tout.

79

Et ? Ca ne veut pas forcément dire que c faisable "maison" du point de vue hardware...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

80

Vu tout ce qu'ils ont change en hard pour la Titanium, je serais pas etonne de voir Ti-89 Titanium + avec 512K de RAM.
Et du point de vue soft, c'est deja gere par AMS 3.00, voila. C'est tout ce que je peux dire.

81

Ah ben oui, c évident qu'ils vont en rajouter smile (ils vont pas casser la compatibilité pour le plaisir, qd même)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

82

Pollux :
Euh mais je ne vois marqué nulle part que c'est un HANDLE *, tu te mélanges les pinceaux... cf ./74 et ./75.

je sais que ce n'est pas écrit explicitement mais un pointeur sur un char tu l'écris char *, un pointeur sur un int non signé tu l'écris unsigned int *. quand j'ai vu un pointeur sur son handle j'ai écris HANDLE * ; c'est tout.
Du coup j'ai changé, j'ai mis void *, voilà comme ça tout le monde il est content! pour un truc qui fonctionnera sûrement pas par la suite y a pas de quoi en faire une montagne
Ca m'aura appris certains trucs quand même, c'est déjà ça

83

IroS :
Du coup j'ai changé, j'ai mis void *, voilà comme ça tout le monde il est content !pour un truc qui fonctionnera sûrement pas par la suite y a pas de quoi en faire une montagne

... personne ne t'y oblige ... et jvoi pas pkoi ca ne marcherais pas par la suite ...

euh...