begin process at 2012 05 25 09:49:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

Question de debutant


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Question de debutant

jeudi 18 janvier 2007 à 19:14:09 | Question de debutant

frozon

Bonsoir tout le monde je me pose une question
Je n'ai jamais développé en assembler mais pourquoi ne pas tenté l'aventure.
Je ne vien pas demander de la doc mais une precision.

J'ai vu que pour appeler une fonction il fallai passer les parametre a l'envers j'ai compris pourquoi
Mais ce que je ne comprend pas c'est dans la fonction appelé comment recupérer les paramétres?
imaginos un truc tres tres bateau:
push [ma_chaine]
call ma_fonction

Comment je fait ds ma fonction pour récupérer le parametre
Mettons que ma fonction en C serait:
char *ma_fonction(char *une_chaine)
{
    return une_chaine;
}

Pour l'appeler je fait comme plus haut
Mais ma fonction "ma_fonction" je la code comment?
Elle ne contient qu'un ret mais je retourne quoi?

En attendant vos lumiere je continue ma cherche.
Merci d'avance et bonne soirée


vendredi 19 janvier 2007 à 02:26:57 | Re : Question de debutant

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Le param est placé (DOIT l'être) selon le mode d'appel déclaré devant la fonction.
cdecl et stdcall, param sera en [ESP+4] et tu devras dépiler le param par "ret 4" en sortie.
Si est fastcall alors param passe en registre dans ECX et "ret 0" en sortie puisque rien à dépiler.

Si tu veux retourner ce que tu reçois (jamais compris à quoi ça sert), il te faut conserver cette valeur et la mettre dans EAX en sortie (avant le "ret x").

Look mes sources sur cppfrance, c'est rempli de fonctions full asm.

ciao...
BruNews, MVP VC++
vendredi 19 janvier 2007 à 07:12:12 | Re : Question de debutant

frozon

Je te remerci brunews pour ton explication.
Je vais jeter un oeil sur tes sources sur cppfrance

Bonne journée et merci encore


vendredi 19 janvier 2007 à 08:51:45 | Re : Question de debutant

Nasman

Réponse acceptée !
Bonjour frozon,

Pour compléter ce que t'a dit BruNews, tu as dans ta pile au moment de l'entrée dans le sous programme.
[esp]:         adresse de l'instruction qui suit le call ma_fonction
[esp+4]:    dernier paramètre empilé
[esp+8]:    avant dernier empilé
etc...

Une fois ta fonction exécutée il te faut remettre les choses en place. 
Tu as deux possibilités:
-Faire le ménage dans la fonction appelée, c'est le stdcall
ret n   où n correspond au nombre d'octets des paramètres d'appel (4xnb param, 8 pour deux dwords). Cette instruction met la valeur contenue l'adresse pointée par esp dans eip (pointeur programme) puis rajoute n à esp ("écrase les n paramètres").

-Faire le ménage dans la fonction appelante (convention C)
ret      (à la fin de la fonction)
et
add esp n (dans la fonction appelante après le call ma_fonction)

A+
vendredi 19 janvier 2007 à 08:56:11 | Re : Question de debutant

frozon

Merci pour ta réponse cela m'aide a m'éclaircir un peu les idées avant de débuter.




Cette discussion est classée dans : fonction, chaine, question, debutant, appeler


Répondre à ce message

Sujets en rapport avec ce message

presentation & petite question... [ par BlackWizzard ] tout d'abord, je suis le co-webmaster de ce site, mais je vous previent, je n'ai que les bases et que la theorie, aucune pratiques!le prob, C que G ja Une question conne [ par Slashgo ] Je voudrais juste savoir où quelle(s) logiciels il faut pour dévelloper en assembleur.Gratuit de préférence@+ Probleme de dll! (arguments...) [ par BlackWizzard ] salut les pro!voila, G une fonction contenu dans une dll mais cette fonction, je ne sait pas comment lui ajouter des arguments...voici un extrait du c Aide chaine de caracteres, nasm sous dos [ par Juke ] quelqu'un peut t'il m'aider pour un truc tout con.Comment faire pour demander à l'utilisateur de saisir une chaine, et de lui reafficher ?j'ai des tut Fonction Download [ par Stormy ] StormyQuelqu'un aurait'il connaissance d'une fonction permettant le passage de données (de fichiers plutôt) par le fait d'un socket? Merci et @+ Debutant en asm [ par valconi ] =[[V@LcOnI]]= Bonjourje voudrai me mettre à l'ASMQu'elle Editeur me conseillez vouset qu'elle compilateur me conseillez vousMerci d'avanceValco ptite question [ par comax ] Voilà, j'ai un pc qui est relativement ancien et son bios ne prend pas les cdrom bootable. Or j'ai un cdrom bootable que j'aimerai bien voir. Je voudr EditBox [ par Bros ] SalutJ'ai une fenetre avec un editbox.Mon programme ouvre un fichier et va afficher dans l'édit box: "Fichier ouvert..."En suite a la ligne en dessous Fonction DLL avec arguments [ par Arnotic ] Bonjour, J'ai une DLL avec une fonction qui prend 2 arguments (en C (char*, int). Lorsque je la charge j'ai aucun problème mais lors de l'appel à debutant tail d'un fichier [ par TRAX44 ] Salut,c 1 truc tou con je c + cmt on fé pour avoir la tail d'un fichier en octet kan on a son handlemerci


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales