我最初在ReverseEngineering StackExchange上发布了这个,不知道它属于哪个位置。无论如何,我决定在这里发布它。函数本地静态生成Windows XP的错误代码
最近,Microsoft Visual Studio 2015编译器最终符合C++标准规定,为函数本地静态生成线程安全代码。在大多数情况下这工作得很好,但我遇到的情况在Windows XP在以下3个指令导致的吹胀:
mov eax,dword ptr fs:[0000002Ch]
mov ecx,dword ptr [MyModule!_tls_index (102eea44)]
mov ecx,dword ptr [eax+ecx*4]
显然编译器似乎先戳成TLS来实现线程安全当前线程的插槽。 fs:2Ch
应该导致每个文档的TLS数组。但是在Windows XP上,似乎没有设置fs:2Ch
。这对我来说返回0,下一条指令也是(_tls_index
也是0)。这导致第3条指令因访问无效内存而炸毁。
有谁知道为什么fs:2Ch
可能没有在Windows XP上设置?我们的代码中使用了本地静态函数,我无法想象没有其他人会遇到这种情况。
UPDATE
我已经仔细考虑我已经申请了这个问题每一个标签。请不要添加或删除任何东西。
您是否在构建代码时正确定位到XP平台? –
@KubaOber是的,我是。我们使用v140_xp工具集。 – ForeverLearning
XP SP3上的问题是什么? –