gpt4 book ai didi

pthreads - 获取进程内使用 pthread_created 创建的所有 thread_id

转载 作者:行者123 更新时间:2023-12-02 14:41:43 26 4
gpt4 key购买 nike

如果有任何“智能”方式可以获取进程内使用 pthread_created 创建的所有 threadID(假设这些线程是在第三方库中创建的),则使用 pthreads不会公开这些数据。

最佳答案

一种方法是为 pthread_create 创建一个替换函数,并使用 LD_PRELOAD。当然,您不想重新实现 pthread_create,因此您必须以某种方式调用 pthread_create,但您可以要求动态加载器为您加载它:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdint.h>
#include <bits/pthreadtypes.h>
#include <dlfcn.h>

void store_id(pthread_t * id) {
fprintf(stderr, "new thread created with id 0x%lx\n", (*id));
}

#undef pthread_create

int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start)(void *), void * arg)
{
int rc;
static int (*real_create)(pthread_t * , pthread_attr_t *, void * (*start)(void *), void *) = NULL;
if (!real_create)
real_create = dlsym(RTLD_NEXT, "pthread_create");

rc = real_create(thread, attr, start, arg);
if(!rc) {
store_id(thread);
}
return rc;
}

然后将其编译为共享库:

gcc -shared -ldl -fPIC pthread_interpose.c -o libmypthread.so

您可以将它与任何动态链接的程序一起使用:

 LD_PRELOAD=/path/to/libmypthread.so someprog

注意:这是 blog post 的改编版本

关于pthreads - 获取进程内使用 pthread_created 创建的所有 thread_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3707358/

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