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 :

La base addresse du Kernel32.dll avec un code inconnu !


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 4
    Points
    4
    Par défaut La base addresse du Kernel32.dll avec un code inconnu !
    Salut !

    Je suis un nouveau membre dans ce forum. J'ai trouvé un code en Assembleur 32 bits bien sûr, pour obtenir la base address du Kernel32.dll. Mais, j'ai pas compris une partie dans ce code-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                xor eax, eax                           ; eax = 0
                add eax, 48                           ; 30h = PEB
                mov ecx, fs:[eax]                   ; Into PEB
                mov ecx, [ecx + 0x0C]            ; PEB->LDR
                mov ecx, [ecx + 0x14]            ; 1st Entry
                mov ecx, [ecx]                       ; 2nd Entry
                mov ecx, [ecx]                       ; 3rd Entry
                mov ecx, [ecx + 0x10]            ; Kernel32.dll Base Address
                push ecx                               ; Save the Kernel32.dll Base Address in Stack
     
     -------------------------------------------
          mov ecx, [ecx]  ; 2nd Entry
          mov ecx, [ecx]  ; 3rd Entry
    --------------------------------------------
    J'ai pas compris cette partie de code, c'est le même code, mais il retourne une adresse différente par rapport à l'autre.

    Y a t-il quelqu'un entre vous qui peut m'aider à comprendre cet trick ?

    Merci en avance.

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    c'est juste que le contenu de l'adresse pointe sur le contenu d'une autre adresse ...etc...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Pouvez-vous me donner un exemple simple qui montre cet concept ? ou donner une explication de cela en ce qui concerne la mémoire .

    J'attend votre réponse

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonjour et bienvenue,

    Citation Envoyé par Chupacabra Voir le message
    Pouvez-vous me donner un exemple simple qui montre cet concept ? ou donner une explication de cela en ce qui concerne la mémoire
    Il s'agit d'une « indirection ». Si tu as fait du langage C, tu serais ici en présence de pointeurs.

    Lorsque tu lis « [ecx] », les crochets signifient qu'on ne se réfère pas à la valeur de ECX mais à la valeur en mémoire pointée par ECX. Il se trouve simplement qu'en l'occurence, la valeur en question va être chargée dans ce même registre ECX (et donc écraser la précédente). La valeur qui va être rapatriée ici est en fait une autre adresse mémoire, auquel on va faire subir le même traitement. Par conséquent, les deux instructions ont beau être les mêmes, puisque le contenu de ECX change de l'une à l'autre, le résultat sera différent aussi.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Salut Obsidian !

    Pouvez-vous me donner un exemple en C ou en Assembleur qui explique cette( Massive Hurdle ) ?
    J'ai pas compris, j'opte l'explication avec des exemples...

    Pardon, si je suis stupide

    Merci en avance.

  6. #6
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Bonsoir,

    Petit exemple avec des valeurs au hasard.

    si ecx=1234h

    mov ecx,[ecx+0x1E]

    place dans ecx le contenu de l'adresse 1252h (1234h+1Eh)

    si tu refais un

    mov ecx,[ecx]

    c'est la valeur chargée précédemment dans ecx qui sert d'adresse.

    Comme l'a dit Obsidian, c'est le fonctionnement des pointeurs

Discussions similaires

  1. Détachement d'une base de données SQL SERVER avec du code VB6
    Par seyiv dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/05/2009, 18h57
  2. DLL, prefered base address, rebasing et autres joyeuseries
    Par NicolasJolet dans le forum Windows
    Réponses: 22
    Dernier message: 04/06/2007, 10h42
  3. utilisation de dll avec diverses compilateurs
    Par Thylia dans le forum C++
    Réponses: 30
    Dernier message: 21/10/2004, 17h30
  4. Réponses: 12
    Dernier message: 26/04/2004, 09h32
  5. créér une dll avec borland c++ compiler
    Par juju62610 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 26/02/2003, 10h46

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