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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(504) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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中文字幕一区二区| 亚洲一级二级在线| 日韩视频免费观看高清在线视频| 美女亚洲精品| 久久久99精品免费观看不卡| 午夜电影亚洲| 亚洲一区二区黄色| 99re6热只有精品免费观看| 尤物网精品视频| 国产亚洲成人一区| 国产精品网站一区| 欧美午夜精品久久久久久浪潮| 欧美电影在线免费观看网站| 开元免费观看欧美电视剧网站| 欧美中文字幕不卡| 午夜视频精品| 欧美一区二区三区日韩| 亚洲尤物在线| 亚洲欧美日韩在线观看a三区| 一二三四社区欧美黄| 亚洲麻豆av| 亚洲精品日韩精品| 亚洲人成艺术| 亚洲开发第一视频在线播放| 亚洲欧洲日本一区二区三区| 亚洲欧洲日本专区| 亚洲卡通欧美制服中文| 日韩视频免费大全中文字幕| 99精品热视频| 亚洲综合色婷婷| 欧美一区二区在线播放| 欧美一区2区三区4区公司二百| 亚洲一区二区在线播放| 午夜精品婷婷| 久久天天狠狠| 欧美国产视频在线| 欧美视频日韩视频在线观看| 国产精品高精视频免费| 国产老女人精品毛片久久| 国产视频自拍一区| 在线成人激情黄色| 亚洲欧洲综合另类在线| 99在线精品免费视频九九视| 亚洲一区二区三区在线播放| 欧美一区二区黄| 久久午夜av| 亚洲国产一区二区视频| 99av国产精品欲麻豆| 亚洲午夜av电影| 欧美在线91| 欧美成人有码| 国产精品免费一区二区三区在线观看| 国产精品视频久久| 一本久道久久综合中文字幕| 欧美日韩一区二区视频在线 | 欧美一区二区三区男人的天堂| 欧美影片第一页| 久久人人精品| 欧美大成色www永久网站婷| 欧美体内she精视频在线观看| 国产精品久久久久久久久久妞妞| 狠狠干成人综合网| 日韩视频免费| 欧美在线综合视频| 欧美刺激午夜性久久久久久久| 亚洲美女免费精品视频在线观看| 亚洲欧美色一区| 免费观看成人www动漫视频| 欧美色大人视频| 精品成人免费| 亚洲少妇中出一区| 免播放器亚洲| 亚洲少妇最新在线视频| 久久久精品国产免大香伊| 欧美成人一品| 国产情人节一区| 日韩视频在线观看国产| 久久久久国产成人精品亚洲午夜| 亚洲高清自拍| 午夜在线观看欧美| 欧美日韩hd| 一区在线视频| 午夜欧美视频| 最新69国产成人精品视频免费| 性欧美video另类hd性玩具| 欧美精品二区| 激情亚洲成人| 久久不见久久见免费视频1| 亚洲三级网站| 久久一区二区精品| 国产亚洲人成网站在线观看| 亚洲私人影院| 亚洲黄一区二区三区| 久久免费99精品久久久久久| 国产欧美一区视频| 亚洲欧美日韩在线高清直播| 亚洲福利久久| 久久嫩草精品久久久久| 国产亚洲成av人片在线观看桃| 一区二区三区国产精品| 欧美激情一区二区三区| 久久久国产精品一区二区中文| 国产伦精品一区二区三区视频黑人| 99精品热6080yy久久| 亚洲电影激情视频网站| 另类av一区二区| 狠狠做深爱婷婷久久综合一区| 午夜久久久久久| 一区二区三区免费网站| 欧美日韩精品伦理作品在线免费观看| 亚洲国产欧美一区| 免费成人小视频| 欧美在线播放一区| 国产亚洲欧美激情| 久久久久久婷| 欧美一区二区视频在线| 国产欧美一区二区视频| 欧美中文字幕视频在线观看| 一区二区三区免费网站| 国产精品扒开腿做爽爽爽视频| 亚洲无人区一区| 一区二区黄色| 国产精品久久久久99| 午夜精品视频在线| 亚洲欧美日韩第一区| 国产亚洲毛片在线| 久久综合狠狠综合久久综青草| 久久国产福利| 亚洲国产精品传媒在线观看| 欧美成人一区二区在线| 欧美成人日本| 在线天堂一区av电影| aa国产精品| 国产精品一区免费观看| 久久av红桃一区二区小说| 欧美专区中文字幕| 亚洲第一级黄色片| 亚洲国产精品久久| 欧美色综合天天久久综合精品| 亚洲中无吗在线| 午夜激情久久久| 1769国内精品视频在线播放| 欧美激情无毛| 国产精品sm| 久久九九精品99国产精品| 久久男人av资源网站| 日韩亚洲在线观看| 亚洲一卡久久| 影音先锋国产精品| 亚洲欧洲日韩综合二区| 国产精品大片免费观看| 久久精品国产精品| 免费黄网站欧美| 亚洲网站啪啪| 欧美在线三级| 一区二区日韩伦理片| 亚洲一区二区三区高清| 在线视频国产日韩| 99re国产精品| 在线观看不卡| 亚洲视频视频在线| 亚洲国产成人精品久久| 一本色道久久99精品综合| 狠狠色丁香婷综合久久| 日韩午夜中文字幕| 今天的高清视频免费播放成人| 亚洲日韩欧美视频一区| 国产偷国产偷精品高清尤物| 亚洲成人资源| 国产亚洲观看| 99国产一区| 一区二区三区在线观看欧美| 一本大道av伊人久久综合| 在线观看视频一区| 亚洲一级在线观看| 亚洲美女性视频| 久久av一区二区三区漫画| 一区二区三区四区精品| 久久九九免费| 亚洲欧美日韩精品在线| 欧美777四色影视在线| 久久精品国产免费| 欧美日韩在线一区二区| 亚洲成色精品| 国模精品一区二区三区| 一本色道久久加勒比88综合| 亚洲日本va午夜在线电影| 欧美一区二区三区免费视频| 亚洲一区在线播放| 欧美人与性禽动交情品| 欧美a级片网|