struct plageMem {
void * addrStart;
};
alloc.addrStart = allocMemPage();
alloc.addrStart = 0xDEADBEEF;
En gros je voudrait écrire le dword à l'emplacement mémoire pointé par addrStart.
En gros, je voudrais faire l'équivalent de:
mov dword ptr[addrStart], 0DEADBEEFh
C'est sans doute une question bête de débutant mais j'ai vraiment aucune idée. Merci d'avance.
# ASM
Posté par NeoX . Évalué à 1.
#include <asm.h>
[...]ton code[...]
asm {
mov dword ptr[addrStart], 0DEADBEEFh
}
[^] # Re: ASM
Posté par nats . Évalué à 1.
Mais merci quand meme.
# *
Posté par JaguarWan . Évalué à 2.
struct plageMem {
void * addrStart; /* vaudrait mieux unsigned (int|char) je pense */
};
alloc.addrStart = allocMemPage();
*alloc.addrStart = 0xdeadbeef;
/* ou alternativement */
alloc.addrStart[0] = 0xdeadbeef;
Si tu veux copier beaucoup de données dans ton buffer (une page mémoire ça me semble beaucoup pour simplement écrire un dword dedans), memcpy(3)/memmove(3) sont tes amies.
[^] # Re: *
Posté par nats . Évalué à 1.
Bah justement cette syntaxe n'a pas l'air de passer....
En fait j'ai deja penser au memcpy et autres opérations sur les buffers mais j'avoue que j'ai mes petites habitudes d'assembleur :)
En tout cas merci a toi et aux autres commentaires aussi :)
(pour la peine je plussoie ^^)
[^] # Re: *
Posté par alf . Évalué à 2.
# .
Posté par Anonyme . Évalué à 4.
unsigned int *ptr=addrStart; /* declaration et initialisation du pointeur */
*ptr=Value; /* Value est copiee a l'adresse pointee par ptr */
mais j'ai le sentiment que ce n'est pas exactement ce que tu recherches, me gourre-je ?
[^] # Re: .
Posté par nats . Évalué à 1.
*alloc.addrStart = 0xdeadbeef;
Me renvoit l'erreur illegal indirection...
[^] # Re: .
Posté par Anonyme . Évalué à 7.
[^] # Re: .
Posté par Anonyme . Évalué à 2.
parce que l'operateur * sert a dereferencer un pointeur.
si alloc est un pointeur, *alloc correspond a l'adresse stockee dans alloc
et alloc->addrStart est equivalent a (*alloc).addrStart (les parentheses sont importantes)
si alloc est une variable statique, *alloc ne correspond pas a une adresse memoire, mais a la valeur d'une variable. Donc *alloc.addrStart equivaut a prendre cette valeur comme une adresse memoire (ce qu'elle n'est pas sauf effet de bord) et a regarder ce qu'elle contient, ce qui mene irremediablement a une erreur.
[^] # Re: .
Posté par nats . Évalué à 1.
Mais en fait je pense que ce que je veux faire n'est pas possible aussi directement.
mais en gros c'est l'equivalent de:
DWORD data = 0xdeadbeef;
memcpy(alloc.addrStart, &data, sizeof(DWORD));
mais sans memcpy. Mais en fait je me suis resigné car en regant un peu apres la compile...
00401014 |. C700 EFBEADDE MOV DWORD PTR DS:[EAX],DEADBEEF
Miracle :) Ca n'a pas rajouter de saloperie :)
En gros si j'ai bien compris je suis obliger de recup alloc.addrStart et de pointer dessus, apparement la syntaxe pour faire ca d'un coup ne passe vraiment pas.
[^] # Re: .
Posté par David Decotigny (site web personnel) . Évalué à 3.
[^] # Re: .
Posté par nats . Évalué à 1.
*ptr = 0xdeadbeef;
* (DWORD*)(alloc.addrStart) = 0xdeadbeef;
Nickel :) c'etait ce genre de trucs que je cherchais :)
Merci
[^] # Re: .
Posté par alf . Évalué à 2.
[^] # Re: .
Posté par alf . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.