CallFunctionFast version ASM
Publié : ven. 03/oct./2008 22:43
Je suis actuellement sur une lib pour gérer des opérations de ce type :
($1 correspond au premier paramètre comme en shell sous nux $1 ... $4....$x)
A la base sous forme de string je crée un pseudo-code que mon interpréteur va exécuter.
Seulement les fonctions utilisable sont nombre donc pour gagner du temp je me suis dit on va faire du CallFunctionFast avec les pointeurs des fonctions cos sin ect ect ... Mais hé stupeur CallFunctionFast ne supporte pas les doubles (mince mes scripts ne prenne que ce type de variable)
Pas de problème il y a l'ASM sauf que je suis un peu manchot dans le domaine
Je me retrouve donc avec ma fonction suivante
A convertir en ASM et la je suis dessus depuis tout l'après midi a me battre avec
Donc si j'ai bien comprit le principe je met les paramatres dans la pile via PUSH puis j'appelle la procédure avec CALL.
Seul problème heuu je PUSH quoi dans la pile ? et je CALL comment ?
D'apres mon amis google il faut jouer avec le registre qui contient les paramètres de la fonction ExecuteFunction et qui semble etre ESP et la je coince vraiment car a par faire des accès illégaux dans la mémoire je n'arrive a rien.
Si un érudit de l'asm pouvait m'apporter quelques lumières voir une ampoule de 500wats au passage j'en serait ravit.
pour info ma structure Function
Code : Tout sélectionner
$1 + ( cos(4) * pow(rand(), 2))
A la base sous forme de string je crée un pseudo-code que mon interpréteur va exécuter.
Seulement les fonctions utilisable sont nombre donc pour gagner du temp je me suis dit on va faire du CallFunctionFast avec les pointeurs des fonctions cos sin ect ect ... Mais hé stupeur CallFunctionFast ne supporte pas les doubles (mince mes scripts ne prenne que ce type de variable)
Pas de problème il y a l'ASM sauf que je suis un peu manchot dans le domaine
Je me retrouve donc avec ma fonction suivante
Code : Tout sélectionner
Procedure.d ExecuteFunction(*this.Function, *param)
ProcedureReturn CallFunctionFast(*this\ptr, blablabla)
EndProcedure
Donc si j'ai bien comprit le principe je met les paramatres dans la pile via PUSH puis j'appelle la procédure avec CALL.
Seul problème heuu je PUSH quoi dans la pile ? et je CALL comment ?
D'apres mon amis google il faut jouer avec le registre qui contient les paramètres de la fonction ExecuteFunction et qui semble etre ESP et la je coince vraiment car a par faire des accès illégaux dans la mémoire je n'arrive a rien.
Si un érudit de l'asm pouvait m'apporter quelques lumières voir une ampoule de 500wats au passage j'en serait ravit.
pour info ma structure Function
Code : Tout sélectionner
Structure Function
*ptr.i
*param.i
NbrParam.l
Name.s
RetourType.l
EndStructure