[Linux - nasm] sys_fork/sys_execve



  • Hi,
    ich versuch mich gerade an einem Testprogramm, dass nach einem
    erfolgreichen fork() ein neues Terminal aus dem child-Prozess aus aufrufen soll.
    Wie nicht anders zu erwarten war funktioniert es nicht so wie ich mir das gedacht hab ..

    %define sys_exit 	1
    %define sys_fork 	2
    %define sys_waitpid	7
    %define sys_execve	11
    %define sys_write	4
    %define stdout		0
    
    section .text
    	global _start
    
    section .data
    	program		db	"aterm", 0
    	argv		dd	0
    	status_addr	dd	0
    	env		dd	0
    	msg_parent	db	"parent-process ..", 0ah
    	mp_size		equ	$ - msg_parent
    	msg_child	db	"child-process ..", 0ah
    	mc_size		equ	$ - msg_child
    	msg_exit	db	"exiting ..", 0ah
    	me_size		equ	$ - msg_exit
    
    section.text
    _start:
    	mov	eax, sys_fork	; fork it
    	int	80h
    	push	ebx
    	cmp	ebx, 0
    	jz	child
    
    parent:
    	mov	eax, sys_write	; write some debug msg
    	mov	ebx, stdout
    	mov	ecx, msg_parent
    	mov	edx, mp_size
    	int	80h
    
    	mov	eax, sys_waitpid
    	pop	ecx
    	mov	ebx, ecx	; pid
    	mov	ecx, status_addr
    	mov	edx, 0		; ??
    
    	int	80h
    	jmp	exit
    
    child:
    	mov	eax, sys_write	; debug msg again
    	mov	ebx, stdout
    	mov	ecx, msg_child
    	mov	edx, mc_size
    	int	80h
    
    	mov	eax, sys_execve
    	mov	ebx, program
    	mov	ecx, argv
    	mov	edx, env
    	int	80h
    
    exit:
    	mov	eax, sys_write	; .. and again
    	mov	ebx, stdout
    	mov	ecx, msg_exit
    	mov	edx, me_size
    	int	80h
    
    	mov	eax, sys_exit	; exit prog
    	mov	ebx, 0
    	int	80h
    

    Der child-Prozess wird ausgeführt(sogar 2mal [?]), allerdings bekomm ich kein aterm Fenster zu Gesicht.
    Hier noch die Ausgabe nach mehrmaligem Aufruf des Programms

    zeronull@codingbox:~/src/asm/mysrc$ ./execve 
    child-process ..
    exiting ..
    zeronull@codingbox:~/src/asm/mysrc$ child-process ..
    exiting ..
    
    zeronull@codingbox:~/src/asm/mysrc$ ./execve 
    child-process ..
    child-process ..
    exiting ..
    exiting ..
    zeronull@codingbox:~/src/asm/mysrc$ ./execve 
    child-process ..
    exiting ..
    zeronull@codingbox:~/src/asm/mysrc$ child-process ..
    exiting ..
    
    zeronull@codingbox:~/src/asm/mysrc$ ./execve 
    child-process ..
    exiting ..
    child-process ..
    exiting ..
    

    Bin für Tipps dankbar!

    lg zeronull



  • Ich bin mir inzwischen sicher, dass das Problem die Funktionsweise von execve ansich ist. Könnte vielleicht einer der Mods den Beitrag nach Linux schieben?
    Alles was ich brauche ist ein system-call mit dem ich executables, skripte, etc. ausführen kann. execve tut (warum auch immer) nicht das was ich mir gedacht hab.



  • Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum Assembler in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ich denke mal, dass du als argv bzw. envp keine NULL Pointer übergeben darfst!



  • Bin inzwischen drauf gekommen, danke.


Anmelden zum Antworten