操作系统编程技术深度解析
1. 线程本地存储(Thread Local Storage)
线程本地存储(TLS)允许每个线程拥有自己独立的变量副本。在不同的操作系统和编译器中,TLS 的实现方式有所不同。
1.1 MSVC 2013 中的 TLS 回调函数
在 MSVC 2013 中,TLS 回调函数有时会用于解包例程,以掩盖其处理过程。以下是一个简单的示例,展示了如何在 IDA 中查看相关代码:
.text:00401020 TlsCallback_0
proc near
; DATA XREF: .rdata:TlsCallbacks
.text:00401020
call
ds:GetTickCount
.text:00401026
push
eax
.text:00401027
call
my_srand
.text:0040102C
pop
ecx
.text:0040102D
retn
0Ch
.text:0040102D TlsCallback_0
endp
...
.rdata:004020C0 TlsCallbacks
dd offset TlsCallback_0 ; DATA XREF: .rdata:TlsCallbacks_ptr
...
.rdata:00402118 TlsDirectory
dd offset TlsStart
.rdata:0040211C TlsEnd_ptr
dd offset TlsEnd
.rdata:00402120 TlsIndex_ptr
dd offset TlsIndex
.rdata:00402124 TlsCallba
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



