Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Manipulation de chaine dans la base de registre [ Divers / Débutant(e) ] (Micro_and_Macro)

mercredi 28 février 2007 à 10:14:21 | Manipulation de chaine dans la base de registre

Micro_and_Macro

Salut, tout le monde je maitrise mal la manipulation des chaines etc..
J'ai besoin d'aide ! :p

Voilà je récupère d'un client un " buff      db 512 dup (0) "  de valeur   "/title montitre"
Je découpe donc la chaîne.pour pouvoir inscrire "montitre" dans une valeur de la base de registre
En affichant la var "temp" avec une message box , on obtient bien "montitre",mais dans la base de registre on obtient 32@, à chaque fois.
Je pense que le pronlème vient du SIZEOF temp ou que temp n'est pas null terminated

ietitle:
   mov eax,OFFSET buff  ;on récupere le buffer
    add eax,7 ;on saute de 7 caracteres pour sauter la commande+1 espace et arriver à la chaine
    mov temp,eax ; on sauve la var titre
    Invoke RegOpenKeyEx, HKEY_CURRENT_USER, addr clef2, 0, KEY_ALL_ACCESS, addr hreg ; ouverture
    Invoke RegSetValueEx,hreg,addr valuereg2,0,REG_EXPAND_SZ,offset temp,SIZOF temp ;ecriture
    Invoke RegCloseKey, hreg ;fermeture

Qu'en pensez vous?

mercredi 28 février 2007 à 18:32:21 | Re : Manipulation de chaine dans la base de registre

Micro_and_Macro

Petite précision sur temp : temp      dd ?

Voilà , je n'ai toujours pas trouvé la solution.
Par contre si j'initialise temp comme ceci : temp dd "montitre"
la donnée s'inscrit effectivement bien dans le registre !?

 


 

mercredi 28 février 2007 à 19:07:35 | Re : Manipulation de chaine dans la base de registre

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !

offset temp ???
tu as mis dans tmp l'adresse, now tu donnes l'adressde de la variable contenant l'adresse,ça te parait cohérent ???

SIZOF temp ??? mais c'est 4 à tout coup, c'est strlen(chaine) qu'attend l'API.
REG_EXPAND_SZ ??? TABLEAU DE CHAINES SEPAREE2 PAR UN 0 ET FINISSANT DONC PAR 2 ZEROS.

Invoke RegOpenKeyEx, HKEY_CURRENT_USER, addr clef2, 0, KEY_ALL_ACCESS, addr hreg ; ouverture
mov eax, offset buff
add eax, 6 ; (ADRESSE - 1) CHAINE A ECRIRE
lea edx, [eax+1] ; CONSERVERA L'ADRESSE
goLEN: ; CALCUL strlen(EDX)
add eax, 1
cmp byte ptr[eax], 0
jne short goLEN
sub eax, edx ; OK ON A LEN ET ADRESSE CHAINE
push eax
push edx
push REG_SZ
push 0
push offset valuereg2
push hreg
call RegSetValueEx

Ecrire en ASM a la vertu de forcer à réfléchir sur ce qu'on tape, le sabir ne mène à rien de bon.


ciao...
BruNews, MVP VC++


mercredi 28 février 2007 à 20:22:20 | Re : Manipulation de chaine dans la base de registre

Micro_and_Macro

(-_-)  Sympa.
Je sais qu'il me manque des bases théoriques, instruction processeurs , manipulation des registres etc!!!
L'ASM ne s'apprend pas en une semaine à mon avis, donc j'essai de comprendre , je me plante ,  j'apprend etc

Je pense que ta réponse sera instructive , car ne crois pas que je vais copier coller ton code, mais bien décorticer chaque action, pour au final comprendre..

Si je post c'est que je bloque.. et donc que j'ai réflêchi avant.. maintenant peut être que je ne suis pas doué 'ok'; il ne fallait pas te sentir obligé de m'aider hein :/

 

mercredi 28 février 2007 à 20:52:12 | Re : Manipulation de chaine dans la base de registre

BruNews

Administrateur CodeS-SourceS
Mais qui parle de "pas doué" ? personne.
Faut pas prendre la mouche pour la forme, intéresse toi aux points que j'ai soulignés et tout ira bien.

J'insiste sur un point:
La syntaxe de haut niveau en ASM est une inepsie, le haut niveau valable de l'ASM est le C car il y a un compilo pour optimiser. Force toi à écrire en ASM, c'est la seule manière d'obtenir un code valable.

ciao...
BruNews, MVP VC++

vendredi 2 mars 2007 à 16:05:06 | Re : Manipulation de chaine dans la base de registre

Micro_and_Macro

