Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
codaz:asm:asm_fonctions_prelude [2007/09/24 17:53]
jfg
codaz:asm:asm_fonctions_prelude [2010/01/12 13:29] (current)
Line 1: Line 1:
 +===== A propos du prélude et finlude dans les fonctions en ASM =====
  
 +Il est courrant de voir des codes sources ASM qui utilisent une vieille habitude moisie qui ressemble à ceci :
 +
 +<​code>​
 +ma_fonction:​
 +push ebp
 +mov  ebp, esp
 +[...blah...]
 +</​code>​
 +
 +Cette habitude moisie nous vient tout droit du moyen âge où le seigneur Hixe Quatrevainsix du Maude Saizebit ne pouvait point adresser directement sur esp.\\
 +En gros avant on ne pouvait pas faire des trucs du genre "mov [esp+8], eax".
 +
 +Pourquoi cette habitude est elle moisie ?
 +
 +1- Elle ne sert à rien si on ne touche pas à ebp au sein de la fonction.\\
 +2- Elle nous bouffe EBP pour rien si on a besoin de registres.
 +
 +Ils auront beau vous dire "Oui mais ceci très cher est une convention conventionelle et conventionnée de codage propre"​. Vous ne vous gènerez pas pour leur répondre "​Quenéni mon couillon, cette habitude est tombée en désuétude"​.
 +
 +Quoi faire alors?
 +
 +En gros retenez la chose suivante: Il ne faut sauvegarder EBP, EDI et ESI dans une fonction que si on compte s'en servir.\\
 +
 +Si vous voulez utiliser un de ces registres, il suffit simplement de les placer quelque part sur la stack. Et au besoin vous réserver un peu d'​espace avec un "sub esp, SOMETHING"​ où SOMETHING est l'​espace que vous avez besoin pour stocker d'​autres infos sur la stack.
 +
 +Exemple, vous voulez utiliser EBP, ESI et EDI :
 +
 +<​code>​
 +ma_fonction:​
 +sub esp, 12     ; on garde de l'​espace pour d'​autre opérations (3 adresses là)
 +push ebp
 +push esi
 +push edi
 +
 +[...blah...]
 +
 +pop edi
 +pop esi
 +pop ebp
 +add esp, 12     ; on clean toussa
 +ret
 +</​code>​
 +
 +C'est tout !
 +
 +Alors n'​oubliez pas, si vous tombez sur un tuto qui vous explique "bla bla c'est bien c'est propre bla bla", ne tenez pas compte de ces douces âneries.
 +
 + --- //​[[jf.guchens@gmail.com|jfg]] 2007/09/24 19:21//
codaz/asm/asm_fonctions_prelude.txt · Last modified: 2010/01/12 13:29 (external edit)