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 16-bits Assembleur Discussion :

Assemblage d'une instruction jmp


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut Assemblage d'une instruction jmp
    Salut à tous, j'ai fait un petit programme que je n'ai pas fini car je ne savais pas trop où chercher, c'était un programme qui faisait de l'hexa, et j'aurais voulu transformer ça en instructions asm.
    Mais je sais pas trop où chercher car j'ai voulu m'aider de logiciels assembleurs, mais ils ne trouvaient pas la même chose entre eux donc voilà, est-ce que quelqu'un sait où chercher ? (me dites pas Google car j'ai pas trouvé).
    Merci d'avance pour votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Je voulais en gros programmer un logiciel pour transformer l'hexa en assembleur mais je sais pas trop comment traduire l'hexa.
    je site un exemple au hasard, j'ai vu des truk du type: EB1B = jmp 432A934
    L'exemple est faux mais j'ai vu un truk similaire et je n'ai pas compri comment un jmp avec une adresse en hexa pouvait se transformer en 4 digit en hexa.
    Soit c'est trés compliquer, soit le logiciel utiliser été pourri (je pense pas trop car on me la conseiller plein de fois). Si quelqu'un sait ou je peut apprendre a convertir l'hexa, ça serais bien.
    merci d'avance.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Mui,
    Citation Envoyé par Nitro386 Voir le message
    Je voulais en gros programmer un logiciel pour transformer l'hexa en assembleur mais je sais pas trop comment traduire l'hexa.
    je site un exemple au hasard, j'ai vu des truk du type: EB1B = jmp 432A934
    L'exemple est faux mais j'ai vu un truk similaire et je n'ai pas compri comment un jmp avec une adresse en hexa pouvait se transformer en 4 digit en hexa.
    Soit c'est trés compliquer, soit le logiciel utiliser été pourri (je pense pas trop car on me la conseiller plein de fois). Si quelqu'un sait ou je peut apprendre a convertir l'hexa, ça serais bien.
    merci d'avance.
    Alors, commence par apprendre ce qu'est l'assembleur, car là, tu veux travailler sur quelque chose que tu n'as absolument pas compris.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Ok, ba j'ai déja parcouru pas mal de tutos d'assembleur mais je n'ai absolument pas vue comment transformer de l'hexa en instruction assembleur. Je vais éssayer d'en trouver des mieu alors.

  5. #5
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    vous zetes pas droles les mecs...
    c'est nul de se prendre au serieux...
    on dirai des montiliens...

    alors, l'hexa represente du binaire...
    les instructions asm sont en fait des codes binaires...
    ces codes binaires entrent dans le prossesseur par le bus de données...
    le bus fait 64bits sur un Pentium X...
    le pointeur utilisé pour acceder au codes, c'est CS:EIP

    eip est en octets, donc, il n'y a pas d'instructions plus petites qu'un octet.. c'est pas possible...
    ensuite, il n'y a pas de comppression des instructions, si tu fournis deux valeur 32 bits dans ton instruction, alors elle aura au moins 64 bits pour la composer...

    par exemple, un mov eax,ebx tient dans 3 octets...

    ton jmp 4324324, il est composé de deux champs, le mnemonique, et l'operande...
    mnémonique operande1,operande2,operande3
    le mnémonique c'est jmp
    l'operande c'est 4324324
    si tu cherches bien, tu vas trouver que jmp 4324324 c'est 5 octets, et non deux...
    1 pour dire que c'est un jump, et 4 pour donner l'addresse...
    les données en memoire sont organisées selon la little endian...

    les octets de poids faibles sur les premieres addresses...
    les octets de poid fort sur les dernieres addresses...

    12345678h
    en memoire, octet par octet, ça donne:
    78,56,34,12

    voilà
    voilà, c'est de l'asm...

  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
    Oui, mais un JMP sera code differament si c'est un saut relatif ou absolu,
    et en relatif, il sera code differament si c'est un saut long ou court ...

    oui, c'est complique le codage des instructions...

    a+ Francois

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    ok, c'est sympa de m'éxpliquer, mais j'ai pas trop piger un truc :
    j'ai un exemple vrai: 756E = jne00422399.
    jne = 75, ça j'ai compris car j'ai les traductions des instructions, mais pourquoi le reste est égal a 6E? je vois pas trop trop comment on fait ça.

  8. #8
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    il n'y a pas de 6E dans ton instruction, je sais pas ou tu es allé le chercher...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Ba j'ai désassembler un de mes programme pour avoir un exemple d'instruction qui existe.
    J'ai utiliser wingasm_9.

  10. #10
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Comme le disait Forthman les sauts sont relatifs.

    Il faut donc prendre la taille de l'instruction et ajouter le "déplacement" (displacement en anglais).

    75 6E est une instruction qui fait 2 octets, le déplacement vaut 0x6E. La cible du saut conditionnel est donc en :

    Adresse de l'instruction + 2 + 0x6E.

    Ex (format : adresse - opcodes - mnémoniques):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    401000 75 6E JNZ 401070
    La cible du saut est donc :

    0x401000 + 2 + 0x6E => soit 0x401070.

    N.B : l'opcode 0x75 est limité aux sauts de type SHORT, donc avec un maximum vers l'avant de 0x7F (+127) et vers l'arrière de 0x80 (-128) puisque l'on est en arithmétique signée sur un octet.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Merci,j'ai compris , je me disait aussi, il y avait un truk car je voyer pas comment c'était possible.
    J'ai tester avec d'autre pour voir si j'avais tout compri et puis ça marche.
    Quelqu'un aurait un tuto sous la main a me montrer pour apprendre comment ça se passe le passage de l'hexa a l'assembleur?(en faite le programme que je veux faire est un désassembleur. Oui je sais ça existe déja, mais j'ai envie d'aprendre par moi méme et puis ça va m'aider a aprendre plus sur l'assembleur car j'ai un peu du mal a m'imprégner de l'assembleur, avaler je ne sais pas combien de page de tuto d'assembleur m'apprend pas grand chose, j'ai plus de faciliter en faisant de la pratique.)

    Ps: Je n'ai aucun probléme avec le programme en lui méme, c'est juste la traduction qui me pose probléme.

  12. #12
    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
    exemple avec un jump inconditionnel : jmp

    si le saut relatif est compris entre -128 et +127 (1 octet signe)
    le code Hexa pour coder jmp = EBh + 1 octet

    si le saut relatif est compris entre -32768 et +32767 (1 mot 16 bits)
    le code Hexa pour coder jmp = E9h + 2 octets

    si c'est un saut absolu par exemple "jmp 1234:5678h"
    le code Hexa pour jmp = EAh suivi de 34h,12h,78h,56h

    Et ces choses qui donnent mal a la tete ne concernent pas seulement
    les sauts ...


    a+ Francois

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    C'est clair, ceux qui ont pondu ça devait trop étre des tétes (et aussi pas avoir de famille car ça a pas du ce faire enun jour lol).
    C'est marrant mais tous ce qui est prise de téte m'attire lol.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Comment exécuter une instruction dynamiquement ?
    Par NeoMan dans le forum Contribuez
    Réponses: 11
    Dernier message: 15/01/2009, 16h45
  2. Réponses: 13
    Dernier message: 27/12/2005, 09h17
  3. Une instruction s'execute qd on appuie sur entree
    Par nbutin dans le forum C++Builder
    Réponses: 1
    Dernier message: 17/08/2004, 00h48
  4. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  5. Passer de la zone d'édition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 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