GNU Assembleur et manipulation de structure.

cs_000000 Messages postés 3 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 4 juillet 2010 - 26 juin 2010 à 17:19
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 5 juil. 2010 à 02:51
Bonjour,

J'ai un petit soucis en ce qui concerne la manipulation de structure. Je possède un pointeur vers une structure x dont je souhaite recupurer une variable. J'ai donc essayé de recuperer la valeur pointé par le pointeur dans lequel j'ajoute la taille en byte séparant le debut de la structure jusqu'a la variable voulue. Mais, sans résultat. J'ai un bout de code similaire:

mov eax,ptr
mov ebx,dword ptr[eax+size]


Si quelqu'un a une idée?

8 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
26 juin 2010 à 17:42
salut,


je vais supposer que ton assembleur est nasm.

struct X
.x1 resd 1
.x2 resd 1
.x3 resb 1
.x4 resb 1
.x5 resw 1
endstruc

mov esi,monX
mov eax,[esi+X.x2]
mov dl,[esi+X.x4]
mov cx,[esi+X.x5]

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
26 juin 2010 à 17:44
re,

ce n'est pas struct mais struc.

@++
0
cs_000000 Messages postés 3 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 4 juillet 2010
26 juin 2010 à 18:05
J'utilise GNU Assembler et non Nasm, la différence est qu'aucune directive n'est disponible pour developper une structure.
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
26 juin 2010 à 22:14
re,


le GNU Assembler n'est pas en AT&T ?


@++
0

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

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
27 juin 2010 à 02:59
tu as un how-to assembly avec le source Linux.
0
Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 1
28 juin 2010 à 19:17
Salut.
Je crois me souvenir que le gnu-assembler ne connait pas le prefix ptr et que le type de reference est signalé en ajoutant la lettre b,w,l ou q à l'instruction.
Il faut donc ici :
movw ebx,[eax+size]
Je crois aussi que tout symbole qu'il ne connait pas est déclaré comme externe de telle sorte que l'erreur n'est signalée qu'au moment du "link".
amicalement
0
cs_000000 Messages postés 3 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 4 juillet 2010
4 juil. 2010 à 16:51
La syntaxe intel est totalement implémenté depuis la version 2.10 de GAS. Finalement, j'ai réussi, je m'étais juste trompé dans la taille :x
Dites, par la même occasion, comment puis-je déclarer une sutructure ? en definissant un symbole? Le problème c'est que j'ai une fonction qui necessite un pointeur vers une structure, j'ai essayé tout betement de declarer tout les élements (dans l'ordre) de la strcuture dans la section data pis de mettre dans la stack l'adresse du premier élement. Mais encore une fois, le resultat n'est pas là :/

J'ai un code similaire:
[...]
.data
var1: .long 0
var2: .long 0
struct_elem1: .long 0 # Début de la declaration de la structure
struct_elem2: .long 0
[...]
push dword ptr [structu_elem1]
call ma_fonction
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
5 juil. 2010 à 02:51
salut,

dans ton exemple, tu push la valeur contenue dans l'adresse et non l'adresse elle-même.

@++
0
Rejoignez-nous