Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 2014
-
30 août 2007 à 01:12
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 2014
-
31 août 2007 à 22:07
Bonsoir,
Est-ce que quelqu'un saurait me "traduire" ces quelques lignes en assembleur:
HANDLE hFile;
DWORD bw;
char CurDir[MAX_PATH];
GetCurrentDirectory(MAX_PATH, &CurDir);
hFile = CreateFile("C:\\config.bak", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
WriteFile(hFile, &CurDir, MAX_PATH, &bw, 0);
CloseHandle(hFile);
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 août 2007 à 13:04
Voila fait.
Gaffe que ça écrit les 260 octets de CurDir comme voulu dans ton code. Pas grave à la relecture puisqu'il y a le 0 final parmi les 260 octets.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 août 2007 à 08:57
CurDir EST un pointeur donc pas de '&' devant.
Quel intérêt de le mettre en ASM ?
Soit c'est une petite fonction indépendante et il n'y a rien à gagner par rapport au compilo, soit ça fait partie d'un bloc de code et auquel cas il faut tout mettre en ASM.
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 30 août 2007 à 12:51
C'est pas pour gagner en vitesse, c'est juste pour faire une petite experience, il me faudrait juste la declaration des variables et l'apelle au fonction avec push et call, mais je ne sait pas comment declarer les variables, et je crois qu'il faut passer les parametre a l'envers?
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 30 août 2007 à 18:50
Ce petit bout de code est censé ecrire son path dans C:\lcfg.bak
mais il plante des la premiere instruction: "la memoire ne peut etre written"
mov dword ptr[eax], 006B6162h
pk?
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 30 août 2007 à 19:51
On ne peut pas ecrire directement dans les registres?
Quand on fait char Test[32] ca n'alloue pas de memoire, ca ecrit directement dans la memoire cache du processeur non?
Sinon comment je peux faire pour obtenir un poiteur sur une zone de memoire libre?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 30 août 2007 à 20:28
"Quand on fait char Test[32] ca n'alloue pas de mémoire, ca ecrit directement dans la memoire cache du processeur non?"
Non. Un tableau fait reculer esp pour avoir sa mémoire sur le stack.
lea edx, [esp - 264]
[esp - 264] est ton tableau char CurDir[260];
edx est son "pointeur".
mov byte ptr[edx], 0x66 équivaut à faire (CurDir[0] = 0x66 ou *pointeur = 0x66)
Ouvre un livre d'assembler avant de continuer plus loin. Il serait important de maitriser les concepts de registre et stack (entre autres) avant toute chose.