相关疑难解决方法(0)

如何使用PTRACE获得多个线程的一致视图?

当我正在研究这个问题时,我遇到了一个可能的想法ptrace,但是我无法正确理解ptrace与线程的交互方式.

假设我有一个给定的多线程主进程,我想附加到其中的特定线程(可能来自一个分叉的子进程).

  1. 我可以附加到特定的帖子吗?(手册在这个问题上有所不同.)

  2. 如果是这样,这是否意味着单步执行只会逐步完成一个线程的指令?它是否会停止所有进程的线程?

  3. 如果是这样,而我呼吁所有其他线程保持停止PTRACE_SYSCALLPTRACE_SINGLESTEP,或者说所有的线程继续?有没有办法只在一个线程中前进,但保证其他线程保持停止状态?

基本上,我想通过强制所有线程停止来同步原始程序,然后通过单步执行一个跟踪线程来执行一小组单线程指令.

到目前为止,我的个人尝试看起来有点像这样:

pid_t target = syscall(SYS_gettid);   // get the calling thread's ID
pid_t pid = fork();

if (pid > 0)
{
    waitpid(pid, NULL, 0);            // synchronise main process

    important_instruction();
}
else if (pid == 0)
{
    ptrace(target, PTRACE_ATTACH, NULL, NULL);    // does this work?

    // cancel parent's "waitpid" call, e.g. with a signal

    // single-step to execute "important_instruction()" above

   ptrace(target, PTRACE_DETACH, NULL, NULL); …
Run Code Online (Sandbox Code Playgroud)

c linux multithreading ptrace pthreads

12
推荐指数
2
解决办法
2万
查看次数

将共享库注入进程

我刚刚开始在Linux中学习注入技术,并且想要编写一个简单的程序来将共享库注入到正在运行的进程中.(图书馆只会打印一个字符串.)然而,经过几个小时的研究,我找不到任何完整的例子.好吧,我确实弄清楚我可能需要使用ptrace()暂停进程并注入内容,但不知道如何将库加载到目标进程的内存空间和C代码中的重定位内容.有谁知道共享库注入的任何好资源或工作示例?(当然,我知道可能有一些像hotpatch这样的现有库可以用来使注入更容易,但这不是我想要的)

如果有人可以写一些伪代码或给我一个例子,我会很感激.谢谢.

PS:我不是在问LD_PRELOAD技巧.

c linux

5
推荐指数
1
解决办法
8336
查看次数

标签 统计

c ×2

linux ×2

multithreading ×1

pthreads ×1

ptrace ×1