J'étudie actuellement un programme que j'ai écrit en assembleur et je pensais à déplacer du code dans l'assemblage. J'ai une procédure qui prend un argument, mais je ne suis pas sûr si elle est passée sur la pile ou un registre.Les arguments d'une fonction seront-ils transmis sur la pile ou dans un registre?
Quand j'ouvre mon programme IDA Pro, la première ligne de la procédure est la suivante:
ThreadID= dword ptr -4
Si je passe la souris mon curseur sur la déclaration, ce qui suit apparaît également:
ThreadID dd ?
r db 4 dup(?)
qui Je suppose que pointerait vers une variable de pile? Quand j'ouvre le même programme dans OllyDbg cependant, à cet endroit sur la pile il y a une grande valeur, ce qui serait incompatible avec tout paramètre qui aurait pu être passé, ce qui me laisse croire qu'il est passé dans un registre .
Quelqu'un peut-il me diriger dans la bonne direction?
La convention d'appel est __fastcall – samoz
« En règle générale fastcall les conventions d'appel passent un ou plusieurs arguments dans les registres qui réduit le nombre de accès mémoire requis pour l'appel. » - http://en.wikipedia.org/wiki/X86_calling_conventions#fastcall –
Encore une chose que je n'ai pas remarquée. Les offsets positifs dans la pile (par rapport au pointeur de base) sont des variables locales, donc ThreadID est probablement une variable locale. –