sys_execve système d'appel de l'Assemblée

asm_execve.s:

.de la section .données 
file_to_run: 
.ascii "/bin/sh" 

.de la section .texte 
.globl principal 

principales: 
pushl %ebp 
movl %esp, %ebp 
subl $0x8, %esp # tableau de deux pointeurs. tableau[0] = file_to_run tableau[1] = 0 

movl file_to_run, %edi 
movl %edi, -0x4(%ebp) 
movl $0, -0x8(%ebp) 

movl $à 11$, %eax # sys_execve 
movl file_to_run, %ebx # fichier pour l'exécuter 
leal -4(%ebp), %ecx # paramètres de ligne de commande 
movl $0, %edx # bloc d'environnement 
int $0x80 

laisser 
ret 

makefile:

NOM = asm_execve 
$(NOM) : $(NAME).s 
gcc-o $(NAME) $(NAME).s 

Programme est exécuté, mais sys_execve n'est pas appelé:

alex@alex32:~/projet$ make 
gcc-o asm_execve asm_execve.s 
alex@alex32:~/projet$ ./asm_execve 
alex@alex32:~/projet$ 

Sortie attendue est:

alex@alex32:~/projet$ ./asm_execve 
$ exit 
alex@alex32:~/projet$ 

Cette Assemblée programme est censé fonctionner comme suivants du code C:

char *data[2]; 
data[0] = "/bin/sh"; 
data[1] = NULL; 
execve(data[0], données, NULL); 

Quelque chose de mal dans le système les paramètres d'appel?

Utilisation strace -e execve de retracer l'appel execve votre programme en fait, rend.

OriginalL'auteur Alex F | 2012-02-18