[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 Programmszeronull@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.