sách gpt4 ai đã đi

Làm cho các luồng được sao chép tương thích với pthread

In lại 作者:行者123 更新时间:2023-12-03 13:02:04 34 4
mua khóa gpt4 Nike

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

1 Câu trả lời

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


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

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

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

34 4 0
Bài viết được đề xuất: python-3.x - 由于线程的原因,按钮回调只能使用一次
Bài viết được đề xuất: c# - 共享资源访问的优化同步
Bài viết được đề xuất: java - Java AQS如何支持不公平锁定?
Bài viết được đề xuất: swift - 在OperationQueue中打印1到10不打印整数
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com