LdrpHandleTlsData函数主要用于解决sRDI中静态TLS问题
- 先定位字符串LdrpHandleTlsData的地址
- 定位到指令
push LdrpHandleTlsDataAddr
的地址- 即可得到LdrpHandleTlsData中的异常处理函数
- 这个异常函数地址被引用于EH4_SCOPETABLE中
- 定位EH4_SCOPETABLE的地址
- 此地址被直接引用于LdrpHandleTlsData函数中
- 定位指令
push EH4_SCOPETABLEAddr
即可定位到LdrpHandleTlsData函数地址
32位下异常相关结构是保存在栈中,而64位下是通过PE结构中的异常表
- 先定位字符串LdrpHandleTlsData的地址
- 定位到指令
lea rdx, LdrpHandleTlsDataAddr
的地址- 即可得到LdrpHandleTlsData中的异常处理函数
- 这个异常函数地址被引用于C_SCOPE_TABLE中
- 定位C_SCOPE_TABLE结构的地址
- 也就定位到UNWIND_INFO结构的地址
- UNWIND_INFO结构的地址被引用于RUNTIME_FUNCTION结构中
- 定位RUNTIME_FUNCTION结构地址,即可找到LdrpHandleTlsData函数地址
zig build -Dcpu=generic -Doptimize=ReleaseSmall -Dtarget=x86-windows
zig build -Dcpu=generic -Doptimize=ReleaseSmall -Dtarget=x86_64-windows
其中generic是屏蔽向量相关指令防止出现兼容性问题