[MASM32] Génération dynamique de nom de variable avec '@'

Tout sur les langages de programmation.

[MASM32] Génération dynamique de nom de variable avec '@'

Messagepar Crisanar » 29 Juillet 2005, 20:51

Salut à tous,
Il me semble qu'il soit possible d'utiliser le symbole '@' pour des labels pour que son nom(ou une partie) soit généré automatiquement afin de pouvoir utiliser le même nom de label dans différentes procédures.
Mais qu'en est-il des variables? Je sais qu'elles ont une portée mais imaginons que je crée une variable globale dans un 'module' (un fichier .asm a part) et que je veux que cette variable soit accessible seulement aux fonctions de ce 'module'( très légèrement dans l'optique d'un objet en C++ par exemple) comment faire?
Ex :
Code: Tout sélectionner
; module.asm


. data
variable_globale DWORD 0


.code
fonction1 proc
...
ret
fonction1 endp


fonction2 proc
...
ret
fonction2 endp

(Je veux donc que ma variable 'variable_globale' ne soit visible que par fonction1 et fonction2, et dans aucun autre fichier de mon projet, est-ce possible?)

Merci d'avance,
Crisanar
Image
Avatar de l’utilisateur
Crisanar
Semi-Dieu du cracking
Semi-Dieu du cracking
 
Messages: 1821
Inscription: 23 Mai 2004, 16:52
Localisation: Belgique

Messagepar Neitsa » 29 Juillet 2005, 21:59

Hello Crisanar,

je viens de regarder la doc de Masm et je n'ai rien trouvé qui puisse répondre à ta question à part SCOPED et NONSCOPED mas c'est uniquement pour la label...).

Je crois que ce mécanisme n'existe que pour les langages HLL (type static en C / C++).
Neitsa
 

Messagepar Crisanar » 30 Juillet 2005, 09:04

J'en ai bien peur :(
J'ai entendu parler de quelque chose sur le forum de WinASM studio, mais je n'ai aucune idée si c'est propre à winASM ou si c'est une particularité de MASM peu exploitée : les modules. Mais apparament pas des fichiers qui sont liés avec un include mais plutot à l'instar des fichiers .o et d'un makefile en C sous unix (linux aussi je suppose), c'est à dire des fichiers inclus lors de la compilation. Peut-être y-a-t-il moyen de définir des variables propres aux modules.
Je me renseigne et je vous tiens au courrant.
Image
Avatar de l’utilisateur
Crisanar
Semi-Dieu du cracking
Semi-Dieu du cracking
 
Messages: 1821
Inscription: 23 Mai 2004, 16:52
Localisation: Belgique

Messagepar phab » 30 Juillet 2005, 10:20

Si tu fais des modules (des fichiers objet, du binaire quoi) et que tu ne déclares pas les variables des autres modules par le couple extern/public, le linker ne saura jamais que cette variable existe dans dans ce module puisque il n'y aucune déclaration pour celle-ci. C'est la même chose pour les lib windows, elles ont des variables et des fonctions publiques que l'on doit importer

Ce cloisonnement n'est que théorique car il n'y aucune protection : les variables ne sont pas connues mais restent accessibles à l'exécution.

Lis la doc MASM pour ça, je ne l'utilise pas car c'est top dur. Hein TTO ! ;)
phab
Visiteur
Visiteur
 
Messages: 17
Inscription: 29 Juillet 2005, 20:44

Messagepar Crisanar » 30 Juillet 2005, 10:31

J'ai rien compris :D Mais je ne suis pas sûr que l'on parle de la même chose.
Mon but n'étant pas que mes variables soient accèssibles par d'autres modules puisque je voudrais les rendre 'privées'.
Image
Avatar de l’utilisateur
Crisanar
Semi-Dieu du cracking
Semi-Dieu du cracking
 
Messages: 1821
Inscription: 23 Mai 2004, 16:52
Localisation: Belgique

Messagepar phab » 30 Juillet 2005, 10:59

Si tu sépares ton code en différents modules, les variables qui s'y trouve resteront dans ce modules (un .obj avec masm). Il faut les exporter et les importer pour qu'elles soient accessibles ailleurs (le linker ne connait pas leur existence sinon). Elles sont donc par défaut private.

Si masm ne fonctionne pas comme ça, c'est bien le seul programme avec linker que je connaisse qui résout tout les liens, même ceux qu'il n'a pas à résoudre.

Ah oui. Un module n'est pas une séparation du source que l'on appelle avec un include : il s'agit bien d'un fichier qui sera assemblé puis lié aux autres.
phab
Visiteur
Visiteur
 
Messages: 17
Inscription: 29 Juillet 2005, 20:44

Messagepar Crisanar » 30 Juillet 2005, 11:23

Haa :)
Ok c'est bien ce que j'avais lu sur le forum de WinASM alors :)
Sais-tu comment créer un tel module et ce que je dois faire pour compiler ça avec MASM?
Image
Avatar de l’utilisateur
Crisanar
Semi-Dieu du cracking
Semi-Dieu du cracking
 
Messages: 1821
Inscription: 23 Mai 2004, 16:52
Localisation: Belgique


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité