Merci pour ta réponse.
Donc c'est bien comme ça que je pensais faire.
A savoir créer plusieurs pointeurs vers des chaines précises.
Puis créer un tableau qui contient ces pointeurs.
Le soucis c'est que je ne sais pas comment allouer de la mémoire en asm à partir d'un pointeur. Et je ne sais pas non plus comment créer un tableau.
Par contre avec l'exemple que j'ai mis dans mon premier message, on peut créer directement une chaine de caractère (donc je suppose que la memoire est allouée à la volée pour cette chaine, et que l'adresse de la chaine est transmise au nom de la chaine).
A priori, je doit utiliser des chaines se terminant par '\0' comme en c.
J'utilise nasm sous Linux, en fait je t'explique plus en détail:
Je fais un appel système vers le kernel (int 80h). Et précisément un appel qui produit l'equivalent de exerve() en c.
http://www.lxhp.in-berlin.de/lhpsysc1.html#execve
Par exemple j'essaie de lancer le lecteur mplayer:
segment .data
commande db "/usr/local/bin/mplayer",0
segment .text
global _start
_start:
mov ebx, dword commande ; ebx pointe vers commande
mov eax, 11 ; execve()
mov ecx, 0 ; Pointeur vers les arguments (ne pointe sur rien)
mov edx, 0 ; Ne sais pas quoi mettre...
int 80h ; appel du kernel
mov eax,1 ; exit()
mov ebx,0 ; exit(0)
int 80h ; appel du kernel
Et j'ai aucun soucis, mplayer se lance.
Le soucis c'est de lui passer un argument.
Dans le registre ecx, je dois passer un pointeur vers une liste de pointeurs se référant aux arguments du programme. Et c'est donc là que ça coince. Apparement, le pointeur doit faire référence à un tableau de pointeurs (si j'ai bien compris, le dernier pointeur de la liste doit être 0), et ces chaines de caractères doivent être formattées comme en c (terminés par '\0').