gpt4 book ai didi

c - ptrace(),如何停止在子进程中被跟踪?

转载 作者:行者123 更新时间:2023-11-30 18:56:19 30 4
gpt4 key购买 nike

我只想跟踪 C 程序的一部分以进行系统调用。我使用 ptrace() 和 PTRACE_TRACEME 选项来开始跟踪。如何在几行代码后阻止此进程被跟踪。我正在尝试使用 PTRACE_DETACH 但它不起作用?

主要的 .C 文件是:

#include<stdio.h>
#include<unistd.h>
#include<sys/ptrace.h>
#include<signal.h>

int display(char *p);
int main()
{
puts("Before Display\n");
display("hello");
puts("After Display\n");
return 0;
}

int display(char *p)
{
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
raise(SIGCONT);
puts("interception");
ptrace(PTRACE_DETACH, 0, NULL, NULL);
return 0;
}

父进程的代码是:

#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/reg.h> /* For constants ORIG_EAX etc */
#include <stdio.h>
int main()
{ pid_t child;
int status;
long orig_eax;
child = fork();
if(child == 0)
{
execl("/home/kashi/Documents/write", "write", NULL);
}
else {
while(1)
{
wait(&status);
if(WIFEXITED(status))
break;
orig_eax = ptrace(PTRACE_PEEKUSER,
child, 4 * ORIG_EAX,
NULL);
printf("The child made a "
"system call %ld\n", orig_eax);
ptrace(PTRACE_SYSCALL, child, NULL, NULL);
}
}
return 0;
}

最佳答案

您无法从跟踪的进程中执行此操作。

PTRACE_TRACEME 是在跟踪进程中唯一有意义的请求。 PTRACE_DETACH 和所有其他的都必须在跟踪过程中使用。

被追踪者可以与追踪者通信并礼貌地要求其分离。没有专门为此目的的 ptrace 请求。追踪者可以例如raise(SIGCONT),跟踪器将观察它并发出 PTRACE_DETACH

关于c - ptrace(),如何停止在子进程中被跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573247/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com