我正在尝试在forking (Linux)之后捕获一个childs stdio/stderr。我曾经尝试过sys_pipe和sys_dup2,但没有运气。我获得的大多数参考资料都提到了孩子要做的工作,但由于我无法控制孩子,我不确定我必须做什么。
据我所知,在派生之前,我需要打开一个管道并复制句柄。然后,父级尝试读取管道,但不返回anything...The代码。
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........fork...子进程要完成的........wait
mov rax,0 ; Read the pipe
mov edi,dword[h_Pipe]
mov rsi,w_Buffer
mov rdx,256
syscall有人能帮忙吗??
使……变得简单……
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;关闭mov edi,dwordpipe_read系统调用
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对pipe_read文件描述符的后续读取不会返回任何内容。
发布于 2017-07-31 12:10:45
似乎我在SYS_DUP2调用中把RSI和RDI搞混了。现在一切似乎都运行得很好。干杯
https://stackoverflow.com/questions/45397019
复制相似问题