逆向工程
对系统底层,软件逆向工程的学习
摘要: 本文为线程本地存储TLS系列之实现探究。
我们在上一篇线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理中曾经说过TLS可以分为两类:静态TLS和动态TLS。然后又分别说明了两者在程序实现时的用法,并且还说明了windows对这两类TLS的实现原理,我们本文的目的是从底层实现的角度深入探究,深刻理解原理。
阅读全文
摘要: 我们知道在一个进程中,所有线程是共享同一个地址空间的。所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线程对其进行了修改,也就会影响到其他所有的线程。不过我们可能并不希望这样,所以更多的推荐用基于堆栈的自动变量或函数参数来访问数据,因为基于堆栈的变量总是和特定的线程相联系的。
不过如果某些时候(比如可能是特定设计的dll),我们就是需要依赖全局变量或者静态变量,那有没有办法保证在多线程程序中能访问而不互相影响呢?答案是有的。操作系统帮我们提供了这个功能——TLS线程本地存储。TLS的作用是能将数据和执行的特定的线程联系起来。
实现TLS有两种方法:静态TLS和动态TLS。以下我们将分别说明这两类TLS。
阅读全文
摘要: -------------------------------------------------------
slm x86 win32 r3 pe packer
mimisys x86 win32 r0 pe packer
elfp x86 linux r3 elf packer
-------------------------------------------------------
阅读全文
摘要: 每个线程拥有自己的线程局部存储,互补干扰。系统中线程局部存储是存放在线程的TEB中,每个线程都有自己的TEB因此互相独立。见下面的TEB结构中的ThreadLocalStoragePointer、TlsSlots、TlsLinksTlsExpansionSlots域。对TLS的访问通过 TlsAlloc、TlsSetValue和TlsGetValue以及TlsFree几个API进行。这些API也是对TEB中Tls相关域的访问。跟踪Tls*等API函数发现,系统通过PEB中的TlsBitmap来保存Tls的使用记录,并据此分配Tls索引,另外PEB还有 TlsExpansionCounter和TlsBitmapBits来跟踪Tls的使用情况。
阅读全文
摘要: the format of object files
阅读全文