ptrace

백그라운드에서 GDB 실행
ptrace

백그라운드에서 GDB 실행

나는 2개의 ncurses 창이 있는 프로그램을 작업 중입니다. 하나는 fork+exec를 사용하여 구현된 사용자 정의 셸을 보여주고 다른 하나는 내 셸에서 실행되는 명령에 대한 일부 정보를 표시하고 싶습니다. 이를 위해 GDB를 사용해 보았습니다. 내 생각은 백그라운드에서 GDB를 실행하고 몇 가지 중단점을 설정하고 일부 정보를 내 ncurses 응용 프로그램이 읽고 형식화하고 표시하는 파일에 인쇄하는 것입니다. 문제는 입력이 터미널에서 나오지 않으면 자동으로 종료되기 때문에 프롬프트 없이 GDB를...

Admin

시스템 호출 accept4()가 잘못된 값을 반환합니다.
ptrace

시스템 호출 accept4()가 잘못된 값을 반환합니다.

나는 시스템 호출을 기록할 수 있는 "strace"와 유사한 프로그램을 만들었습니다. 또한 웹 서버를 설치하고 "strace"와 내 프로그램의 시스템 호출을 관찰하고 비교했습니다. 각 프로그램에 대해 웹 서버에 간단한 HTTP GET 요청을 보내 여러 시스템 호출을 생성합니다. 내 프로그램에서: 나는 특정 accept4() 실행에서 반환 값이 (-11)이라는 것을 알았습니다. 이는 (마이너스 11)을 의미합니다! 그러나 accept4()의 (-11) 반환 값은 절대 발생해서는 안 됩니다. ac...

Admin

실행 중인 프로세스의 PID에 GDB를 연결할 때 권한 오류
ptrace

실행 중인 프로세스의 PID에 GDB를 연결할 때 권한 오류

이런 장난감 C++ 프로그램이 있습니다 #include <iostream> int main() { int n{}; std::cin >> n; // waits for input std::cout << n << std::endl; } 주석이 달린 줄을 실행하는 동안 일시 중지되어 사용자 입력을 기다리고 디버거를 연결하는 데 필요한 모든 시간을 제공합니다. 한 터미널에서 이 프로그램을 실행한 다음 다른 터미널에 입력합니다. gdb -p $(...

Admin

ptrace PTRACE_PEEKTEXT 오류
ptrace

ptrace PTRACE_PEEKTEXT 오류

