C++ 11 thread静态链接getlogicalprocessorinformation导致错误

今天调试一个程序时发现出现"无法定位程序输入点getlogicalprocessorinformation于动态链接库kernel32.dll"错误,可是程序也没引用getlogicalprocessorinformation这个函数。

首先猜想会不会是微软的bug,所以拿depends工具看下,


B区为对应kernel32.exe所有导出函数,A区为本exe导入的kernel32.exe中的函数。一看,还真链接了kernel32.exe函数,说明不是微软bug。



再查网上,原来XP SP3前没有getlogicalprocessorinformation这个函数,现在程序报这个错误,可又没有明确的静态链接这个函数,所以我想肯定是什么库,静态链接了这个函数,所以直接用IDA逆向看下。还好自己的程序有pdb,找到Imports导入表中的getlogicalprocessorinformation,一路向上查找引用,最终看到


调用的类看起来包装了很多层,看到这里Concurrency(并发)、Scheduler(调度),自然想到应该是跨平台的线程类导致的,果然代码中有C++ 11的thread类,将其改造成windows线程类调用,一起OK。


C++ 11果然还是有坑~~

原创,转载请注明来自http://blog.csdn.net/wenzhou1219

猜你喜欢

转载自blog.csdn.net/wenzhou1219/article/details/78242321