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

x86 32-bits / 64-bits Assembleur Discussion :

Déterminer l'adresse d'une application en mémoire


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Gib
    Gib est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 26
    Points : 26
    Points
    26
    Par défaut Déterminer l'adresse d'une application en mémoire
    Comment je peu avoir l'adresse de début mémoire de mon programme en cour d'execution ?

    (pas avec un debuggeur car je doit l'utilisé dans ce même programme et donc la mettre dans une variable)

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    La ou tu te trouve, c'est :
    Et quand tu charge un .com (et peut-etre un .exe, j'en suis pas sur),c'est

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    POUR UN .com il utilise une seule segment
    pour un exe il utilise plus d'une segent . avant son chargement il y a un plage de 256 octs "j'ai oblier son non" cette plage contient l'adresse de début du programme, pour avoir son adresse , il y a une fonction de int 21 qui vs la donne

  4. #4
    Gib
    Gib est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    J'utilise de assembleur dans du C++ et dans mes options du lieur j'ai "base de l'image" qui est a 0x00400000, ça correspond bien mais je me demande si ce serra toujours vrai.

    j'ai lu que CS n'existe pas dans Win98, j'ai bien compris ?

    Merci a tous.

  5. #5
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut Pas tout a fait
    Salut,

    Pour CS (comme pour tous les registres de srgment (DS,ES...)
    En Windows 16 bits il existe pas de pbm.

    En 32 bits il existe mais il est "caché" par l'OS qui utilise le flat model des micropro a base de 386.
    En flat model (4 go : 2 pour le systeme, 2 pour ton appli) il n'y a plus de segmentation (c'est l'equivalent d'un .com en mode reel)

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Gib, je ne crois pas qu'ils soient en train de parler de prog Win, mais pour ce qui est de "base de l'image", ce n'est pas l'adresse de Base du Code. C'est l'adresse de Base de l'Application. Pour avoir l'Adresse de Base du Code, en Assembleur, c'est la chose la plus simple du monde, puisqu'il suffit de définir un Label en début de Code et de charger l'Adresse. En C, je ne sais pas. Je pense qu'il est plus simple de demander au malade mental qui a ecrit le C que tu utilises (Mais bon, demander quelque chose en C sur un Forum Asm, ce n'est pas très raisonable non plus )


    Bye, Betov.

  7. #7
    Gib
    Gib est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Mon application est une appli windows32 en C++, ecrire de l'assembleur dans le code est tres simple, je post dans ce forum car j'attend bien une solution en assembleur

  8. #8
    Inactif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Dans ce cas, il faut:

    1) s'assurer que ton damned C sort bien tes routines dans l'ordre dans lequel tu les ecrits -les Routines Asm particuliérement-. C'est simple, tu fais une Routine Bidon avec deux ou trois NOP en debut de Source, et tu regarde avec un desassembleur si tes trois NOPs sont bien au début.

    2) Si c'est bon... tu remplaces tes NOPs par n'importe quoi qui te retourne l'adresse de la Routine Asm. Pour être 100% sûr de la valeur tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov eax This_Routine_Label
    and eax 0_FFFF_F000
    pour bien aligner sur le début de la section (au cas où).


    Tu peux ensuite verifier facilement que ta valeur est bonne en passant ton executable à la moulinette d'un truc comme PeView (qui te montre les Sections). Ta valeur devrait apparaître en tant que RVA de la section Code (simple RVA -sans la Linker default value (400000) dont tu parlait au debut).


    Betov.

  9. #9
    Gib
    Gib est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Bien, merci

    Pour info j'utilise C++Builder3 et il poke l'assembleur sans le modifié a l'endroi où je le déclare

  10. #10
    Inactif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Si tu en es content, c'est le principal

    Dans ce cas, il te suffit de faire quelque chose comme ça:

    >StartOfCode:
    > mov eax StartOfCode
    > ret

    Si il te fais des misères avec les évocations directes de labels, c'est un peu plus compliqué, il faut faire un CALL a l'interieur, vers un POP EAX // PUSH EAX // RET (qui te retourne l'adresse de retour du CALL dans EAX).


    Betov.


    PS. Faut vraiment avoir envie de s'****** (censored), plutôt que d'apprendre à programmer.

Discussions similaires

  1. Comment déterminer la présence d'une application ?
    Par Zebulon777 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 18/10/2010, 15h55
  2. déterminer si une application tourne
    Par Pitou5464 dans le forum Access
    Réponses: 10
    Dernier message: 28/08/2006, 14h29
  3. Réponses: 2
    Dernier message: 11/02/2006, 12h56
  4. Réponses: 11
    Dernier message: 13/01/2006, 15h30
  5. Utilisation Mémoire d'une application
    Par scorplex dans le forum Composants VCL
    Réponses: 8
    Dernier message: 21/05/2005, 03h01

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