gpt4 book ai didi

multithreading - 使克隆的线程 pthread 兼容

转载 作者:行者123 更新时间:2023-12-03 13:02:04 32 4
gpt4 key购买 nike

我在 Linux x86-64 上用 C 语言编程。我正在使用一个库,它通过原始 clone 创建多个线程系统调用而不是使用 pthread_create .这些线程运行库内部的低级代码。
我想钩住这些线程之一来反省它的行为。 Hook 代码很容易,但我发现我几乎无法调用 libc 中的任何内容,因为未配置线程状态。 pthread_create通常将一堆数据插入到 fs: 索引的线程本地存储区域中.例如,其中一些数据对于 libc 是必不可少的。的函数,例如函数指针加密 key ( pointer_guard )和语言环境指针。
所以我的问题是:我可以升级 clone 'd线程到一个完整的pthread通过任何机制?如果没有,有什么方法可以从 clone 调用 C 函数? 'd 线程(如 printftoupper 等需要 libc 的线程本地数据)?

最佳答案

Some of that data, for example, is essential to libc's function, such as the function pointer encryption key (pointer_guard) and locale pointer.


正确的。不要忘记 errno ,也在那里。

can I upgrade a clone'd thread to a full pthread via any mechanism?


不。

is there any way that I can call C functions from a clone'd thread


不。
如果你有库的源码,直接替换应该比较容易 clonepthread_create 通话.
如果您不这样做,但该库以存档形式提供,您可以使用 obcopy --rename-symbol重定向其 clone调用替换(例如 my_clone ),然后可以通过 pthread_create 创建一个新线程并在该线程中调用目标函数。这是否会成功很大程度上取决于图书馆对 clone 细节的关心程度。 .
这也可能不值得麻烦。

更好的选择可能是在不调用 libc 的情况下实现自省(introspection)。由于您的 printftoupper大概只需要处理 ASCIIC语言环境,实现这些功能的有限版本并使用直接系统调用来编写输出并不难。

关于multithreading - 使克隆的线程 pthread 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64599080/

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