Oui, surchauffe,me suis emporté, une pause s'imposait.
C'est vrai qu'en relisant,ça parait logique,ça ne pouvait pas fonctionner ainsi.
1.Mais il me parait étrange que cela fonctionne avec une var. initialisée non ?
2.Tu as dit "SIZOF temp ??? mais c'est 4" , tu pourrais aller un peu pus loin , j'aimerais en connaitre la raison.
Merci, je résolute ^^

Did you know?
In York, it is perfectly legal to shoot a Scotsman with a bow and arrow (except on Sundays)


vendredi 2 mars 2007 à 20:12:16 | Re : Manipulation de chaine dans la base de registre

BruNews

Administrateur CodeS-SourceS
Tu entends quoi par "var initialisée" ?

En fait "sizeof temp" je parlais de taille d'un pointeur mais ce n'est pas forcément le cas ici, je vais aussi un peu trop vite parfois, passer d'un site à l'autre...

ciao...
BruNews, MVP VC++

dimanche 4 mars 2007 à 08:56:23 | Re : Manipulation de chaine dans la base de registre

Micro_and_Macro

Salut,tu étais dans le juste en tout cas^^

1.pour la var initialisée j'entends (temp db"blablbl",0), mais en relisant le code , c'est normal que cela fonctionnait car temp n'était plus un pointeur à ce moment(sans le offset buff )...

2.Et oui , Sizeof temp avait,autrement la taille d'un pointeur; c'était le cas..

3.Avec ta réponse si la commande était /title montitre,dans le registre s'inscrivait montitre[][].
J'ai donc fait un sub eax,2 sans trop savoir pourquoi exactement.
Ce pourrait être que tu sors de la boucle quand  le byte vaut 0.(mais dans ce cas sub eax,1)
J'ai lu une histoire de"carriage return",quelque part.

4.Je n'ai pas trouvé la signification du  jne "short" golen..Je doute que ce soit par simple goût vestimentaire hein^^
ok je sors[]

5.Pour l'asm haut niveau , tu parles pour tout ce qui n'est pas en héxa ou plutot des invoke .if .while companie
Donc tu penses qu'un code C pourrait être plus rapide qu'un code asm haut niveau (O_O)


dimanche 4 mars 2007 à 15:35:31 | Re : Manipulation de chaine dans la base de registre

BruNews

Administrateur CodeS-SourceS

'short' réduit la taille de l'instruction de JMP, seulement si déplacement <= 127 octets.
Si écrit "montitre[][]" c'est que ta chaine finit ainsi mais mon calcul strlen() est tout à fait juste.

Je t'ai fait démo ici:
http://www.asmfr.com/code.aspx?ID=41733

ciao...
BruNews, MVP VC++




Cette discussion est classé dans : base, chaine, temp, registre, manipulation


Répondre à ce message

Sujets en rapport avec ce message

Comment trouver l'appel d'une cle de la base de registre dans W32DASM par exemple [ par huguesmagali ] J'ai un prog qui appelle une clé dans la base de registre windows ( Dword = 0x00000012 ), puis il fait un traitement parce que cette clé est "cryptée" Base de Registre [ par VBrifi ] bon ma question a un rapport avec l'assembleur -j'ai cracké un vieux petit programme qui demande un numéro de série pour s'enregistrer : un jne rempl Placer là "partie basse" d'un registre 32 bits dans un registre 16 bits ??? [ par Otaku ] Salut, tout est dans le titre, comment faire pour placer la partie basse (LOWWORD) d'une valeur stockée dans le registre EAX dans un registre 16 bits Comment convertir une chaine de caractere en nombre [ par davidv ] Voila,comment une chaine de caractere "12" par exemplepeut elle etre convertie en nombre 12.merci a tousdavidV Kernel Base [ par Stormy ] Quelqu'un saurait-il comment obtenir le pattern MZ qui correspond à l'adresse de Kernel Base, mais sans utiliser d' API? Le but est de déterminer la b Petite question... [ par did2604 ] Bonsoir,Que signifie exactement la notation crochet en assembleur ? Je m'explique, par exemple : mov cl,[bx], je suppose que ce n'est pas un move ordi affichage du contenu d'un registre général [ par did2604 ] Bonsoir,Quel est le code qui permet d'afficher le contenu d'un registre général (bx par exemple). Exemple, le registre BX contient la valeur 3F8 et j' Compression de données [ par nicoxtaze ] Bonjour à tous, Voila, je travaille en ce moment sur un projet pour mon école, qui consiste à faire la compression d'une chaine de caractères selon l' utilisation des variables [ par moffer ] Bonjour à tous.J'ai besoin de recopier ma variable chaine au segment 0b800 pour l'afficher, sans utiliser les interruptions. (c'est pour ensuite la fa Adresse mémoire d'une chaine [ par moffer ] Bonjour,Je veux pointer sur le premier caractère de ma chaine. Lorsque je compile le code suivant :SEGMENT DATAchaine db 'Hello$'SEGMENT TEX


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.