Chuyu-Team/YY-Thunks

Windows XP系统添加动态TLS支持

Closed this issue · 5 comments

原始回复

tls那一套暴力修复其实也简单:
1.分配一个新的AddressOfIndex 给要处理的dll模块,在peb的LDR里面修改好。
2.遍历存在的线程,给每个线程的teb处理一遍,ThreadLocalStoragePointer 指向一个你自己申请的TLS列表,拷贝原理的数据,增加一个新的节点复制自己的tls数据。
3.处理创建的线程,处理逻辑同2.
4.处理线程退出逻辑,清理自己的创建内存,还原ThreadLocalStoragePointer 指针

【吃🦐的】大头虾米 9:32:28
https://github.com/cxxzhang/FixTls/blob/main/FixTls/FixTls.cpp#L120

【吃🦐的】大头虾米 9:32:45
https://github.com/cxxzhang/FixTls/blob/main/FixTls/FixTls.cpp#L219

任务列表

✔表示已经处理问题

  • 解决无法处理之前已经启动的线程没有分配Tls内存问题。
  • Fls相关接口使用Tls重新改造,解决部分场景Callback丢失以及减少内存开销。
  • NuGet版YY_Thunks在XP模式时自动为DLL开启自定义入口点DllMainCRTStartupForYY_Thunks
  • 提供 __pfnDllMainCRTStartupForYY_Thunks weak符号,满足DLL自定义入口点定制。

nice work

这个改入口的方式 是否可以替换成 Thunks LoadLibraryA/LoadLibraryW LoadLibraryExA/LoadLibraryExW
毕竟标准用法肯定是 这四个函数,
这样不需要篡改每一个 dll的入口了