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

C Discussion :

C detecter les appels aux fonctions internes


Sujet :

C

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut C detecter les appels aux fonctions internes
    Bonjour je connais PTRACE pour detecter les syscalls, mais je me demandais comment peut on detecter les appels aux fonctions internes du programme ?

    EDIT: en regardant le man intel je me demande si c'est pas en detectant l'opcode E8 dans EIP.

    Merci

  2. #2
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    ptrace te permet effectivement de détecter les appels systèmes. C'est un programme qui lance ton programme.

    Ton idée à base de EIP, il me semble, nécessite que tu instrumentes (modifie) ton code...

    Tu peux aussi lancer gdb et faire "(gdb) rbreak file.c:." ...

    Il faudrait que tu expliques un peu plus ton cas d'usage.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    Le cas d'usage est de coder un programme qui a pour but de detecter tous les appels aux fonctions interne du programme.

    J'ai essaye en detectant la valeur E8 dans EIP mais je detecte trop de fonction par rapport a objdump en analysant les call.

    Merci de votre aide.

  4. #4
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    C'est le programme qui se surveille lui même ? C'est ça ? Vous voulez vous même coder une fonction qui fasse quelque chose de particulier qui sera appelée à chaque appel de fonction "locale" au programme.

    Du coup il faut surveiller tous les appels de fonctions du programme sauf les appels systèmes et l'appel au handler de la surveillance.

    Je ne suis toujours pas sûr d'avoir compris si vous voulez faire un programme qui surveille n'importe quel autre process, ou un programme qui surveille sa propre exécution...

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    C'est un programme qui surveille n'importe quel autre programme.

    J'arrive a detecter les syscall en forkant le programme cible puis regarde si il y a 0xcd 0x80 dans EIP mais pour les appels aux fonctions internes c'est plus compliques...

    Merci.

  6. #6
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Est-ce que tu as la main sur le code source du programme à surveiller ? Cela permettrait d'avoir la possibilité de contrôler la génération de l'exécutable (on pourrait ensuite regarder comment fonctionne les profiler et s'en inspirer par exemple)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Salut,

    J'ai essaye en detectant la valeur E8 dans EIP mais je detecte trop de fonction par rapport a objdump en analysant les call.
    C'est tout a fait normal, objdump ne te montre que le code de l'exécutable mais pas celui des bibliothèques partagées (.so) auquelles il fait appel. Donc ton programme va également detecter les calls qui seront fait dans celles-ci.
    D'ailleurs les premiers calls que tu va "catcher" à la suite de ton execve seront ceux effectués par le code du loader (ld.so) avant même que le point d'entrée du programme soit atteint.

    Sinon tu l'as sans doute remarqué mais 0xe8 n'est pas le seul opcode permetant de faire des calls. Et 0xcd 0x80 n'est pas le seul moyen de faire des appels system.
    Donc si tu veux tout gérer tu auras un peu plus de boulot

Discussions similaires

  1. Les appels aux fonctions ne fonctionnent pas
    Par MaPommeTao dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/08/2011, 22h33
  2. preferer les appels aux fonctions const
    Par yan dans le forum C++
    Réponses: 12
    Dernier message: 29/08/2008, 10h15
  3. pb d'appel aux fonctions d'une DLL (visual C++ 6.0)
    Par touti35 dans le forum Visual C++
    Réponses: 4
    Dernier message: 12/12/2006, 09h37
  4. voir tout les appels de fonction avec le debugger?
    Par decksroy dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/10/2006, 11h33
  5. Appel aux fonctions d'une DLL externe ??
    Par Fbartolo dans le forum Access
    Réponses: 7
    Dernier message: 21/11/2005, 17h54

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