ptrace

授予一个进程访问另一进程的进程?
ptrace

授予一个进程访问另一进程的进程?

我希望监视守护进程能够访问/proc/<PID>/smaps_rollup另一个进程,以便能够报告该进程的交换使用情况。 我发现对该文件的访问“由 ptrace 访问模式PTRACE_MODE_READ_FSCREDS检查控制”的信息,但我不知道这意味着什么。 smaps_rollup除了以 root 身份运行之外,是否有其他方法可以授予监视守护进程对另一个进程的文件的访问权限? ...

Admin

为什么 PTRACE_PEEKUSER 不允许读取 x86_64 上的 FPU 寄存器?
ptrace

为什么 PTRACE_PEEKUSER 不允许读取 x86_64 上的 FPU 寄存器?

PTRACE_PEEKUSER被记录为从该区域读取一个单词user,其在 x86_64 上的部分布局是: struct user { struct user_regs_struct regs; int u_fpvalid; struct user_fpregs_struct i387; //... int u_debugreg [8]; }; 虽然人们可以愉快地使用或PTRACE_PEEKUSER内的偏移量进行调用...

Admin

在后台运行 GDB
ptrace

在后台运行 GDB

我正在开发一个程序,其中有 2 个 ncurses 窗口,一个显示使用 fork+exec 实现的自定义 shell,另一个我想显示有关在我的 shell 上运行的命令的一些信息。为此,我尝试使用 GDB。 我的想法是在后台运行 GDB,设置一些断点并将一些信息打印到文件中,我的 ncurses 应用程序读取、格式化和显示该文件。 问题是我无法在没有提示的情况下运行 GDB,因为如果输入不是来自终端,它会自动退出。我正在使用以下脚本: ./bin/pE_application & pid=$(ps -C pE_application -o pid=)...

Admin

系统调用accept4()返回无效值
ptrace

系统调用accept4()返回无效值

我创建了一个类似于“strace”的程序,它能够记录系统调用。 我还安装了一个网络服务器,并从“strace”和我的程序中观看系统调用,并对它们进行比较。 对于每个程序,我向网络服务器发起一个简单的 HTTP GET 请求,该请求创建了多个系统调用。 在我的程序中: 我注意到在某个accept4()执行中,返回值为(-11),意思是(负11)! 但是accept4()的(-11)返回值永远不应该发生。 我不明白为什么当accept4()系统调用退出时我在寄存器RAX中得到(-11)。 附上日志我的程序。 有两个accept4()系统调用(系统调用号288):...

Admin

将 GDB 附加到正在运行的进程的 PID 时出现权限错误
ptrace

将 GDB 附加到正在运行的进程的 PID 时出现权限错误

我有一个这样的玩具C++程序 #include <iostream> int main() { int n{}; std::cin >> n; // waits for input std::cout << n << std::endl; } 它在执行注释行时暂停,等待用户输入并为我提供了附加调试器所需的所有时间。 我在一个终端中运行这个程序,然后在另一个终端中输入 gdb -p $(pidof that-executable) 目的是将调试器附加到上面源代码编译成的可执行文件。 但...

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 { long val; char *p...

Admin

Ptrace:安装在 Multiarch/Qemu-User-Static Arm64v8/Alpine Docker 容器上的 GDB 中未实现功能
ptrace

Ptrace:安装在 Multiarch/Qemu-User-Static Arm64v8/Alpine Docker 容器上的 GDB 中未实现功能

我想使用安装在 x86_64 16.04 Ubuntu VirtualBox 上的 arm64v8/alpine docker 上的 GDB 来调试 aarch64 ELF,该虚拟机本身安装在我的 Mac 上。特别是,要设置 docker,我使用了说明这里。那是: sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes sudo docker run --rm -it -v /directory_on_ubuntu:/directory_on_alpine arm...

Admin

调试器可以使用 /proc 执行哪些 ptrace 无法执行的操作?
ptrace

调试器可以使用 /proc 执行哪些 ptrace 无法执行的操作?

这维基百科关于 ptrace 的文章说: 控制器和目标之间的通信通过重复调用 ptrace 进行,在两者之间传递一个固定大小的小内存块(每次调用需要两次上下文切换);当访问大量目标内存时,这是非常低效的,因为这只能在字大小的块中完成(每个字都有一个 ptrace 调用)。 [7]因此,Unix 第 8 版引入了 procfs,它允许允许进程直接访问另一个进程的内存 - 随后是 4.4BSD,使用 /proc 进行调试器支持被 Solaris、BSD 和 AIX 继承,并且大部分被复制通过Linux 更快的内存访问是否是调试器唯一关心的/proc允许但不可...

Admin

在 Linux 上将文件写入为内存中的假文件
ptrace

在 Linux 上将文件写入为内存中的假文件

我想在一个假写环境中运行一个 Linux 进程,其中所有文件都写入(使用写(2)系统调用)被重定向到内存缓存,后续读取(仅限同一区域)将从缓存中提供服务。进程完成后可以丢弃缓存。 该进程将修改的文件很大(几 TB),但写入的数据总量很小(几兆字节)。因此,overlayfs 不是一个选项,因为我没有几 TB 的可用空间。 请注意,我不关心假设备节点或假权限,因此假根(1)对我没有帮助。 这应该可以通过 LD_PRELOAD 来实现,跟踪(2),保险丝(8)或者DM快照。是否有现有的工具可以为我做这件事,如...

Admin

使用 Cross Memory Attach 或 ptrace 哪一个?
ptrace

使用 Cross Memory Attach 或 ptrace 哪一个?

我正在尝试 ptrace 系统调用,我刚刚发现交叉内存连接来自克里斯托弗·杨。 我想知道 Cross Memory Attach 和 ptrace 之间哪个性能更好。 提前致谢 ...

Admin

如何使用 ptrace() 使特定进程执行给定的可执行文件?
ptrace

如何使用 ptrace() 使特定进程执行给定的可执行文件?

我试图将嵌入式 Linux 系统的 init 进程强制到exec()我自己的 init 程序 (systemd),以便我可以在将外部文件系统写入系统闪存之前对其进行测试(并冒着设备变砖的风险)。使用 GDB,我可以运行命令gdb --pid=1,然后在该 shell 类型中运行call execl("/lib/systemd/systemd", "systemd", 0)(它完全按照我需要的方式工作),但我没有足够的空间将 GDB 放在系统的闪存上。 我想知道ptrace()调用 GDB 的命令到底使用了什么call,以便我可以在自己的简单 C 程序中实现...

Admin

为什么strace和ltrace会导致EINTR发生?
ptrace

为什么strace和ltrace会导致EINTR发生?

考虑这个程序: #include <stdio.h> #include <sys/epoll.h> int main(void) { int epfd = epoll_create1(0); struct epoll_event event; event.events = EPOLLIN; event.data.fd = 0; epoll_ctl(epfd, EPOLL_CTL_ADD, 0, &event); epoll_wait(epf...

Admin

有没有办法可以在被跟踪进程(子进程)执行分支指令时通知跟踪进程(父进程)?
ptrace

有没有办法可以在被跟踪进程(子进程)执行分支指令时通知跟踪进程(父进程)?

众所周知,ptrace系统调用是类unix系统中最强大的系统调用之一。所有调试软件都使用ptrace来监视和操作另一个进程,即tracee。使用ptrace,我们可以跟踪tracee进程中的读/写系统调用。请问,我们可以使用ptrace来监视tracee,并仅在tracee执行分支指令时通知跟踪器吗?这可能吗?如果没有,我们可以在执行特定地址的特定指令时通知跟踪器吗? PTRACE_SINGLESTEP 不适合在我的情况下使用,因为它会导致性能下降。 谢谢你的帮助。 ...

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_ATTACHEXC, pid, 0...

Admin