逆向工程
對系統底層,軟件逆向工程的學習
摘要: 本文為線程本地存儲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
閱讀全文