le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009
-
6 janv. 2007 à 11:48
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
7 janv. 2007 à 19:24
Bonjour à tous,
je cherche un moyen pour connaitre la taille d'une structure,mais je sais pas qu'elle commande faut utiliser, sizeof ou lengthof ? ..(dans les 2 cas,j'obtiens pas le bon résultat lol :)
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 6 janv. 2007 à 15:03
Salut,
Il y a effectivement l'erreur du au mauvais paramètre.
Sizeof renvoie la taille en bytes (modifier de l'alignement s'il existe).
lengthof renvoie le nombre de variables (de taille n bytes) constituant la chaîne.
ToutEnMasm
le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009 6 janv. 2007 à 16:47
si je comprends bien,j'ai juste à mettre la somme dans l'adresse d'une chaine
d'habitude, j'utilise cette variable
.data?
BufferTxt dd 128 dup (?)
....
je remplis mes structures suivant les valeurs des texbox et à la fin,je fais la somme
xor ax,ax
add ax,sizeof e_IP
add ax,sizeof e_UDP
add ax,sizeof eData
mov e_IP.TotalLen,ax
add eax,0FFFFh
mov BufferTxt,eax
invoke SetDlgItemText,hWin,IDC_EDT4,offset BufferTxt
et comme résultat j'obtiens 1B;8;1; dans ma textbox
et même si sur mon interface, je change les valeurs de ma structure le résultat ne change pas..depuis 1h30 je m'arrache les cheveux : ) mais je ne trouve pas
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 janv. 2007 à 17:52
eax contient une valeur en binaire, il y a toute chance qu'il y ait des octets 0 dedans et c'est le terminateur d'une chaine.
Il faut transformer le binaire de base 2 vers base 10.
ciao...
BruNews, MVP VC++
Vous n’avez pas trouvé la réponse que vous recherchez ?
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 6 janv. 2007 à 19:47
Salut,
Il faut transformer le nombre en caractères ascii visualisables avec une fonction du genre atodw(masm).
.data
texte db 30 dup ()
.code
invoke atodw,BufferTxt,addr texte
invoke SetDlgItemText,hWin,IDC_EDT4,addr texte
Le dw 1444h deviendra db 31h,34h,34h,34h,0.
et s'affichera 1444
ToutEnMasm
le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009 7 janv. 2007 à 17:11
Bonjour à vous 2 et merci pour votre aide c'est sympa
ToutEnMasm,j'ai eu des erreurs avec ton code
.data
texte db 30 dup () <- erreur = invalid data initializer
.code
invoke atodw,BufferTxt,addr texte<- erreur = error A2136: too many arguments to INVOKE
invoke SetDlgItemText,hWin,IDC_EDT4,addr texte
voici mon nouveau code en m'aidant de vos réponses
.data?
BufferTxt dd 30 dup (?)
comme résultat, j'ai bien des chiffres et plus de petit carré...ouf!..enfin : )
mais le résultat est pas bon
pour bien comprendre mes erreurs et me faire une idée sur la chose, est-ce qu'on peut me faire une petite démo avec une structure qui contient 2 à 3 variables(texte,et chiffre) et le passage du code qui permet d'obtenir la taille correct de cette structure
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 7 janv. 2007 à 17:51
A quoi rime tout cela en ASM ???
La taille d'une struct doit etre connue à l'assemblage alors te suffit de jeter un oeil sur la struct, la somme des tailles de ses membres est la taille totale et basta. En ASM pas de compilo pour aligner les données correctement à ta place, responsabilité du programmeur est pleine et entière/
Exemple qui montre ce que ferait mauvais programmeur alors qu'il faudrait ajouter un membre WORD pour avoir un align correct de 4. Ici le prog affichera bien 6, ce qui est assurément mauvais je le répète.
le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009 7 janv. 2007 à 18:28
A quoi rime tout cela en ASM ???
je tente de faire un générateur de trame udp,j'ai des textbox sur mon interface pour remplir ma structure,c'est pour cela que je ne connais pas la taille de cette structure à l'avance car elle est vide au départ, enfin bon...merci pour l'exemple du mauvais programmeur
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 7 janv. 2007 à 19:24
On connait par force la taille d'une structure puisque c'est justement fait pour cela, réserver de la place pour un nombre d'octets sinon ce n'est pas une structure mais une alloc dynamique de mémoire (voir VirtualAlloc).