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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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视频精品免费观看| 亚洲国产一二三| 欧美中文在线观看国产| 亚洲欧美日本精品| 欧美区一区二| 亚洲三级电影全部在线观看高清 | 亚洲综合丁香| 一本色道久久综合狠狠躁的推荐| 久久久久久国产精品mv| 久久激情网站| 国产欧美丝祙| 亚洲男女毛片无遮挡| 亚洲视频视频在线| 欧美日韩在线视频一区| 亚洲人成艺术| 一本色道久久综合亚洲精品婷婷| 欧美成人按摩| 最新成人av在线| 亚洲免费高清| 欧美日韩免费观看一区二区三区 | 久久久999精品视频| 欧美一级久久久| 国产日本精品| 久久国产毛片| 欧美14一18处毛片| 亚洲国产1区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美丰满高潮xxxx喷水动漫| 亚洲国产人成综合网站| 欧美精品午夜视频| 夜夜爽夜夜爽精品视频| 午夜在线一区| 国产一区二区在线观看免费播放| 久久国产欧美| 亚洲国产精品一区二区久 | 欧美在线视频在线播放完整版免费观看 | 性感少妇一区| 久久久久天天天天| 亚洲高清在线观看一区| 欧美精品免费播放| 亚洲婷婷综合色高清在线| 久久精品国产亚洲一区二区三区 | 久久国内精品自在自线400部| 国产一区视频网站| 蜜臀va亚洲va欧美va天堂| 亚洲精选在线观看| 欧美一区二区三区免费大片| 国内精品久久久久影院优| 欧美不卡视频一区| 亚洲无限乱码一二三四麻| 久久久夜色精品亚洲| 亚洲国内欧美| 国产精品色婷婷| 久久久99爱| 一区二区三区日韩欧美精品| 久久精品2019中文字幕| 最新国产成人av网站网址麻豆| 国产精品jizz在线观看美国| 欧美一区二区在线| 亚洲精品一区在线| 麻豆成人在线| 亚洲线精品一区二区三区八戒| 好吊视频一区二区三区四区 | 亚洲日本一区二区| 国产精品一区一区三区| 麻豆成人综合网| 香蕉久久a毛片| 亚洲国产二区| 久久综合狠狠综合久久综青草 | 久久久久久黄| 在线亚洲一区二区| 在线精品一区| 国产日韩在线一区| 欧美精品手机在线| 麻豆成人av| 欧美怡红院视频| 亚洲午夜一二三区视频| 亚洲国产激情| 女女同性精品视频| 久久久久久久久久久一区| 亚洲无线视频| 99www免费人成精品| 伊人蜜桃色噜噜激情综合| 国产人成精品一区二区三| 欧美日韩视频在线观看一区二区三区| 久久精品国产77777蜜臀| 亚洲在线一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 欧美成人在线网站| 老鸭窝91久久精品色噜噜导演| 欧美一区二区三区另类| 亚洲男人第一网站| 亚洲一区二区高清视频| 在线综合欧美| 日韩一级在线观看| 亚洲精品美女在线观看| 亚洲国产三级网| 在线观看视频免费一区二区三区| 黄色成人av| 国产亚洲在线| 激情欧美日韩一区| 一区二区视频欧美| **性色生活片久久毛片| 在线观看视频日韩| 亚洲高清免费在线| 亚洲人成网站色ww在线| 亚洲伦理自拍| 一区二区三区欧美成人| 亚洲一级免费视频| 亚洲欧美美女| 久久国产精品99精品国产| 久久福利资源站| 老司机精品久久| 亚洲国产精品成人| 亚洲人成网站色ww在线| 在线亚洲自拍| 欧美怡红院视频| 美女免费视频一区| 欧美电影免费观看高清完整版| 欧美高清在线精品一区| 欧美日韩专区| 国产日韩专区在线| 亚洲国产美女| 亚洲天堂久久| 久久麻豆一区二区| 亚洲国产成人在线| 亚洲一区二区三区午夜| 欧美在线免费一级片| 噜噜噜在线观看免费视频日韩| 欧美精品日韩一本| 国产欧美成人| 亚洲黄色在线视频| 亚洲一区二区免费视频| 久久蜜臀精品av| 亚洲成人在线免费| 欧美另类综合| 国产精品免费小视频| 国产午夜精品一区二区三区欧美| 激情久久久久久| 一区二区三区不卡视频在线观看| 午夜欧美视频| 亚洲国产欧美日韩| 亚洲欧美激情视频在线观看一区二区三区| 欧美在线三级| 欧美日韩在线另类| 狠狠色综合网| 亚洲午夜视频在线| 葵司免费一区二区三区四区五区| 亚洲国产天堂久久综合网| 亚洲欧美日韩视频二区| 老妇喷水一区二区三区| 国产精品久久久久久户外露出 | 久久视频一区| 国产精品呻吟| 日韩视频在线播放| 久久蜜桃资源一区二区老牛 | 香蕉av777xxx色综合一区| 欧美风情在线| 欧美一区视频| 国产精品久久久久久久久免费桃花| 在线观看日产精品| 欧美影片第一页| 一本不卡影院| 欧美电影免费观看高清| 伊人久久久大香线蕉综合直播| 翔田千里一区二区| 最新国产精品拍自在线播放| 久久福利电影| 国产毛片精品视频| 中文亚洲免费| 亚洲激情专区| 久久亚洲私人国产精品va| 国产在线不卡视频| 欧美一区1区三区3区公司| 亚洲免费电影在线观看| 欧美韩日亚洲| 亚洲美女免费视频| 亚洲福利在线视频| 巨胸喷奶水www久久久免费动漫| 国产精品视频免费观看www| 一区二区三区.www| 亚洲精品美女久久久久| 欧美精品不卡| 一二美女精品欧洲| 日韩亚洲国产欧美| 欧美精选午夜久久久乱码6080| 91久久久久久| 欧美国产三区| 欧美成人午夜免费视在线看片 | 在线看欧美日韩| 免费成人av在线| 免费不卡中文字幕视频|