forked from msfwaifu/t7x
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
114 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,20 @@ | ||
#define WIN32_LEAN_AND_MEAN | ||
#include "Windows.h" | ||
|
||
#define TLS_PAYLOAD_SIZE 0x2000 | ||
thread_local char tls_data[TLS_PAYLOAD_SIZE]; | ||
|
||
__declspec(dllexport) void* get_tls_data() | ||
{ | ||
return &tls_data[0]; | ||
} | ||
|
||
int WINAPI _DllMainCRTStartup(const HMODULE module, const unsigned long reason, void*) | ||
{ | ||
if (reason == DLL_PROCESS_ATTACH) | ||
{ | ||
DisableThreadLibraryCalls(module); | ||
} | ||
|
||
return 1; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/*** | ||
*tlssup.cpp - Thread Local Storage run-time support module | ||
* | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* | ||
*Purpose: | ||
* | ||
****/ | ||
|
||
#undef CRTDLL | ||
#undef MRTDLL | ||
|
||
#pragma section(".CRT$XLA", long, read) // First Loader TLS Callback | ||
#pragma section(".CRT$XLC", long, read) // CRT TLS Constructor | ||
#pragma section(".CRT$XLD", long, read) // CRT TLS Terminator | ||
#pragma section(".CRT$XLZ", long, read) // Last Loader TLS Callback | ||
|
||
#pragma section(".rdata$T", long, read) | ||
|
||
#define _CRTALLOC(x) __declspec(allocate(x)) | ||
|
||
//#include <internal_shared.h> | ||
#include <Windows.h> | ||
|
||
extern "C" { | ||
|
||
/* Thread Local Storage index for this .EXE or .DLL */ | ||
|
||
ULONG _tls_index = 0; | ||
ULONG _tls_array = 0; | ||
|
||
/* Special symbols to mark start and end of Thread Local Storage area. */ | ||
|
||
#pragma data_seg(".tls") | ||
|
||
#if defined(_M_X64) | ||
_CRTALLOC(".tls") | ||
#endif /* defined (_M_X64) */ | ||
char _tls_start = 0; | ||
|
||
#pragma data_seg(".tls$ZZZ") | ||
|
||
#if defined(_M_X64) | ||
_CRTALLOC(".tls$ZZZ") | ||
#endif /* defined (_M_X64) */ | ||
char _tls_end = 0; | ||
|
||
#pragma data_seg() | ||
|
||
/* Start section for TLS callback array examined by the OS loader code. | ||
* If dynamic TLS initialization is used, then a pointer to __dyn_tls_init | ||
* will be placed in .CRT$XLC by inclusion of tlsdyn.obj. This will cause | ||
* the .CRT$XD? array of individual TLS variable initialization callbacks | ||
* to be walked. | ||
*/ | ||
|
||
_CRTALLOC(".CRT$XLA") PIMAGE_TLS_CALLBACK __xl_a = 0; | ||
|
||
/* NULL terminator for TLS callback array. This symbol, __xl_z, is never | ||
* actually referenced anywhere, but it must remain. The OS loader code | ||
* walks the TLS callback array until it finds a NULL pointer, so this makes | ||
* sure the array is properly terminated. | ||
*/ | ||
|
||
_CRTALLOC(".CRT$XLZ") PIMAGE_TLS_CALLBACK __xl_z = 0; | ||
|
||
#ifdef _WIN64 | ||
|
||
_CRTALLOC(".rdata$T") | ||
extern const IMAGE_TLS_DIRECTORY64 _tls_used = { | ||
(ULONGLONG)&_tls_start, // start of tls data | ||
(ULONGLONG)&_tls_end, // end of tls data | ||
(ULONGLONG)&_tls_index, // address of tls_index | ||
(ULONGLONG)(&__xl_a + 1), // pointer to call back array | ||
(ULONG)0, // size of tls zero fill | ||
(ULONG)0 // characteristics | ||
}; | ||
|
||
#else /* _WIN64 */ | ||
|
||
_CRTALLOC(".rdata$T") | ||
extern const IMAGE_TLS_DIRECTORY _tls_used = { | ||
(ULONG)(ULONG_PTR)&_tls_start, // start of tls data | ||
(ULONG)(ULONG_PTR)&_tls_end, // end of tls data | ||
(ULONG)(ULONG_PTR)&_tls_index, // address of tls_index | ||
(ULONG)(ULONG_PTR)(&__xl_a + 1), // pointer to call back array | ||
(ULONG)0, // size of tls zero fill | ||
(ULONG)0 // characteristics | ||
}; | ||
|
||
#endif /* _WIN64 */ | ||
|
||
} // extern "C" |