首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获儿童stdio/stderr

捕获儿童stdio/stderr
EN

Stack Overflow用户
提问于 2017-07-30 14:27:08
回答 1查看 27关注 0票数 1

我正在尝试在forking (Linux)之后捕获一个childs stdio/stderr。我曾经尝试过sys_pipe和sys_dup2,但没有运气。我获得的大多数参考资料都提到了孩子要做的工作,但由于我无法控制孩子,我不确定我必须做什么。

据我所知,在派生之前,我需要打开一个管道并复制句柄。然后,父级尝试读取管道,但不返回anything...The代码。

代码语言:javascript
复制
    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

代码语言:javascript
复制
    mov rax,0                       ; Read the pipe
    mov edi,dword[h_Pipe]
    mov rsi,w_Buffer 
    mov rdx,256
    syscall

有人能帮忙吗??

使……变得简单……

代码语言:javascript
复制
        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系统调用

代码语言:javascript
复制
    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文件描述符的后续读取不会返回任何内容。

EN

回答 1

Stack Overflow用户

发布于 2017-07-31 12:10:45

似乎我在SYS_DUP2调用中把RSI和RDI搞混了。现在一切似乎都运行得很好。干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45397019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档