Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Ищу исходники хитрого PE упаковщика


Автор: nic1986 23.1.2011, 21:09
Пытаюсь найти сорцы упаковщика поддерживающего файлы со статическим TLS.И меня уже начинают одолевать мысли что такого в паблике просто нету  smile 
Йоду не предлогать,он несправился даже с таким:
Код

__declspec( thread ) int tls_i=1; 
__declspec( thread ) char tls_char[25]="Hello World";
typedef PTEB (NTAPI *_NtCurrentTeb)(); 
DWORD WINAPI Thr(LPVOID lParam)
{
    for(int i=0;i<tls_i;i++)
    {
        MessageBoxA(0,tls_char,"",MB_OK);
    }
    printf("data site VA: %d\n",(DWORD)tls_char);
    DWORD selfBase=(DWORD)GetModuleHandle(NULL);
    DWORD toNT=( (IMAGE_DOS_HEADER*)selfBase)->e_lfanew;
    IMAGE_NT_HEADERS *ntH=(IMAGE_NT_HEADERS*)(selfBase+toNT);
    IMAGE_TLS_DIRECTORY *itd=(IMAGE_TLS_DIRECTORY*)(ntH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS].VirtualAddress+selfBase);
    printf("itd->StartAddressOfRawData: %d\nitd->EndAddressOfRawData: %d\n",itd->StartAddressOfRawData,itd->EndAddressOfRawData);
    HMODULE lib=LoadLibraryA("ntdll.dll");
    _NtCurrentTeb NtCurrentTeb=(_NtCurrentTeb)GetProcAddress(lib,"NtCurrentTeb");
    TEB *teb=NtCurrentTeb();
    printf("TlsSlots:\n");
    for(DWORD i=0;i<63;i++)
    {
        if(teb->TlsSlots[i]!=NULL){printf("Index :%d:%s\n",i,(char*)teb->TlsSlots[i]);}
    }
    printf("TlsGetValue:\n");
    for(DWORD i=0;i<1023;i++)
    {
        if(TlsGetValue(i)!=NULL)
        {
            printf("Index: %d:%s\n",i,(char*)TlsGetValue(i));
        }
    }
    DWORD cell=TlsAlloc();
    TlsSetValue(cell,tls_char);
    printf("%s",(char*)teb->TlsSlots[cell]);
    return(0);
}
int _tmain(int argc, _TCHAR* argv[])
{
    CreateThread(0,0,&Thr,0,0,0);
    getch();
    return 0;
}

Автор: 500mhz 16.2.2011, 00:14
UPX не?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)