IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Différentes manières d'appel de sous-programme


Sujet :

Assembleur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 151
    Points : 83
    Points
    83
    Par défaut Différentes manières d'appel de sous-programme
    Bonjour,

    Je développe une application qui permettrait d'identifier l'arbre d'appel de sous programmes à partir d'un fichier asm.

    J'aimerais savoir si l'instruction push 0xadresse pourrait se référer à un appel de sous programme.

    J'ai essayé de chercher sur internet mais sans résultat.

    Merci d'avance.

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Salut,

    PUSH place simplement une valeur sur la pile, ça peut être simplement pour sauvegarder un registre. La plupart du temps l'appel d'une fonction se fait avec l'instruction CALL mais pas toujours, quand CALL est suivie d'une instruction RET on peut toutes les deux les remplacer par un JMP. Il y a d'autres optimisations du même genre mais elles ne tiennent pas compte du mécanisme de prédiction des adresses de retour qui existe depuis les premiers Pentium (de mémoire) et il y a peu de chances pour qu'un compilateur actuel les utilise. Avec MASM ce serait facile de savoir si un JMP cible une fonction parce qu'en général on déclare une fonction avec les directives PROC et ENDP. Par contre avec FASM c'est moins populaire (c'est seulement supporté dans la version Windows je crois), et je crois qu'avec NASM on n'utilise que des simples étiquettes (labels).
    On utilise souvent aussi des macros qui se chargent de créer les suites d'instructions qui réalisent l'appel. La macro fournie avec MASM s'appelle "invoke", FASM la supporte aussi mais utilise d'autres noms de macros pour supporter plusieurs conventions d'appel (celle de MASM se base sur le prototype ou une autre directive comme EXTERN pour connaître la convention qu'utilise la fonction et savoir comment l'appeler). Il se peut aussi que l'utilisateur ait créé sa propre macro.

  3. #3
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    call "adresse"
    correspond a:
    push ip
    jmp "adresse"


    callf "segment:adresse" (appel sf dans un autre segment)
    correspond a: (a verfier je dit ça de mémoire)
    push cs
    push ip
    jmp "segment:adresse"

    il suffirai donc de regarder dans la pile l'adresse du programme qui a appellé

Discussions similaires

  1. Faire appel à un sous programme se trouvant dans un autre fichie
    Par Roud9 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 12/04/2011, 12h43
  2. appeler un sous-programme
    Par wedoud dans le forum Langage
    Réponses: 1
    Dernier message: 20/10/2007, 00h35
  3. Réponses: 4
    Dernier message: 13/11/2006, 10h54
  4. Appel sous programme
    Par sam.fet dans le forum Linux
    Réponses: 2
    Dernier message: 17/08/2006, 13h20
  5. Appel à un sous programme
    Par vince2005 dans le forum Langage
    Réponses: 4
    Dernier message: 13/07/2006, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo