gpt4 book ai didi

c - Ptrace 无法附加

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:15 26 4
gpt4 key购买 nike

我以 ./main & 运行我的进程

它给了我一个看起来像这样的地址:[1] 4257

然后在一个新的终端上我这样做:./tracer 4257

这行代码返回-1

ptrace(PTRACE_ATTACH, traced_process, NULL, NULL);

主.c

int main()
{
int i;
for(i = 0; i < 10; i++)
{
printf("Hello World\n");
sleep(5);
}

return 0;
}

示踪剂.c

#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/user.h> // For user_regs_struct

int main(int argc, char *argv[])
{
pid_t traced_process;
struct user_regs_struct regs;

if(argc != 2)
{
printf("Usage: %s <pid to be traced>\n", argv[0], argv[1]);
exit(1);
}

traced_process = atoi(argv[1]);

long t = 0;
t = ptrace(PTRACE_ATTACH, traced_process, NULL, NULL);

if(t < 0)
printf("-1\n");

wait(NULL);

ptrace(PTRACE_GETREGS, traced_process, NULL, &regs);
long ins = ptrace(PTRACE_PEEKTEXT, traced_process, regs.eip, NULL);

if(ins < 0)
printf("-1\n");

printf("EIP: %lx Instruction executed: %lx\n", regs.eip, ins);

ptrace(PTRACE_DETACH, traced_process, NULL, NULL);

return 0;
}

我该如何解决这个问题?

最佳答案

如果没有直接的父子进程关系(或者您不是 root),Ubuntu 会限制其他程序通过 ptrace 附加的能力。

看看https://wiki.ubuntu.com/Security/Features#ptrace

基本上,您需要通过执行 echo 0 >/proc/sys/kernel/yama/ptrace_scope

允许跟踪或禁用系统范围内的保护

关于c - Ptrace 无法附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20601790/

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