有没有办法将第三方DLL中的静态变量重置为原始值?

时间:2011-10-20 17:21:48

标签: c++ winapi

我们必须在开发过程中使用第三方DLL,遗憾的是我们无法修改它或指定库必须如何工作。

原始库开发人员通过静态变量在他们的方法中引入了状态机制。

E.g:

void foo()
{
 static int a = 1;
 if (a == 1)
 {
  /* some init logic */
  a = 2;
 } 
}

有时我们需要将库带到其原始状态。

有没有办法在没有任何系统“黑客”的情况下将静态变量重置为原始值?

我们目前的解决方案是FreeLibrary / LoadLibrary,但我们想避免它。

4 个答案:

答案 0 :(得分:5)

您当前的解决方案是最干净的解决方案。

唯一的选择是找出变量存储在DLL中的位置并直接修改它。但这是一个非常脆弱的严重黑客攻击。例如,如果第三方DLL发生更改,那么您的黑客可能会停止使用不可预测的效果。

答案 1 :(得分:1)

不幸的是,不,没有一些严重的hackery,这是不可能的。 FreeLibrary / LoadLibrary是您唯一的选择。

答案 2 :(得分:1)

静态局部变量的范围与自动局部变量相同(除了下次调用函数时它们的值将存在的事实)。所以不,你不能在没有黑客的情况下改变它们。

答案 3 :(得分:0)

也许再次使用RTLD_LOCAL加载它,并且只有在加载时才将指针切换到新的库指针并卸载旧库。不幸的是我不知道Win32相当于RTLD_LOCAL(如果有的话)。