C 프로그램에서 ptrace PTRACE_PEEKTEXT를 사용할 때 이 오류가 발생하는 이유는 무엇입니까? PTRACE_PEEKTEXT를 사용하는 프로그램 부분은 다음과 같습니다. static void read_file(pid_t child, char *file) { char *child_addr; int i; child_addr = (char *) ptrace(PTRACE_PEEKUSER, child, sizeof(long)*RDI, 0); do { ...

Admin

분기된 프로세스에서 Linux 시스템 호출을 가로채는("캡처") ptrace보다 더 좋은 방법이 있습니까?
ptrace

분기된 프로세스에서 Linux 시스템 호출을 가로채는("캡처") ptrace보다 더 좋은 방법이 있습니까?

포크된 프로세스에서 나오는 모든 시스템 호출을 캡처하여 수정하고 커널로 보낸 다음 포크된 프로세스로 다시 전달하고 싶습니다. 가능합니까? 그렇다면 어떻게 해야 합니까? 나는 약간의 조사를 하여 ptrace를 찾았지만 많은 작업(레지스터 수정 등...)을 수행하기 때문에 약간 무거운 작업인 것 같습니다. 그러나 제가 틀렸다면 정정해 주십시오. ...

Admin

Ptrace: Multiarch/Qemu-User-Static Arm64v8/Alpine Docker 컨테이너에 설치된 GDB에서 기능이 구현되지 않았습니다.
ptrace

Ptrace: Multiarch/Qemu-User-Static Arm64v8/Alpine Docker 컨테이너에 설치된 GDB에서 기능이 구현되지 않았습니다.

내 Mac에 자체적으로 설치된 x86_64 16.04 Ubuntu VirtualBox에 설치된 arm64v8/alpine docker에서 GDB를 사용하여 aarch64 ELF를 디버깅하고 싶습니다. 특히 도커를 설정하려면 다음 지침을 사용했습니다.여기. 그건: sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes sudo docker run --rm -it -v /directory_on_ubuntu:/directory...

Admin

ptrace가 할 수 없는 /proc로 디버거는 무엇을 할 수 있나요?
ptrace

ptrace가 할 수 없는 /proc로 디버거는 무엇을 할 수 있나요?

이것ptrace에 관한 Wikipedia 기사설명하다: 컨트롤러와 대상 간의 통신은 ptrace에 대한 반복 호출을 통해 발생하며 둘 사이에 작은 고정 크기 메모리 블록을 전달합니다(호출당 두 개의 컨텍스트 스위치가 필요함). 이는 대량의 대상 메모리에 액세스할 때 매우 비효율적입니다. 단어 크기의 청크(단어당 하나의 ptrace 호출)로만 수행될 수 있습니다. [7] 따라서 Unix 버전 8에서는 프로세스가 다른 프로세스의 메모리에 직접 액세스할 수 있도록 허용하는 procfs를 도입했으며, 4....

Admin

Cross Memory Attach 또는 ptrace 중 어느 것을 사용합니까?
ptrace

Cross Memory Attach 또는 ptrace 중 어느 것을 사용합니까?

ptrace 시스템 호출을 시도하고 있는데 방금 알아냈습니다.크로스 메모리 연결크리스토퍼 영으로부터. Cross Memory Attach와 ptrace 중 어떤 것이 성능이 더 좋은지 알고 싶습니다. 미리 감사드립니다 ...

Admin

특정 프로세스가 주어진 실행 파일을 실행하도록 하려면 ptrace()를 어떻게 사용합니까?
ptrace

특정 프로세스가 주어진 실행 파일을 실행하도록 하려면 ptrace()를 어떻게 사용합니까?

exec()나는 외부 파일 시스템을 시스템 플래시에 쓰기 전에 테스트할 수 있도록 임베디드 Linux 시스템의 초기화 프로세스를 자체 초기화 프로그램(systemd) 에 강제로 적용하려고 합니다 (그리고 장치가 벽돌이 될 위험이 있습니다). GDB를 사용하면 명령을 실행 gdb --pid=1한 다음 해당 셸 유형에서 실행할 수 있지만 call execl("/lib/systemd/systemd", "systemd", 0)(필요한 방식으로 정확히 작동합니다) 시스템의 플래시 메모리에 GDB를 넣을 공간이...

Admin

추적되는 프로세스(자식 프로세스)가 분기 명령을 실행할 때 추적 프로세스(상위 프로세스)에게 알리는 방법이 있나요?
ptrace

추적되는 프로세스(자식 프로세스)가 분기 명령을 실행할 때 추적 프로세스(상위 프로세스)에게 알리는 방법이 있나요?

우리 모두 알고 있듯이 ptrace 시스템 호출은 Unix 계열 시스템에서 가장 강력한 시스템 호출 중 하나입니다. 모든 디버깅 소프트웨어는 ptrace를 사용하여 다른 프로세스, 즉 피추적자를 모니터링하고 조작합니다. ptrace를 사용하면 피추적자 프로세스에서 읽기/쓰기 시스템 호출을 추적할 수 있습니다. 피추적자를 모니터링하고 피추적자가 분기 명령을 실행할 때만 추적자에게 알리기 위해 ptrace를 사용할 수 있나요? 가능합니까? 그렇지 않다면 특정 주소의 특정 명령이 실행될 때 추적기에 알릴 ...

Admin

OSX에서 ptrace() 프로그램 컴파일하기
ptrace

OSX에서 ptrace() 프로그램 컴파일하기

MacOS에는 다음과 같은 간단한 C 프로그램이 있습니다. #include <stdlib.h> #include <sys/wait.h> #include <stdio.h> #include <sys/ptrace.h> int main(int argc, char *argv[]) { pid_t pid = atoi(argv[1]); printf("pid = %jd\n", (intmax_t) pid); return ptrace(PT_ATTACHE...

Admin

Strace는 실행 중이 아닌 프로세스 종료 시에만 결과를 ASCII로 표시합니다.
ptrace

Strace는 실행 중이 아닌 프로세스 종료 시에만 결과를 ASCII로 표시합니다.

쓸모없는 바이트 대신 시스템 호출 strace의 내용을 ASCII로 인쇄 하는 방법을 찾고 있습니다 !write(...) 내가 사용한 명령은 다음과 같습니다 Strace. sudo strace -e write=1 -e trace=write -s9999 -p 551 2>&1 출력은 세 가지 부분으로 구성됩니다. 1) 넌센스 write(4, ",\307\3440#\360\277c\355)\246}\235H\320\301H\356Q[\0370\255T50\361\345VM\203\266\...

Admin