Thierry 31 a écrit :
question 1
tant que je ne touche pas à la pile par PUSH /POP tout se passe bien, si par contre pour une raison qq je suis amené à le faire comment puis je "retomber" sur mes pieds ? peuxt'on "travailler" la valeur esp?
C'est toute la difficulté de travailler en général avec esp car esp varie sans arrêt. Si le code est court on arrive à ne pas pas avoir d'erreur de pile mais si le code devient long avec beaucoup de sauts conditionnels dont les portiions de codes peuvent faire varier esp, cela devient délicat.
Si le code devient long, il faut passer par un registre pour mémoriser (type ebp ou autre). Sinon, il faut compter les variations pour suivre esp afin de savoir si on doit ajouter ou retirer une valeur pour accéder aux variables à l'aide de esp. PureasmTools permet de générer du code asm (pour librairie) avec soit esp ou un autre registre pour accéder aux variables locales/paramètres et c'est très pratique lorsque l'on utilise des variables basées sur des structures ou interfaces. Mais il ne faut pas oublier que PB autorise que l'utilisation de eax et edx, les autres registres pouvant être utilisés par les fonctions PB (faire attention à la sauvegarde des registres) . Au début de chaque procédure, PB va sauvegarder tous les registres 32 bits (sauf eax, edx et eip) puis les restaure au retour de la procédure
Thierry 31 a écrit :
question 2
est'il possible pour le besoin internes d'une procedure, de crér des variables?
si oui quelle syntaxe doit'on employer?
Si on est dans le code en basic (et pas en asm pour une librairie), pas de problème, tu déclares obligatoirement ta variable avant de l'utiliser en asm comme tu l'a fait dans ton code. Ensuite tu peux écrire des choses comme ceci (je ne sais pas si j'ai bien compris la question car tu le fait dans ton exemple)
Code : Tout sélectionner
procedure essai()
variable.l
MOV eax, variable ; pas besoin de esp car c'est PB qui gère esp
Endprocedure