(Debutant en ASM) (MASM) pointeur sur une structure

cs_Otaku
Messages postés
14
Date d'inscription
dimanche 19 janvier 2003
Statut
Membre
Dernière intervention
17 mai 2003
- 5 mai 2003 à 21:56
CoreBreaker
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
- 7 mai 2003 à 00:46
Salut,

voila mon pb, j'aimerai créer une fonction en asm qui reçoit un pointeur sur un élément de type structure, jusque-là pas de pb

mais comment modifier les éléments de la structure pointée ?

ex en C(++) on fait ça

typedef struct {
unsigned long membre1;
            unsigned short membre2;
} MyStruct; 
 
void MaFonction(MyStruct* pStruct)
{
   pStruct->membre1 = 0xFDE8;
   pStruct->membre2 = 0xFF;
}  


La question est simple (mais je n'ai pas encore trouvé la réponse) comment faire ça en ASM ?
Surtout le code pStruct->membre1 = 0xFDE8;

decrarer la structure ca je sait le faire
 
MYSTRUCT STRUCT
membre1	DWORD	?
membre2	WORD	?
MYSTRUCT ENDS


un pointeur (une adresse en memoire) c'est un entier codée sur 32bits donc je suppose que le parametre a passer a la fonction asm est un DWORD ?
 
MaFonction PROC pstruct:DWORD ;
; ??? 
 ret
MaFonction ENDP

mais pour le reste je sait pas :sad)
un petit exemple pour m'aider à assimiler la technique se serait sympa ;)

25 réponses

CoreBreaker
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
6 mai 2003 à 23:34
c'est étonnant puisque le champ est déclaré avec une valeur 16 bits. Essai:
mov word ptr es:[di].registry.immin,ax


Core Breaker :)
0
cs_Otaku
Messages postés
14
Date d'inscription
dimanche 19 janvier 2003
Statut
Membre
Dernière intervention
17 mai 2003

6 mai 2003 à 23:42
pour ne pas avoir ce message je dois charger le pointeur dans un registre 32 bits

optcodes_mov_nif PROC reg:DWORD ;MOV #imm,rn
les edi,reg
mov ax,665h
mov es:[edi].registry.immin,ax
ret
optcodes_mov_nif ENDP

mais ça provoque une autre erreur "instruction operands must be the same size" sur le code "les edi,reg" :/
0
CoreBreaker
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
6 mai 2003 à 23:52
C'est normal qu'il y ai ce message puisque puis reg est tu type DWORD, il doit être du type FWORD Mais puisque tu fais ton code C sous visual essaie:
optcodes_mov_nif PROC reg:DWORD ;MOV #imm,rn
mov edi,reg
mov ax,665h
mov [edi].registry.immin,ax
ret
optcodes_mov_nif ENDP
Core Breaker :)
0
cs_Otaku
Messages postés
14
Date d'inscription
dimanche 19 janvier 2003
Statut
Membre
Dernière intervention
17 mai 2003

7 mai 2003 à 00:29
Merci beaucoup, ça marche :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CoreBreaker
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
7 mai 2003 à 00:46
C'est rien c'est normal.
Ca été long mais ça a aboutit

Core Breaker :)
0