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

Assembleur Discussion :

Project [ Opcodes tester ]


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Project [ Opcodes tester ]
    Un petit programme pour simuler les OpCodes x86

    C'est la quatrième version Beta, j'ai besoin de vos conseils


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://www.dropbox.com/s/mqyv6asw5irmllp/Opcodes_tester.zip

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    J'ai regardé mais ya pas les registres..

    Puis, j'ai vu que tu fais du peb loading.
    C'est pour de l'anti-debug ?

    Et le loadlibrarya/ex/ etc.. ?

    Donc sinon j'ai pas trop compris ce qu'il faut tester avec, vu qu'il n'y a pas moyen de rentrer de valeur "al,ax,eax,rax" etc..

    Par contre perso ça m'aurait interessé d'avoir un programme qui me sortent un opcode "comme ça". Sans avoir à dumper ou sortir un debugger.

    Genre "rol eax,16" = 0x9010C0C1

    C'est pas la première fois que je me dit qu'un code qui ferait ça serait pas mal.
    Ca existe peut être déjà d'ailleurs mais j'ai pas encore cherché.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci bien pour votre commentaire

    Je suis a la face de développement, alors vous m’avez bien donné une bonne idée, les registres mmmmm je vais intégrer une multitude de teste OpCode sure 8 16 32 bits al, ax, eax...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Je n'arrivais pas à rentrer de valeur dedans, du coup je ne comprennais pas.
    Il faut faire un double clique, et là on peut rentrer des valeurs.
    Ca porte à confusion avec le curseur qui clignote, je pensais que c'était impossible de rentrer une valeur.

    Mais sinon ouep c'est une bonne idée.

  5. #5
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Bonjour.

    L'idée est intéressante, mais quelle-est l'utilité de l'option Reverse Bytes ?

    Si c'est l'inversion Petit/Grand Endian du résultat, c'est raté. Il ne faut pas inverser les quartets haut et bas de chaque octet.

    Par ailleurs certaines instructions semblent ne pas se comporter comme l'indique les spécifications Intel. Par exemple INC avec l'opérande FFFFFFFF donne bien 00000000 comme résultat mais met CF à 1 alors qu'il ne devrait pas.

    En ce qui concerne les registres, il n'est peut-être pas nécessaire de les passer tous en revue car le comportement d'une instruction est sensé être le même quelque soit le registre invoqué mais il faudrait au moins pouvoir sélectioner une taille d'opérande: 8, 16 ou 32 bits.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    1) INC avec l'opérande FFFFFFFF donne bien 00000000 c'est dépassement de capacité.
    2) Opérande 1 et Opérande 2 veux dire par exemple EAX et EBX et le traitement est sure 32 bit.
    3) le bute du programme c'est bien tester les OpCode (NOT,OR,ADD...ext), mieux que utiliser un débogueur, par exemple NOT EAX,EBX = NOT Opérande 1, Opérande 2 le résultante ce trouve dans Result: HEX DEC BIN TEXT.
    4) pour INC je croix que : Modifies flags: AF OF PF SF ZF !!! alors pas de CF
    5) l'option "Reverse Bytes" elle est importante pour les programmeur en assembleur car elle est utile dans les opération de calcule

  7. #7
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Bonjour et bonne année 2014.

    Il semble que je me sois mal exprimé, bon, reprenons:

    Mode 32 bits: OK, admettons que l'on opère uniquement en 32 bits. L'utilisateur débutant devra faire un petit effort pour extrapoler à 16 ou 8 bits. Cela peut faire l'objet d'un "improvement" ultérieur.

    Citation Envoyé par LogiCoder
    1) INC avec l'opérande FFFFFFFF donne bien 00000000 c'est dépassement de capacité.
    Tout à fait d'accord dans le cas général ou le dépassement de capacité est indiqué par
    CF et OF selon que les opérandes sont signés ou non signés.
    Mais INC (et DEC) font exception à cette règle générale: CF n'est jamais modifié alors que OF peut l'être (voir Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2) page 3-393 qui précise: Adds 1 to the destination operand, while preserving the state of the CF flag. [...] This instruction allows a loop counter to be updated without disturbing the CF flag.

    Ce n'est pas le comportement du Testeur. En effet si on exécute l'instruction INC avec FFFFFFFF comme opérande, on constate que CF, dans la zone CPU Flags est passé à 1.
    Si on clique sur le bouton CLC pour forcer CF à 0 et qu'on relance l'exécution de INC avec le même opérande (FFFFFFFF), CF repasse encore à 1.
    C'est très troublant pour l'utilisateur et en contradiction avec le X placé à droite du flag qui signifie, je présume, que le flag est ignoré et ne devrait pas varier.

    Toujours à propos des Flags j'ai détecté un autre problème pas très différent. Il concerne ADC:
    (je note en passant que SBB, son équivalent soustractif, n'est pas dans la liste)
    En effet ADC avec les deux opérandes à 0 donne 1 comme résultat quel que soit l'état affiché de CF avant l'opération. Alors qu'on devrait avoir comme résultat 0 si CF était à 0 et 1 si CF était à 1.

    L'outil n'est intéressant que si l'utilisateur peut tester le comportement des instructions dans différents cas de figure. Cela inclue, outre le ou les opérandes, la possibilité de fixer l'état inital des flags afin d'en tester l'influence sur l'opération. Or en l'état actuel, on ne peut que mettre CF à zéro.
    Il serait souhaitable de pouvoir forcer à 0 ou 1 au moins les flags SF, ZF, AF, PF et CF.

    A voir, si cela peut t'aider, le tableau A-2 de l'annexe A du document Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1 . Ce tableau récapitule l'utilisation qui est faite des flags par la plupart des instructions. La lettre T dans les colonnes du tableau repère les intructions dont le comportement dépend (au moins partiellement) de la valeur initiale du flag correspondant.

    Citation Envoyé par LogiCoder
    5) l'option "Reverse Bytes" elle est importante pour les programmeur en assembleur car elle est utile dans les opération de calcule
    J'avoue que je ne comprend toujours pas bien à quoi cela peut servir. C'est la désignation "Reverse Bytes" qui m'a fait penser au "Byte ordering" ("Endianess") des octets. Si ce n'est pas celà, a-tu un cas d'emploi précis à me proposer en exemple?


    Jeu d'instructions (Operators).
    SHL pourrait être libellé SAL/SHL au niveau des boutons radio car ces deux mnémoniques sont également connus pour faire la même chose (elle génèrent d'ailleurs le même code machine). Enfin, pour compléter ce jeu de base il pourrait être ajouté, outre l'instruction SBB évoquée plus haut, l'instruction de décallage SAR (décallage à droite des nombres signés).

    Dans une version ultérieure, ce serait pas mal d'ajouter quelques instructions plus exotiques comme : AAA, AAS, DAA, DAS (arithmétique BCD), BSWAP (conversion grand/petit endian), CBW, CWDE (extension de magnitude des entiers signés) voire les intructions de multiplication et division (DIV, IDIV, IMUL, MUL, AAD, AAM). Certe ces instructions sont d'un moindre usage mais sont de ce fait moins bien connues et le testeur en serait d'autant plus apprécié.

    Bon courage...

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bien reçu, et je vais faire de mon mieux

Discussions similaires

  1. [Plug-in] Tester si un projet Java est un "Dynamic Web Project"
    Par kox2ee dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 04/02/2013, 13h07
  2. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54
  3. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  4. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55
  5. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43

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