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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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性久久久久蜜臀aⅴ| 99国产精品一区| 亚洲综合国产激情另类一区| 国内精品久久久久影院优| 欧美 日韩 国产在线| 欧美日韩国产成人在线| 欧美与黑人午夜性猛交久久久| 久久久久久久激情视频| 日韩视频在线观看一区二区| 亚洲一区二区三区国产| 国产精品电影在线观看| 欧美三区美女| 亚洲国产精品va在线看黑人| 亚洲精品裸体| 欧美日韩伊人| 久久天堂成人| 欧美午夜宅男影院在线观看| 久热精品视频在线| 欧美午夜不卡在线观看免费| 久久久久久久尹人综合网亚洲| 欧美电影在线| 久久久久久一区二区| 欧美日韩不卡视频| 久久婷婷激情| 国产精品日韩欧美综合| 亚洲国产日韩欧美在线99| 国产嫩草一区二区三区在线观看| 你懂的视频欧美| 国产精品亚洲视频| 亚洲另类视频| 亚洲精品久久久蜜桃| 欧美一区二区私人影院日本| 99热在线精品观看| 久久成人人人人精品欧| 午夜精品久久久久久久| 欧美精品一线| 欧美激情精品久久久久久变态| 国产女主播一区二区三区| 亚洲九九九在线观看| 亚洲国产三级网| 久久精品亚洲一区二区| 久久激情视频| 国产精品视频在线观看| 一区二区高清视频| 一本大道久久a久久精品综合| 久久久伊人欧美| 久久午夜电影| 狠狠入ady亚洲精品| 性久久久久久久久久久久| 性欧美8khd高清极品| 国产精品久久久久秋霞鲁丝 | 黑丝一区二区三区| 亚洲尤物在线| 亚洲欧美日韩精品久久亚洲区| 欧美—级高清免费播放| 亚洲国产欧美不卡在线观看| 亚洲国产三级网| 欧美激情一区二区三级高清视频| 亚洲成人在线网| 亚洲日本在线观看| 欧美激情一区二区三区成人| 亚洲国产精品久久久久秋霞不卡| 亚洲精品日韩在线观看| 欧美激情在线免费观看| 日韩亚洲成人av在线| 亚洲午夜精品久久| 国产精品每日更新| 欧美一级在线播放| 蜜臀a∨国产成人精品 | 欧美日韩一二三四五区| 一区二区三区波多野结衣在线观看| 一区二区三区四区五区视频| 欧美视频一区二区三区四区| 在线视频精品一区| 久久精品视频99| 国产精品久久久久7777婷婷| 国产视频亚洲精品| 久久精品国产77777蜜臀| 久久夜精品va视频免费观看| 亚洲国产日韩在线一区模特| 欧美日韩视频在线| 欧美一区二区三区电影在线观看| 久久久欧美精品| 亚洲国产欧美在线| 国产精品第13页| 久久久久高清| 99天天综合性| 久久久久久亚洲精品中文字幕| 亚洲精品护士| 国产精品视频免费一区| 免费美女久久99| 亚洲一区二区在线| 欧美高清hd18日本| 欧美一区二区三区成人| 91久久精品美女| 国产九色精品成人porny| 噜噜噜噜噜久久久久久91| 一区二区三欧美| 欧美国产三区| 久久精品人人做人人爽| 这里只有精品电影| 亚洲第一偷拍| 国产午夜精品久久久| 欧美日韩精品三区| 老妇喷水一区二区三区| 亚洲欧美在线aaa| 亚洲精品视频免费在线观看| 久久亚洲视频| 欧美一区二区三区在线视频 | 欧美日韩三区四区| 久久视频在线看| 午夜精品免费| 一区二区欧美在线观看| 亚洲精品免费在线| 欧美1区2区| 免费成人小视频| 久久精品一区二区三区四区| 午夜精品偷拍| 亚洲网友自拍| 亚洲图片你懂的| 99视频超级精品| 亚洲乱码国产乱码精品精| 亚洲国产第一页| 永久555www成人免费| 国模精品一区二区三区色天香| 国产精品久久久久久久7电影 | 亚洲综合视频1区| 在线亚洲精品| 亚洲视频一区二区| 一区二区欧美在线观看| av成人老司机| 999亚洲国产精| 99精品99久久久久久宅男| 亚洲免费av电影| 99re6这里只有精品| 日韩视频中午一区| 日韩视频在线观看一区二区| 亚洲免费大片| 一区二区激情| 午夜精品一区二区三区在线 | 欧美国产日韩亚洲一区| 亚洲承认在线| 91久久国产综合久久| 日韩视频―中文字幕| 亚洲视频在线看| 午夜伦理片一区| 玖玖玖免费嫩草在线影院一区| 老司机一区二区三区| 欧美国产精品中文字幕| 欧美天天视频| 久久综合色8888| 欧美成人小视频| 99精品久久久| 亚洲男人的天堂在线aⅴ视频| 午夜一区不卡| 麻豆freexxxx性91精品| 欧美理论大片| 国产欧美日韩精品丝袜高跟鞋| 国产深夜精品| 亚洲精品一区二区网址 | 雨宫琴音一区二区在线| 99re成人精品视频| 亚洲一区二区三区777| 久久噜噜亚洲综合| 亚洲啪啪91| 性亚洲最疯狂xxxx高清| 蘑菇福利视频一区播放| 国产精品日韩精品欧美精品| 亚洲大片精品永久免费| 正在播放亚洲一区| 久久久久看片| 日韩亚洲欧美中文三级| 久久久久国产精品厨房| 欧美性事在线| 在线电影国产精品| 香蕉尹人综合在线观看| 欧美电影专区| 欧美一区91| 欧美日韩色婷婷| 亚洲国产高清一区二区三区| 亚洲欧美乱综合| 亚洲国产一二三| 久久久久久久97| 国产精品一区在线观看你懂的| 亚洲精品在线看| 久久综合中文色婷婷| 中文国产成人精品| 欧美国产丝袜视频| 在线成人中文字幕| 久久久久久**毛片大全|