Fonction Convert

nem02004 Messages postés 47 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 23 avril 2007 - 6 févr. 2006 à 14:13
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 7 févr. 2006 à 16:49
Voila mon code marche, mais comme je ne suis pas un super programmeur, je pense qu'il ya moyen de l'amélioré, c'est la que vous intervenez :D
En fait il sert a remplacer uen chaine de numeros en une chaine de caracteres.
Ex: Convert(0, 108,111,108, 0) = "lol"

char * Convert(char *buf,...)
{
char *exps[1024];
char *p;
int ep = -1;
va_list vp;
va_start(vp,buf);
char result[50];
sprintf(result,"");
while(p = (char *)va_arg(vp, char *) )
{
exps[ep++] = p;
sprintf(result,"%s%c",result,p);
}
return result;
}


int main(int argc, char* argv[]) {
MessageBox(NULL,Convert(0, 86,111,105,108,97,32,99,101,99,105,32,101,115,116,32,117,110,101,32,103,114,97,110,100,101,32,102,114,97,115,101,44,32,101,116,32,111,110,32,99,111,110,115,116,97,116,101,32,113,117,101,32,99,97,32,109,97,114,99,104,101,32,33, 0),NULL,0);
}

6 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 févr. 2006 à 16:45
Pour commencer, on ne renvoie jamais un pointeur locale dans une fonction.
Secondo, a quoi te sert le char * buff ?
Si c'est uniquement pour le va_start, passe plutot par atoi en gardant ton fonctionnement a N variables.
Sinon pourquoi avoir changé ta méthode avec les 0.108.111.108.0 ?
Pour ma part je trouve beaucoup plus simple de garder cette méthode en adaptant ta fonction convert.

Si tu veux un exemple pour cette méthode, il y a pas de soucis.

Shell
0
nem02004 Messages postés 47 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 23 avril 2007
6 févr. 2006 à 18:49
en fait la méthode a changer car ce $Convert me permet de masker ma source en fait on voi pas les Integer dans la source compilé alors qu'on voit les CHAR.
Donc grace a cette methode je peu masquer ma source.
Ensuite comment faire pour le pointeur alors ?
Le char * buff me sert strictement a rien, c juste que l'on peu pas faire: Convert(...), on est obliger de mettre quelque chsoe avant les 3.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 févr. 2006 à 09:58
Masquer ta source ?
Je doute qe ce soit d'une grande utilité. Au final tout revient à faire du code assembleur.
Donc plutot que de chercher a faire un code "masqué", opte plutot pour un code plus performant et surtout plus simple!

Tu ne pourra JAMAIS protégé un programme par du pseudo code!
Ca se saurai deja, et les crack n'existerai alors pas!

Shell
0
nem02004 Messages postés 47 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 23 avril 2007
7 févr. 2006 à 13:40
char * replace(char *buf,...)
{
char *p;
va_list vp;
va_start(vp,buf);
char *result=(char *)malloc(2*sizeof(char));
sprintf(result,"");
while(p = (char *)va_arg(vp, char *) )
{
result = (char *)realloc(result,strlen(result) +2 * sizeof(char));
sprintf(result,"%s%c",result,p);
}
return result;
}
La jai changer le pointeur, est-ce bon ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 févr. 2006 à 14:54
A partir du moment ou une fonction renvoie un pointeur d'une variable locale, ton code n'est plus bon et source a des erreurs non controlées.

A ta place je ne passerai pas par les va_list, mais plutot par une simple chaine comme tu l'avais fait au début (108.111.108)

Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 févr. 2006 à 16:49
Voici la fonction Convert sans tout ces va_list :


char * Convert(
char * pszDest,
const
char szSrc[])
{

int i;

int j;

char szNumber[4];


i = 0;
j = 0;



while(*szSrc)
{

if(*szSrc == '.')
{
szNumber[j] = 0;
pszDest[i++] = (
char) atoi(szNumber);
szNumber[0] = 0;
j = 0;
}

else
{
szNumber[j++] = *szSrc;
}


szSrc++;
}



if(szNumber != 0)
{
pszDest[i++] = (
char) atoi(szNumber);
}

pszDest[i] = 0;



return pszDest;
}

Shell
0
Rejoignez-nous