青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

TLS 處理

轉載自:http://bbs.pediy.com/showthread.php?threadid=17839

標 題: 翻譯 TLS 處理
作 者: forgot
時 間: 2005-10-23,12:19
鏈 接: http://bbs.pediy.com/showthread.php?t=17839

英語又退步了唉,不準就不準吧湊或看。

支持 TLS

原文:Writing Your Own Packer - by BigBoote

TLS(Thread Local Storage,線程局部存儲)是一種便利的編程機制。我們通常不使用,因此并不太關心。但是要壓縮的原程序可能會用到它。事實上,Delphi 總是使用它,如果我們打算支持 Delphi 程序,最好兼容它。

TLS 基本上是通過 API 實現。大致過程是,你分配一個“ Index(索引)”并存儲在一個全局變量中。通過這個 Index 獲得針對每個線程的一個雙字值。通常使用這個值保存一個為每個線程分配好的內存塊的指針。人們認為這樣很乏味,一個特殊機制的出現使得實現它更容易些。因此,你可以這樣寫代碼:

__declspec ( thread ) int tls_int_value = 0;


每個線程可以通過名稱訪問它獨特的實例,就像訪問其他變量一樣。我不知道這種 TLS 形式是否有官方名稱,所以我叫它“簡化 TLS”。這種機制與操作系統兼容,并且 PE 文件中有對應的結構。這些結構包含在數據目錄的一個塊中:

origdirinfo[IMAGE_DIRECTORY_ENTRY_TLS].VirtualAddress

問題是, 處理這信息發生在由 OS 在每個線程的創建時刻,在執行到線程開始地址之前。(這句翻譯的拗口,原文 The problem is that the processing of this information happens by the OS on the creation of every thread prior to execution being passed to the thread start address. )這通常不牽涉到我們,除了至少一個線程在我們解壓數據之前被執行:我們的線程!我們必須設置一個偽 TLS 處理區段捕獲 OS 在我們開始之前做的事情,然后在最后一步把這個信息傳遞給原程序。

為此,我在外部加殼器外部全局結構添加了2個項目:
GlobalExternVars
{
//(other stuff we previously described)
IMAGE_TLS_DIRECTORY tls_original;
IMAGE_TLS_DIRECTORY tls_proxy;
}
;

加殼器將會在運行期復制原始數據到 tls_orginal 為我們所用。tls_proxy 幾乎是一個精確的副本,除了2個項目將會被修改:
tls_proxy.AddressOfIndex
tls_proxy.AddressOfCallBacks

在這個塊中我們將要初始化 AddressOfIndex 指向一個正常的全局雙字變量,并且我們將初始化 AddressOfCallBacks 指向一個函數指針數組。它是一個線程創建時將會被調用的函數指針列表。用戶使用它定義 TLS 對象的初始化。唉,我沒見過一個編譯器使用它。此外,在 9x 下,這些函數不會被調用。盡管如此,我們還是要支持它以防萬一哪天它會被使用。我們令 AddressOfCallbacks 指向一個2個成員的數組,一個試我們將要執行的函數指針,另一個是 NULL 作為列表結束符。

設置一個全局雙字存儲 TLS slot(槽?)
DWORD TLS_slot_index;

TLS 回調函數必須是這種原型:
extern "C" void NTAPI TLS_callback ( PVOID DllHandle, DWORD Reason, PVOID Reserved );

當然還要添加兩個邏輯標志表示是否可以安全地調用原來的回調函數,和是否延期調用。這樣初始化它們:
bool safe_to_callback_tls = false;
bool delayed_tls_callback = false;

再提供一些變量保存延遲調用的數據:
PVOID TLS_dll_handle = NULL;
DWORD TLS_reason 
= 0;
PVOID TLS_reserved 
= NULL;

編寫回調函數:
extern "C" void NTAPI TLS_callback ( PVOID DllHandle, DWORD Reason, PVOID Reserved )
{
        
if ( safe_to_callback_tls )
        
{
                PIMAGE_TLS_CALLBACK
* ppfn = g_pkrdat.m_tlsdirOrig.AddressOfCallBacks;
                
if ( ppfn )
                
{
                        
while ( *ppfn )
                        
{
                        (
*ppfn) ( DllHandle, Reason, Reserved );
                        
++ppfn;
                        }

                }


        }

        
else
        
{
                delayed_tls_callback 
= true;
                TLS_dll_handle 
= DllHandle;
                TLS_reason 
= Reason;
                TLS_reserved 
= Reserved;
        }

}


