Problème ac du inline asm

oceax Messages postés 16 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 4 juin 2008 - 22 juin 2004 à 12:03
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 22 juin 2004 à 20:23
Bonjour,
je suis débutant en c++ et n'y connais pas encore énormément gd chose...
Sur mon dernier programme (un keygen pr crack me que j'ai créé par mes soins) j'obtiens le message d'erreur suivant :
error : too many memory references for 'mov';

voici ma source :

#include <stdio.h>
#include
#include <string.h>

int main(int nNumberofArgs, char* pszArgs[])
{
int serial;
int longueur;
char szNom [20];
cout << "Salut je te souhaite la bienvenue dans ce Keygen";
cout <<"Ton nom stp :";
cin.getline (szNom, 20);
longueur = strlen (szNom);
asm
(
"start :"
"mov edi, byte [szNom]"
"xor edi,30"
"push edi"
"xor edi,20"
"mov serial,edi"
)
;
cout << serial;
return 0;
}

Voila si qqn peut m'aider je lui serait très reconnaissant
a bientot
Ben

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 juin 2004 à 13:35
mov edi, byte [szNom]
C'est QUOI le but de cette instruction ???
Tu veux prendre 1er octet de szNom ou 4 ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
oceax Messages postés 16 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 4 juin 2008
22 juin 2004 à 20:08
En fait j'aimerais prendre la première lettre de la chaine et y effectuer les opérations dessus
Désolé pour mon inculture mais je débute
merci a+
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 juin 2004 à 20:23
movzx eax, byte ptr [szNom]

Emploie registres generaux (EAX, ECX et EDX) tant que faire se peut et EAX en priorite car c'est le plus rapide d'acces, les autres sont a sauvegarder en entree et a restaurer en sortie.

Que fait ce 'push edi' au milieu, je ne vois ni 'pop' ni aucun appel de fonction qui remontera ESP. Passera dans ton exemple car tu sors du prog juste derriere mais sur un prog important ce sera badaboum a tout coup.

Ne mettre de l'ASM que s'il y a un benef (perf ou taille code) mais pas quand tu obtiens exactement la meme chose avec du C, ce qui peut se faire dans ton exemple.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Rejoignez-nous