Salut,
J'aurais besoin d'aide pour la réécriture de structure C en asm.
Pour les structures standard, pas de problème, mais voici un exemple où je bloque:
J'ai essayé de l'écrire des tas de façon différentes, mais les valeurs ne tombent jamais où elles devraient.. Donc j'aurais quelques questions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 struct ifreq { #define IFHWADDRLEN 6 union { char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short ifru_flags; int ifru_ivalue; int ifru_mtu; struct ifmap ifru_map; char ifru_slave[IFNAMSIZ]; /* Just fits the size */ char ifru_newname[IFNAMSIZ]; void * ifru_data; struct if_settings ifru_settings; } ifr_ifru; };
Ligne 6:
Faut-il réserver les 16 bytes de la longueur IFNAMSIZ, ou bien décompter la longueur du nom de ces 16 bytes ?
Exemple pour le nom "lo", ça ferait 14 bytes à réserver..
Ligne 10 à 14:
Est-ce que toutes ces lignes comptent pour le même espace mémoire ?
Ce qui donnerait donc en pseudo code:
Concernant les unions, ils sont sensé être sur le même espace, mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 union { dd sockaddr short ifru_flags; int ifru_ivalue; ...etc...
Voici comment j'imaginais l'entrée de la structure ifreq:
Donc deux pointeurs qui pointent vers des adresses mémoires contenant les unions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ifreq: dd ifr_ifrn dd ifr_ifru
Mais ça ne fonctionne pas.
En faite, pour que les résultats tombent pile au bon endroit, j'ai l'impression qu'il faudrait une entrée sans pointeurs..
Exemple:
Vous me confirmez que c'est bien cette dernière solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ifreq: rb 16 ;(pour ifr_ifrn) rb nbr ;(pour ifr_ifru)
C'est également ce qui fait que j'esquive le kernel mode autant que possible, que ce soit sous Linux ou Windows, vu qu'à ce niveau les structures deviennent longue comme le bras, même pour celles qui sont standard, avec de multiple pointage vers d'autres structures, c'est vite fatiguant à écrire, surtout pour au final me rendre compte que l'api ne fait pas ce que je souhaite faire.
Partager