這樣會為 OS 提供一個存儲 slot 信息的地方,我們稍候恢復它,并且如果調用了我們的回調函數我們將捕獲參數,在解壓縮之后調用原來的回調函數。否則會出錯因為 0S 會在我們有機會解壓縮之前做這件事情。解壓縮之后,我們把參數傳遞給原來的回調函數。

最后一步是這樣的:
void FinalizeTLSStuff()
{
        
if ( origdirinfo[IMAGE_DIRECTORY_ENTRY_TLS].VirtualAddress != 0 )
        
{
                
*gev.tls_original.AddressOfIndex = TLS_slot_index;
                
void* TLS_data;

                __asm
                
{
                mov ecx, DWORD PTR TLS_slot_index;
                mov edx, DWORD PTR fs:[02ch]
                mov ecx, DWORD PTR [edx
+ecx*4]
                mov pvTLSData, ecx
                }


                
int size = gev.tls_original.EndAddressOfRawData - gev.tls_original.StartAddressOfRawData;

                memcpy ( pvTLSData, (
void*) gev.tls_original.StartAddressOfRawData, size );
                memset ( (
void*) gev.tls_original.EndAddressOfRawData, 0,
                gev.tls_original.SizeOfZeroFill );
        }


        safe_to_callback_tls 
= true;
        
if ( delayed_tls_callback )
        
{
                TLSCallbackThunk ( TLS_dll_handle TLS_reason TLS_reserved );
        }

}

