gpt4 book ai didi

multithreading - 使用 LD_PRELOAD 和线程安全注入(inject)线程

转载 作者:行者123 更新时间:2023-12-03 13:05:22 25 4
gpt4 key购买 nike

我正在做一个项目,用 LD_PRELOAD 在程序中注入(inject)共享库。

我的注入(inject)库在注入(inject)程序时会创建一个新线程。所有逻辑都发生在这个线程中(比如分析网络流量等等)。

首先,您需要了解正在预加载的程序。它是一个客户端应用程序,它加密每个数据包,写入静态缓冲区,然后发送到服务器。我在客户端找到了加密和发送数据包的功能,我能够绕道而行。所以现在我可以修改静态缓冲区并让“发送”函数加密缓冲区并将缓冲区发送到服务器。

enter image description here

但是现在我有一个问题:如果我在库线程中更改静态缓冲区的内容(以便我可以发送假数据包),同时程序的线程也更改静态缓冲区怎么办?那会导致崩溃。

我需要某种同步。

所以我一直在想一些解决方案:

  • 找到程序中更改缓冲区的每个函数,绕过它们并为该调用添加一个互斥锁或类似的东西。不过需要很长时间...
  • 找到一种方法来执行我的一段代码,在一个 block 中更改缓冲区。所以我的一段代码实际上是立即执行的,没有 POSIX 线程切换到其他线程。这甚至可能吗?
  • 让我的应用程序同步并哭泣。

  • 任何人都可以提出更好的解决方案吗?或者您知道如何使解决方案 2 成为可能吗?

    提前致谢,
    吉利斯

    最佳答案

    如果你绕过了'send'函数并且你的预加载库中有'detoured send'的代码,这意味着当主线程调用'send'时,你的'detoured send'代码将被执行在主线程的上下文中 ,你的线程在那一刻什么都不做。如果您有多个可能调用“发送”的“主线程”,那么您需要在“迂回发送”中进行同步。

    或者,如果您真的想在新的“注入(inject)”线程中处理某些内容,您可以:
    1)在您的“迂回发送”(从主线程的上下文中调用):将数据传递给您的线程
    并等到它完成数据处理(注意:主线程是 等待 )。

    关于multithreading - 使用 LD_PRELOAD 和线程安全注入(inject)线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321378/

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