Im essayant actuellement d'écrire un désassembleur. J'ai trouvé la liste suivante des opcodes et leur signification, alors j'ai décidé de l'analyser à l'exécution: http://mprolab.teipir.gr/vivlio80X86/pentium.txtx86 codage d'opcode: octet de sib
Mais je suis coincé à l'opcode 0x00: Il est suivi par un reg/modbyte. L'analyser n'était pas vraiment un problème pour moi. Mais j'ai des problèmes avec le Scale-Index-Byte: Si vous spécifiez en particulier esp comme registre d'index, cela signifie en réalité qu'il n'y a pas de registre d'index. La même chose s'applique pour le registre de base avec ebp. Mais je l'ai essayé avec C++ assembleur en ligne: Il est possible de compiler: "ajouter [ebp * 2 + ebp], cl"
Alors comment peut-on utiliser ebp comme registre de base quand on utilise ebp comme registre de base signifie utiliser aucun registre de base du tout!
Ok sont là d'autres disparus registres pour les valeurs de déplacement 8bit et 32bit alors? Y a-t-il d'autres étranges inhabituelles? – Zotta
Seul EBP est "manquant". Notez que vous pouvez encoder [déplacement] pur addresing à cause de "manque index ESP" et "manque de base PAAS" de deux façons: 000D 78563412 add [12345678], cl 000C25 78563412 add [12345678], cl Cependant, Mode 64 bits, le premier opcode signifie: 000D 78563412 ajouter [rip + 12345678], cl EDIT: merde, sauts de ligne ont été mangés ce qui rend le commentaire moins lisible. – MazeGen
Ok, maintenant ça marche. Grand merci! – Zotta