posted on 2008-04-29 14:46 楊粼波 閱讀(499) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区日韩一区二区| 亚洲午夜未删减在线观看| 久久久一二三| 久久一日本道色综合久久| 欧美激情一区二区三区四区 | 午夜亚洲福利在线老司机| 夜夜嗨av一区二区三区四季av| 亚洲第一精品夜夜躁人人躁| 亚洲国产老妈| 一本色道久久综合| 欧美一区二区视频97| 国产精品久久午夜| 一本色道久久综合狠狠躁篇怎么玩| 亚洲小视频在线观看| 亚洲三级影院| 欧美成人国产| 欧美国产日产韩国视频| 国产精品免费网站| 亚洲欧美在线免费| 99re国产精品| 欧美三区在线| 99国产精品99久久久久久| 裸体素人女欧美日韩| 亚洲欧洲久久| 亚洲国产精品电影| 欧美三级欧美一级| 国产精品亚发布| 91久久久久久久久| 亚洲视频第一页| 久热精品视频| 中日韩高清电影网| 蜜桃av一区二区三区| 国产精品美女久久久| 亚洲韩国日本中文字幕| 午夜在线视频一区二区区别| 亚洲韩国青草视频| 久久精品国产69国产精品亚洲| 久久精品一区| 中文精品视频一区二区在线观看| 久久久最新网址| 国产精品香蕉在线观看| 日韩亚洲一区二区| 免费成人高清视频| 欧美一区二区国产| 国产精品毛片| 快she精品国产999| 国产精品色婷婷| 亚洲一区二区在线看| 亚洲人永久免费| 欧美成人资源| 亚洲国产欧美在线人成| 久久久水蜜桃av免费网站| 午夜欧美精品久久久久久久| 国产精品hd| 亚洲欧美另类综合偷拍| 一本色道久久88综合亚洲精品ⅰ| 欧美国产亚洲精品久久久8v| 亚洲经典自拍| 亚洲第一伊人| 欧美精品二区| 亚洲美女精品久久| 亚洲欧洲日本mm| 欧美日韩国产123| 在线亚洲免费| 亚洲视频专区在线| 国产伦精品一区二区三区高清版| 在线亚洲免费| 亚洲自拍三区| 韩国一区电影| 欧美成人性网| 欧美成人精品在线观看| 亚洲人成人99网站| 亚洲欧洲午夜| 欧美日韩中文精品| 欧美一区二区三区在线看| 欧美一区二区三区四区夜夜大片| 国产综合第一页| 欧美福利视频一区| 欧美激情一区二区三区全黄| 夜夜嗨av一区二区三区中文字幕 | 欧美诱惑福利视频| 欧美一级专区免费大片| 亚洲成色最大综合在线| 亚洲精品麻豆| 国产日韩欧美在线一区| 欧美成ee人免费视频| 欧美日韩ab| 久久精品国产久精国产一老狼 | 久久精品国产免费| 亚洲激情一区二区三区| av成人动漫| 99re热这里只有精品视频| 亚洲精品中文字幕在线| 国产精品自拍小视频| 欧美福利电影在线观看| 欧美婷婷久久| 免费观看欧美在线视频的网站| 欧美激情视频免费观看| 欧美综合第一页| 欧美精品手机在线| 久久婷婷国产麻豆91天堂| 欧美日本一区二区视频在线观看| 新狼窝色av性久久久久久| 免费成人黄色| 久久精品日产第一区二区三区| 欧美成人精品高清在线播放| 性欧美video另类hd性玩具| 欧美高清在线观看| 久久久综合网| 国产精品卡一卡二| 亚洲国产成人久久| 狠狠色狠狠色综合系列| 亚洲视频在线观看免费| 亚洲精品综合| 久久久久久九九九九| 亚洲欧美成人网| 欧美激情国产日韩精品一区18| 久久久xxx| 国产欧美日韩91| 亚洲视频一区二区| 在线性视频日韩欧美| 美女精品一区| 免费看成人av| 黄色成人免费观看| 欧美一区二区网站| 欧美一区2区三区4区公司二百| 欧美国产国产综合| 欧美激情第8页| 曰本成人黄色| 久久一区二区精品| 久久中文字幕一区二区三区| 国产丝袜一区二区| 亚洲女女女同性video| 亚洲欧美中文字幕| 国产精品日韩欧美一区| 亚洲色图自拍| 亚洲欧美综合精品久久成人| 欧美天堂亚洲电影院在线观看| 日韩亚洲视频在线| 亚洲天堂av综合网| 国产精品sm| 亚洲自拍三区| 久久久久久久久综合| 国内精品美女av在线播放| 西西人体一区二区| 久久婷婷综合激情| 亚洲电影激情视频网站| 欧美va亚洲va日韩∨a综合色| 欧美黄色小视频| 欧美国产一区二区在线观看 | 久久国产精品黑丝| 国产日韩欧美一区在线 | 欧美激情国产日韩| 日韩网站在线观看| 亚洲曰本av电影| 国产日韩欧美| 久久综合99re88久久爱| 亚洲国产精品尤物yw在线观看 | 韩日成人在线| 蜜桃av噜噜一区| 99视频在线精品国自产拍免费观看 | 一区二区三区国产盗摄| 欧美在线黄色| 亚洲电影视频在线| 欧美视频精品一区| 久久成人综合视频| 亚洲裸体在线观看| 久久久午夜电影| 在线亚洲欧美视频| 在线电影国产精品| 欧美午夜精品久久久久久浪潮 | 欧美黄色片免费观看| 夜夜夜久久久| 麻豆成人在线观看| 亚洲一区激情| 亚洲黄色在线观看| 国产精品日韩二区| 欧美黄污视频| 久久www免费人成看片高清| 亚洲精品国产拍免费91在线| 久久精品欧洲| 亚洲五月婷婷| 亚洲激情自拍| 精品999日本| 国产精品亚洲成人| 欧美日韩国内自拍| 美女图片一区二区| 午夜久久久久久久久久一区二区| 亚洲激情不卡| 麻豆精品精华液| 久久国产福利国产秒拍| 亚洲一区二区三区精品在线观看| 今天的高清视频免费播放成人| 欧美性猛交xxxx乱大交退制版| 久久久久久久欧美精品| 西瓜成人精品人成网站| 亚洲一区二区三区四区五区黄 | 免费成人av资源网| 欧美一区二区三区精品| 亚洲每日在线|