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
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
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é.
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...
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.
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.
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
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.
Tout à fait d'accord dans le cas général ou le dépassement de capacité est indiqué parEnvoyé par LogiCoder
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.
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?Envoyé par LogiCoder
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...
Bien reçu, et je vais faire de mon mieux
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager