Windows XP系统添加动态TLS支持
Closed this issue · 5 comments
mingkuang-Chuyu commented
原始回复
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自定义入口点定制。
lygstate commented
nice work
lygstate commented
这个改入口的方式 是否可以替换成 Thunks LoadLibraryA/LoadLibraryW LoadLibraryExA/LoadLibraryExW
毕竟标准用法肯定是 这四个函数,
这样不需要篡改每一个 dll的入口了
mingkuang-Chuyu commented
不能。
因为单纯的Thunk LoadLibrary* 无法控制DllMain的调用时机,如果目标DLL在DllMain中就立马访问TLS呢?
而且也无法保证一定可以接收线程回调通知,如果LoadDll这个模式本身是一个动态加载的DLL,这个情况又怎么办?
…________________________________
发件人: Yonggang Luo ***@***.***>
发送时间: 2024年5月29日 11:19
收件人: Chuyu-Team/YY-Thunks ***@***.***>
抄送: mingkuang ***@***.***>; State change ***@***.***>
主题: Re: [Chuyu-Team/YY-Thunks] Windows XP系统添加动态TLS支持 (Issue #83)
这个改入口的方式 是否可以替换成 Thunks LoadLibraryA/LoadLibraryW LoadLibraryExA/LoadLibraryExW
毕竟标准用法肯定是 这四个函数,
这样不需要篡改每一个 dll的入口了
―
Reply to this email directly, view it on GitHub<#83 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AEX7GZNJL6SSTVXFYEQUEJDZEVCKZAVCNFSM6AAAAABIAWNQAGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZWGQ2DCNJSHE>.
You are receiving this because you modified the open/close state.Message ID: ***@***.***>