2017-07-30 2 views
1

Ich versuche, ein Childs-stdio/stderr nach Forking (Linux) zu erfassen. Ich habe mit sys_pipe und sys_dup2 ohne Glück herum gespielt. Die meisten Referenzen, die ich bezogen habe, beziehen sich auf die Arbeit des Kindes, aber da ich keine Kontrolle über das Kind habe, bin ich nicht sicher, was ich tun muss.capture childs stdio/stderr

Von dem, was ich bisher verstehe, muss ich ein Rohr öffnen und den Griff vor dem Gabeln duplizieren. Die Mutter dann versucht, das Rohr zu lesen, aber es ist nichts Rückkehr ... Der Code als solche ist ..

mov rax,22      ; open a pipe 
    mov rdi,h_Pipe 
    syscall 

    mov rax,33 
    mov rdi,1      ; duplicate stdout to pipe write 
    mov esi,dword[h_Pipe+4] 
    syscall 

    mov rax,33      ; duplicate stderr to pipe write 
    mov rdi,2 
    mov esi,dword[h_Pipe+4] 
    syscall 

........ Gabel ... ...... .. warten, bis das Kind fertig ist

mov rax,0      ; Read the pipe 
    mov edi,dword[h_Pipe] 
    mov rsi,w_Buffer 
    mov rdx,256 
    syscall 

Kann mir jemand helfen ??

Um calify .....

 mov rax,57     ; fork            
     syscall   
     mov [CHILD_PID],rax 

.child: cmp qword[CHILD_PID],0     
     je _CHILD 

    mov rax,3      ; Close 
    mov edi,dword[pipe_write] 
    syscall 

    mov r15d,dword[pipe_read] 
    jmp _RUN_EXIT 

_CHILD: mov rax, 3; Schließen mov edi, dword [pipe_read] syscall

mov rax,33 
    mov rdi,1      ; duplicate stdout to pipe write 
    mov esi,dword[pipe_write] 
    syscall 

    mov rax,33      ; duplicate stderr to pipe write 
    mov rdi,2 
    mov esi,dword[pipe_write] 
    syscall 

    sys_execve 

nachfolgende liest auf dem pipe_read Dateideskriptors gibt nichts zurück.

+0

Sie haben die Kontrolle über das Kind, bis Sie 'exec *()' aufrufen. –

Antwort

1

Es scheint, ich hatte RSI und RDI in der SYS_DUP2 Aufruf verwechselt. Alles scheint jetzt gut zu funktionieren. Cheers