我最初在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上的問題是什麼? –