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

svk*_*svk 4 c++ winapi

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

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

例如:

void foo()
{
 static int a = 1;
 if (a == 1)
 {
  /* some init logic */
  a = 2;
 } 
}
Run Code Online (Sandbox Code Playgroud)

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

有没有办法将静态变量重置为原始值而没有任何系统"黑客"?

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

Dav*_*nan 5

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

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