Android, ADB, STDOUT을 소켓으로 리디렉션

NadavRub

환경

  • 기계적 인조 인간
  • C ++
  • ADB
  • GDB

사용 사례

  1. 스크린 샷 캡처
  2. 처리를 좀 해
  3. 장치에서 보냅니다.

구현 ( 이 링크에 따름 )

1. ADB 명령 줄 도구
구현 2.이 도구는 TCP 서버 구현 3.1.
새 연결시
3.1.1. 소켓 쌍 생성
3.1.2. fork, dup2를 사용하여 STDOUT을 socketpair로 리디렉션하는 동안 "screencap"을 실행
합니다. 3.1.3. 들어오는 데이터를 처리하고 연결된 피어로 다시 보냅니다.

문제 설명

분기 된 프로세스가 적절하게 인스턴스화되고 screencap이 성공적으로 생성되는 동안 (root로) 부모 프로세스 (shell로 실행)는 소켓 쌍에서 아무것도 수신하지 않고 무한히 차단합니다.

  • 파이프를 사용할 때도 마찬가지입니다 (pipe2와 함께)
  • "screencap"은 stdout에 필요한 것을 출력하기 위해 확인됩니다.
  • 내가 무엇을 잘못하고 있지?
    한 프로세스의 STDOUT을 부모 프로세스에 연결된 소켓으로 리디렉션하려면 어떻게해야합니까?

코드 스냅

int fd_screencap;
int w, h, f;
int fds[2];
pid_t pid;

if(SOCKET_ERROR == socketpair(PF_LOCAL, SOCK_STREAM, 0, fds))
    goto pipefail;
if ((pid = fork()) < 0)
    goto done;
if (pid == 0) {
    int newfd = dup2(fds[0], STDOUT_FILENO);
    assert(newfd == STDOUT_FILENO);
    close(fds[0]);
    close(fds[1]);
    const char* command = "screencap";
    const char *args[2] = { command, NULL };
    execvp(command, (char**)args);
    exit(1);
}

fd_screencap = fds[1];
if (recv(fd_screencap, &w, 4, MSG_WAITALL) <= 0) // <<== BLOCKS INFINITLY
    goto done;
if (recv(fd_screencap, &h, 4, MSG_WAITALL) <= 0)
    goto done;
if (recv(fd_screencap, &f, 4, MSG_WAITALL) <= 0)
    goto done;
NadavRub

PF_LOCAL을 PF_UNIX로 바꾸는 것이 트릭이었습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android, ADB, STDOUT을 소켓으로 리디렉션

분류에서Dev

파이썬. stdout을 소켓으로 리디렉션

분류에서Dev

stdin을 stdout으로 리디렉션

분류에서Dev

stdout을 tcsh의 stderr로 리디렉션

분류에서Dev

stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

분류에서Dev

stderr을 stdout으로 영구적으로 리디렉션

분류에서Dev

프로세스의 stdout을 자체 stdin으로 리디렉션

분류에서Dev

STDOUT 및 STDERR 리디렉션을 동적으로 변경

분류에서Dev

실행 중에 stderr을 stdout으로 리디렉션

분류에서Dev

JNA는 STDOUT을 JFrame으로 리디렉션

분류에서Dev

nohup : stderr을 우분투에서 stdout으로 리디렉션

분류에서Dev

stdout과 stderr을 함께 리디렉션 VS stdout을 리디렉션 한 다음 stderr을 stdout의 파일로 리디렉션

분류에서Dev

systemd : stdout을 로그 파일로 리디렉션하는 방법

분류에서Dev

stdout 및 / 또는 stderr을 변수의 경로로 리디렉션

분류에서Dev

stdout을 stderr로 리디렉션하는 방법

분류에서Dev

stdout / stderr을 bash 스크립트로 리디렉션

분류에서Dev

stdin 및 stdout을 포트로 리디렉션

분류에서Dev

여러 stdout 명령을 하나의 파일로 리디렉션

분류에서Dev

FILE * stdout을 C ++의 문자열로 리디렉션

분류에서Dev

Bash는 stdout을 함수로 리디렉션

분류에서Dev

stdout 및 stdin을 파일로 리디렉션

분류에서Dev

Bash : 명령 출력을 STDOUT 및 변수로 리디렉션

분류에서Dev

Laravel artisan queue : 작업이 stderr / stdout을 파일로 리디렉션

분류에서Dev

stdout / stderr을 null vs2017 C ++로 리디렉션

분류에서Dev

출력을 stdout으로 리디렉션하고 바이너리로 파이프

분류에서Dev

활동을 다른 활동으로 리디렉션하는 동적 방법-Android?

분류에서Dev

STDERR을 파일과 콘솔로 리디렉션하고 STDOUT을 파일로만 리디렉션하는 방법

분류에서Dev

nohup : 입력을 무시하고 stderr을 stdout으로 리디렉션

분류에서Dev

C 프로그램에서 STDOUT을 STDIN으로 리디렉션하는 방법

Related 관련 기사

  1. 1

    Android, ADB, STDOUT을 소켓으로 리디렉션

  2. 2

    파이썬. stdout을 소켓으로 리디렉션

  3. 3

    stdin을 stdout으로 리디렉션

  4. 4

    stdout을 tcsh의 stderr로 리디렉션

  5. 5

    stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

  6. 6

    stderr을 stdout으로 영구적으로 리디렉션

  7. 7

    프로세스의 stdout을 자체 stdin으로 리디렉션

  8. 8

    STDOUT 및 STDERR 리디렉션을 동적으로 변경

  9. 9

    실행 중에 stderr을 stdout으로 리디렉션

  10. 10

    JNA는 STDOUT을 JFrame으로 리디렉션

  11. 11

    nohup : stderr을 우분투에서 stdout으로 리디렉션

  12. 12

    stdout과 stderr을 함께 리디렉션 VS stdout을 리디렉션 한 다음 stderr을 stdout의 파일로 리디렉션

  13. 13

    systemd : stdout을 로그 파일로 리디렉션하는 방법

  14. 14

    stdout 및 / 또는 stderr을 변수의 경로로 리디렉션

  15. 15

    stdout을 stderr로 리디렉션하는 방법

  16. 16

    stdout / stderr을 bash 스크립트로 리디렉션

  17. 17

    stdin 및 stdout을 포트로 리디렉션

  18. 18

    여러 stdout 명령을 하나의 파일로 리디렉션

  19. 19

    FILE * stdout을 C ++의 문자열로 리디렉션

  20. 20

    Bash는 stdout을 함수로 리디렉션

  21. 21

    stdout 및 stdin을 파일로 리디렉션

  22. 22

    Bash : 명령 출력을 STDOUT 및 변수로 리디렉션

  23. 23

    Laravel artisan queue : 작업이 stderr / stdout을 파일로 리디렉션

  24. 24

    stdout / stderr을 null vs2017 C ++로 리디렉션

  25. 25

    출력을 stdout으로 리디렉션하고 바이너리로 파이프

  26. 26

    활동을 다른 활동으로 리디렉션하는 동적 방법-Android?

  27. 27

    STDERR을 파일과 콘솔로 리디렉션하고 STDOUT을 파일로만 리디렉션하는 방법

  28. 28

    nohup : 입력을 무시하고 stderr을 stdout으로 리디렉션

  29. 29

    C 프로그램에서 STDOUT을 STDIN으로 리디렉션하는 방법

뜨겁다태그

보관