gpt4 book ai didi

c - 是否可以 LD_PRELOAD 具有不同参数的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:44 24 4
gpt4 key购买 nike

假设我通过创建一个共享对象并首先使用 LD_PRELOAD 加载它来替换一个函数。该函数的参数是否可以与原始库中的参数不同?

例如,如果我替换了 pthread_mutex_lock,那么它使用 pthread_my_mutex_t 而不是参数 pthread_mutex_t。可能吗?

其次,除了函数之外,是否可以使用 LD_PRELOAD 更改结构声明?例如,可以向结构中添加一个字段。

最佳答案

尽管您可以安排提供修改后的 pthread_mutex_lock() 函数,但代码将被编译为调用标准函数。当使用传递给标准函数的参数调用替换时,这将导致问题。这是一种礼貌的说法:

  • 预计它会崩溃并燃烧

任何预加载的函数都必须实现相同的接口(interface)——相同的名称、相同的输入参数、相同的输出值——作为它替换的函数。可以根据需要以不同方式实现内部结构,但接口(interface)必须相同。

与结构类似。现有代码被编译为预期结构的一种尺寸,具有一种特定的布局。您可能会在末尾添加一个额外的字段,但未替换的代码可能无法正常工作。它将为结构的原始大小分配空间,而不是增强结构等。它永远不会访问额外的元素本身。这可能并非完全不可能,但你必须设计程序来处理动态变化的结构大小,这对你何时可以这样做有足够严格的限制,答案“你不能”可能是恰当的(而且肯定很多更简单)。

恕我直言,LD_PRELOAD 机制用于紧急情况(并且是针对给定问题的临时创可贴)。这不是一种您应该计划在类似常规基础上远程使用的机制。

关于c - 是否可以 LD_PRELOAD 具有不同参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871938/

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