Nasm - mémoire read-only [Résolu]

Signaler
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Bonjour,
je suis en train d'écrire des tutoriaux pour le site Coder-Studio (http://www.coder-studio.com/?page=tutoriaux) mais pour la création du tutorial 3 je me heurte à un problème.

Quand je compile, j'utilise une mini-librairie d'I/O que j'ai programmée en C et ASM. Je compile comme ça (ld est le linker de MinGW (Dev-C++), et gcc est le compilateur du même nom) :

gcc -c StdLib.c
nasm -fwin32 mon_prog.asm -o mon_prog.o
ld StdLib.o mon_prog.o libkernel32.a -o mon_prog.exe -nostdlib --entry=__start

Ce qui me permet d'utiliser ma lib (j'utilise un script, assemble_io.bat, vous pouvez récupérer le tout à http://www.coder-studio.com/tutoriaux/asm/asm_1.zip).

Bon, le problème maintenant :

Le code suivant ne plante à l'exécution :

section data use32 class=data
choix dd 5

section code use32 class=code
global __start

__start:
mov [choix], eax
ret

Si en revanche, je fais un mov eax, [choix], ça marche.

Si je compile le même code au format obj, ça fonctionne (mais je ne sais pas utiliser ce format avec ma lib :( ).

Je suppose donc que [choix] est en mémoire read-only :(

Donc, ma question : comment est-ce que je peux faire pour pouvoir écrire sur cette **** de variable globale [choix] ???

J'espère ne pas avoir été trop long, merci d'avances pr vos réponses.

Patience et longueur de temps font plus que force ni que rage....

9 réponses

Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Oups, ben ne vous dérangez pas, j'ai réussi à résoudre mon problème, en remplaçant les directives section par des section .text et section .data
Merci qd même ^^

Patience et longueur de temps font plus que force ni que rage....
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Je vais ptet dire une betise, mais sait on jamais !
Si tu enlevais les crochets : mov choix, eax !?
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ah alors tu pourrais m'expliker pkoi il fallait les crochets ?
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
AlexMAN >> "choix" est un label, NASM le remplace donc à l'exécution par un nombre constant. Ce nobrem indique l'adresse où se trouve ma donnée, et en faisant [choix] je désigne donc la donnée elle-même.
Enfin, je ne suis pas sûr qd même que "choix" soit un nombre constant; avec les instructions JMP les labels sont remplacés par des nombres qui correspondent à combien ajouter à EIP pour atteindre l'instruction souhaitée; je sais pas si c'est pareil avec les datas, il me semble que non, mais si qq1 a la réponse, tant qu'à faire... ^^

Patience et longueur de temps font plus que force ni que rage....
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
ok ben jte remercie Funto

++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
AlexMAN> fais pas ca avec MASM
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
ne pas faire mov [choix], eax ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
bah oui, enfin ce n'est pas la peine de mettre les crochets
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
j'ai tjrs fait sans les crochets.