缘起
在上篇文章《调试实战 | 调试另外一个由于全局变量初始化顺序导致的 dll 加载失败问题(上)》中,解决了由于全局变量初始化顺序不对导致的崩溃问题。但是代码里还有一处非常隐蔽的bug
,今天继续介绍一下这个问题及对应的解决方法。
示例程序
在上篇文章代码的基础上,修改LoadDlls
工程中的main()
函数代码,使其加载dll1.dll
和dll2.dll
(上篇文章中只加载了dll1.dll
)。修改后的关键代码如下:
int main()
{
std::cout << "[+] load plugin start." << std::endl;
const char* plugins[] = { "dll1.dll", "dll2.dll", /*"dll3.dll",*/ nullptr }; //<---- 只修改了这里
auto loaded_module_map = LoadPlugins(plugins);
std::cout << "[+] load plugin done, press any key to init plugins." << std::endl;
system("pause");