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 : Access violation et ecriture de variable [ Archives / Newbii ] (anthraxx)

dimanche 17 août 2003 à 14:00:12 | Access violation et ecriture de variable

anthraxx

J'ai une question qui me traKsse avec MASM:
quand je declare un tampon comme cela:

buffer db 100 dup(0)

et dans le code, j'essaye d'ecrire dedans, avec une fonction comme strcpy ou instruction du type

mov byte ptr [buffer],ah

ou bien n'importe quelle fonction ou instruction qui ecrit dans une variable, eh bien j'obtiens un sympatique message de Windows 2000 me disant que "Access violation".
Es-ce normal? Seul windows2000 (et eventuellement NT) est-il sujet a cette limitation?
Ou bien tout simplement C moi ki sait pas faire?

Voila si quelqu'un peut m'aider j'en serais heureux

dimanche 17 août 2003 à 15:41:26 | Re : Access violation et ecriture de variable

Chrishka

Je ne vois pas d'erreur dans ton code, en fait, je pense que tu as déclaré ton buffer dans le segment de code. Sous windows tu n'as pas le droit d'écrire dans un segment de code. Déclare plutôt ton buffer dans un autre segment, genre .data
Si c'est pas ça je vois pas de raisons pour qu'il y ait une violation d'acces

dimanche 17 août 2003 à 15:52:58 | Re : Access violation et ecriture de variable

anthraxx

Bien sur!
Oui c'est bien dans mon genre de chercher des raisons compliquées alors que la solution est juste devant moi, tellement simple que je n'y ai meme pas fait attention!

Merci beaucoup, en effet, en declarant le truc dans .data ça marche bcp mieux!

Mais a propos, il n'y a AUCUN moyen sous Windows donc, de faire un programme qui ecrit dans son propre code? C'est nul, ça! J'avais deja pensé a faire un programme genre IA qui se change tout seul, mais sa va etre + compliqué que prévu apparemment...

dimanche 17 août 2003 à 16:57:34 | Re : Access violation et ecriture de variable

Chrishka

Je t'en prie content de t'avoir aidé.

Effectivement c'est pas évident de faire du self-modifying code sous windows. C'est pas impossible, tu peux changer les permissions d'acces d'une zone mémoire avec la fonction VirtualProtect, mais personnellement j'ai jamais essayé.

dimanche 17 août 2003 à 18:21:03 | Re : Access violation et ecriture de variable

BruNews

Administrateur CodeS-SourceS
Aucun probleme pour ecrire sur ton code comme sur celui d'un autre processus.
Va voir dans MDN:
OpenProcess(...), WriteProcessMemory(...).
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Bien sur!
> Oui c'est bien dans mon genre de chercher des raisons compliquées alors que la solution est juste devant moi, tellement simple que je n'y ai meme pas fait attention!
>
> Merci beaucoup, en effet, en declarant le truc dans .data ça marche bcp mieux!
>
> Mais a propos, il n'y a AUCUN moyen sous Windows donc, de faire un programme qui ecrit dans son propre code? C'est nul, ça! J'avais deja pensé a faire un programme genre IA qui se change tout seul, mais sa va etre + compliqué que prévu apparemment...

dimanche 17 août 2003 à 20:47:19 | Re : Access violation et ecriture de variable

anthraxx

OK merci tt le monde

Mais ya un truc d'ordre general que je voudrais savoir:
quand je place une variable apres .data, et que j'utilise un debugger et que je regarde à l'adresse de cette variable, je me trouve face à un bloc de 4096 octets initialisés à 0, ou je peux librement ecrire;

Cette memoire est-elle la celebre memoire du "data segment"? (non, j'ai pas fait assez de theorie)
et si oui, c'est bizarre, on m'avait dit que dans le "flat memory mode", les donnees et le code etaient dans le meme segment. Or je ne peux pas ecrire sur mon code directement.

Et enfin, es-ce qu'on peut (facilement) augmenter cet espace?

Voili voilou, renseignez-moi merci!

mardi 19 août 2003 à 01:55:21 | Re : Access violation et ecriture de variable

PierreF

La raison de pourquoi tu a un bloque de 4096 octet initialiser a zero, c'est parsque la mémoire et couper en bloque de 4 Ko
. La raison de c'est bloque c'est pour la pagination (c'est ce qui permet a un programme d'avoir un morceau de donner au millieu de la mémoire et la suite à la fin de la mémoire (par exemples), il que le programme voit les donnée comme si elle était continue)

"flat memory mode" tu a un segment qui donner le code et un qui donnée les donnée, mais tout deux peuvent pointer la même zone de mémoire. Tu a un segment dans CS et un dans DS. Ils peuvent être identique (sauf que celui de CS est un segment de code et celui de DS un segment de donnée, car en mode protégée ils sont distinc).

Pour augmenter l'espace des donnée tu fait un
buffer db 4097

au plus proprement
buffer db <La taille dont tu a besoin>

A+ (j'espére avoit été assez clair)



Cette discussion est classé dans : buffer, access, variable, ecriture, violation


Répondre à ce message

Sujets en rapport avec ce message

masm32 buf variable [ par skotmarud ] bonsoir,j'ai un probleme pour créer un buffer à taille variable pourtant je suis tombé sur ce post : http://www.asmfr.com/infomsg_MASM32-COMENT-DECLAR Probleme de linkage sur tlink32 [ par Sn00bino_roi_du_petrol ] Je fais un programme qui examine le header des EXE windows, le resultat est inscrit sur un fichier txt. Les APIS utilisés sont déclaré ainsi :extrn Ex ajout d'une variable dans un exe [ par tezca_system ] Sans avoir lu encore toutes mes docs (vos bouts de codes et les liens de vos sites), je me pose une question. Est il possible d'integerer une variable [NASM-Linux] Problème de buffer [ par yann2192 ] Bonjour à tous, je me suis lancé dans l'assembleur 32bits avec les appels linux et j'ai un problème.Je récupére le chemin d'un fichier entrer par l'us débutant qui a un prob avec l'int21h [ par sibi12 ] salut voivi mon code : mov ah, 09h mov dx, offset buffer int 21hbuffer a été déclaré comme ca: buffer db 50 dup(0)le compilateur me met prob mode protégé pour graphisme [ par prunkdump ] Bonjours afin de testé un de mes programmes qui passe en mode protégé j'ai éssayé de renplir en 32bits le buffer d'écran en mode graphique 13h. Au déb Affichage caractere par caractere d'une variable DT [ par Eclipz ] BonjourVoila, un souci en MASM, j'ai une variable nommée Resultat de type DT et je voudrais afficher, caractere par caractere, son résultat... le prob Table de MS Access [ par demidali ] Bonjour !Simple question à savoir comment faire pour réinitialiser une clé auto à 1 après avoir fait des tests dans une table Access.Merci !demidali Lecture/ecriture sur disquette [ par Stormy ] Voici ma question (TangyX, tu es exempté de réponse). Une disquette est composée de 2 faces (jusque là c 'est bon) chacune composée de 80 pistes de 18 declaration [ par noel70 ] Bonjour a tous.Voila, lorsqu'on veut déclarer une variable de type réelle, on utilise cette syntaxe..dataNom_de_la_varaible dq 0.0J'aimerais sav


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

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,203 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é.