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écompilation Opcode --> Assembleur


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre chevronné
    Avatar de cpcdos
    Homme Profil pro
    Ingé/concepteur chez Capgemini. Alstom APTIS. Concepteur de Felly autonomous vehicle software.
    Inscrit en
    Mai 2010
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingé/concepteur chez Capgemini. Alstom APTIS. Concepteur de Felly autonomous vehicle software.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 588
    Points : 1 770
    Points
    1 770
    Billets dans le blog
    1
    Par défaut Décompilation Opcode --> Assembleur
    Bonjour
    Je vais essayer de m'expliquer, c'est compliqué

    Pour un projet, je dois créer un décompilateur x86 Opcode -> Asm
    J'ai ce site pour avoir les correspondances : http://ref.x86asm.net/coder32.html

    Donc par exemple pour 66a305000000

    Opcode : 66 | A3 | 05 | 00 | 00 | 00
    J'identifie : AX | MOV | 0x5 | 0 | 0 | 0

    (Il y a 2 chiffre hexadécimaux par "colonne" on va dire)
    Résultat : MOV AX,0x5

    Mon problème c'est que je ne sais pas comment délimiter la taille de ces "colonnes" si je tombe par exemple sur ça : 668C2D24204D00
    Pour commencer je vois qu'il existe plusieurs sortes de Opcode qui correspond à "MOV"

    par exemple :

    668C2D24204D00

    Opcode : 66 | 8C | 2D | 24 20 4D | 00
    (Il y a toujours 2 chiffres hexadécimaux, sauf à la 4eme colonne!!!!)
    J'identifie : GS | MOV | 0x004D2024 | 0

    Résultat : MOV 0x004D2024,GS

    Comment peut-on savoir combien il y a de chiffes hexadécimaux à délimiter par "colonne" comme dans mon exemple ??
    Je remarque donc qu'il y a A3 et 8C qui veulent dire MOV il y a quelque chose en rapport ?

    et autre question en rapport
    J'ai ceci : 66 a3 05 00 00 00 66 01 05 05 00 00 00 66 29 05 02 00 00 00
    qui veux dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CMD  >  OPCODE
    mov AX,0x5 > 66 a3 05 00 00 00
    add AX,0x5 > 66 01 05 05 00 00 00
    sub AX,0x2 > 66 29 05 02 00 00 00
    Comment je fais pour délimiter chaque Opcode pour que je sépare les commandes en sachant qu'ils ont une taille différente?

    Merci

    PS: Vous me dîtes si vous n'avez pas compris svp
    Sébastien FAVIER
    Felly-software Autonomous vehicle software for everyone.
    co-kernel Cpcdos OSx un noyau 32bits simplifié et complet.. ou presque - Le fofo officiel c'est par ici.
    Les cours sur les systèmes c'est par là

  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 loin d'être aussi simple
    déjà 66h veut dire "les registres utilisés sont en 16 bits"
    car ton programme est en 32 bits
    si ton programme avait été en 16 bits ça aurait voulu dire que les données étaient en 32

    de plus le code n'est pas "mov ax,5" mais mov ax,[5]
    donc place dans ax le contenu de l'adresse 5 (adresse codée sur 32 bits c'est pour ça qu'il y a les 00 après)

  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 : 38

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    si tu veux de la doc qui t'explique complètement comment coder les instruction en assembleur je te conseille le "Intel Architecture Software Developer’s Manual Volume 2"

    une fois que tu auras comprit comment ça se code tu arrivera sans doute mieux a décoder. mais c'est du gros boulot qui t'attend

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 351
    Points : 42 822
    Points
    42 822
    Par défaut
    Autre astuce, il ne faut pas forcément penser en octets mais en binaire.

    De mémoire certaines instructions peuvent contenir dans un octet la "commande" et la "donnée"

    Une instruction peut prendre un nombre variable de bits ( donc par forcément 1 octet mais peut prendre plus ) . C'est l'instruction proprement dite qui va déterminer la longueur de la "commande" et de son paramètre.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Tu vas très certainement devoir mettre en place un automate pour décoder les instructions.

    Tu lis le début, tu l'interprètes, et en fonction de la signification tu saura comment interpréter la suite.

  6. #6
    Membre chevronné
    Avatar de cpcdos
    Homme Profil pro
    Ingé/concepteur chez Capgemini. Alstom APTIS. Concepteur de Felly autonomous vehicle software.
    Inscrit en
    Mai 2010
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingé/concepteur chez Capgemini. Alstom APTIS. Concepteur de Felly autonomous vehicle software.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 588
    Points : 1 770
    Points
    1 770
    Billets dans le blog
    1
    Par défaut
    Merci pour vos réponses
    je vous tiens au courant si j'ai des question.
    Sébastien FAVIER
    Felly-software Autonomous vehicle software for everyone.
    co-kernel Cpcdos OSx un noyau 32bits simplifié et complet.. ou presque - Le fofo officiel c'est par ici.
    Les cours sur les systèmes c'est par là

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Citation Envoyé par cpcdos Voir le message
    Merci pour vos réponses
    je vous tiens au courant si j'ai des question.
    salut pour faire un désassembleur il faut obligatoirement la doc d'Intel comme le mentionne "Bifur"
    Il y a un exemple relativement simple de déassembleur en C sur Internet du créateur de OllyDbg

Discussions similaires

  1. Tutoriels, F.A.Q : la rubrique Assembleur de Developpez.com
    Par Alcatîz dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/06/2007, 20h14
  2. Centrino : quel Assembleur ? Opcodes 16-32-64 bits
    Par Arnaudv6 dans le forum Assembleur
    Réponses: 16
    Dernier message: 14/01/2004, 11h42
  3. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 20h25
  4. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 18h05
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 11h59

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