eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 10 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме:
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Подключить TlsCallback
Посл.ответ Сообщение

Ранг: 98.5 (постоянный)
Статус: Участник

Создано: 21 мая 2015 17:19 New!
Цитата · Личное сообщение · #1

Хотелось бы в своей программе на Си подключить TlsCallback функцию.
Очевидна цель: запуск этой функции до выхода на ОЕР основной программы.
Возможно, подобный вопрос уже рассматривался на форуме, но я не смог найти.
Не смог найти что-то подходящее и в Интернете.
Может кто-нибудь что-то скажет в этой связи?


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 21 мая 2015 17:31 New!
Цитата · Личное сообщение · #2

после OEP но до main хватит? тогда достаточно будет банального статического объекта


Ранг: 515.2 (!)
Статус: Участник
Победитель турнира 2010

Создано: 21 мая 2015 17:35 · Поправил: 21 мая 2015 17:37 OKOB New!
Цитата · Личное сообщение · #3

должно помочь --> Thread Local Storage - The C++ Way <--
--> Detect debugger with TLS callback <--

| Сообщение посчитали полезным: ksol, plutos


Ранг: 98.5 (постоянный)
Статус: Участник

Создано: 21 мая 2015 18:14 New!
Цитата · Личное сообщение · #4

reversecode: Нужен запуск этой функции системным загрузчиком
ОКОВ:Спасибо за ссылку - посмотрю.

Ранг: 98.5 (постоянный)
Статус: Участник

Создано: 22 мая 2015 17:40 New!
Цитата · Личное сообщение · #5

Нет, не работает код ни по 1-й. ни по 2-й ссылок. MSVC++ никак не реагирует на этот код!
Ниже привожу этот код. Код от 1-й ссылки взят в комменты.
Code:
  1. VOID WINAPI on_tls_func(
  2.   PVOID DllHandle, DWORD Reason, PVOID Reserved)
  3. {
  4.  if(Reason == DLL_PROCESS_DETACH)
  5.   MessageBox(NULL, "in Callback function",
  6.    "Callback", MB_OK);
  7. /*
  8. #pragma data_seg(".CRT$XLB")
  9.  PIMAGE_TLS_CALLBACK p_thread_callback = on_tls_func;
  10. #pragma data_seg() */
  11. #pragma comment(linker,"/include: __tls_used"
  12. #pragma section(".CRT$XLB",read)
  13.  __declspec(allocate(".CRT$XLB")) PIMAGE_TLS_CALLBACK CallbackAddress[] = {on_tls_func,NULL};

Ранг: 53.9 (постоянный)
Статус: Участник

Создано: 23 мая 2015 19:14 New!
Цитата · Личное сообщение · #6

Вот вам мой работающий пример х86/х64
Code:
  1. #include <windows.h>
  2.  
  3. void NTAPI TLSEntry(PVOID DllHandle, DWORD dwReason, PVOID)
  4. {
  5.          if (dwReason == DLL_THREAD_ATTACH)
  6.          {
  7.                  MessageBox(0, L"DLL_THREAD_ATTACH", L"DLL_THREAD_ATTACH", 0);
  8.          }
  9.  
  10.          if (dwReason == DLL_PROCESS_ATTACH)
  11.          {
  12.                  MessageBox(0, L"DLL_PROCESS_ATTACH", L"DLL_PROCESS_ATTACH", 0);
  13.          }
  14. }
  15.  
  16. #ifdef _WIN64
  17. #pragma comment (linker, "/INCLUDE:_tls_used")
  18. #pragma comment (linker, "/INCLUDE:tls_callback")
  19. #else
  20. #pragma comment (linker, "/INCLUDE:__tls_used")
  21. #pragma comment (linker, "/INCLUDE:_tls_callback")
  22. #endif
  23.  
  24. #ifdef _WIN64
  25. #pragma const_seg(".CRT$XLF")
  26. EXTERN_C const
  27. #else
  28. #pragma data_seg(".CRT$XLF")
  29. EXTERN_C
  30. #endif
  31. PIMAGE_TLS_CALLBACK tls_callback = TLSEntry;
  32. #ifdef _WIN64
  33. #pragma const_seg()
  34. #else
  35. #pragma data_seg()
  36. #endif //_WIN64
  37.  
  38. DWORD WINAPI ThreadProc(CONST LPVOID lpParam) 
  39. {
  40.          ExitThread(0);
  41. }
  42.  
  43.  
  44. int main(void)
  45. {
  46.          MessageBox(0, L"hello from main", L"main", 0);
  47.          CreateThread(NULL, 0, &ThreadProc, 0, 0, NULL);
  48.          return 0;
  49. }


Ранг: 110.0 (ветеран)
Статус: Участник

Создано: 23 мая 2015 22:42 · Поправил: 23 мая 2015 23:57 Rainbow New!
Цитата · Личное сообщение · #7

ну в масме так: просто паблик для компиля.

TLS_DIRECTORY STRUCT
lpTlsDataStart DWORD ?
lpTlsDataEnd DWORD ?
lpTlsIndex DWORD ?
lpTlsCallbacks DWORD ?
ZeroFillSize DWORD ?
Characteristic DWORD ?
TLS_DIRECTORY ENDS

PUBLIC _tls_used
_tls_used TLS_DIRECTORY <?, ?, tls_index, tls_callbacks, ?, ?>

Ранг: 98.5 (постоянный)
Статус: Участник

Создано: 24 мая 2015 16:30 New!
Цитата · Личное сообщение · #8

Спасибо deniskore и Rainbow!
Я тоже получил - всё работает. Вот моя настройка -
вставляется между функциями callback и main:

Code:
  1. #pragma comment(linker,"/INCLUDE:__tls_used");
  2. #pragma section(".CRT$XLY",long,read)
  3. extern "C" __declspec(allocate(".CRT$XLY"))
  4.     PIMAGE_TLS_CALLBACK _x1_y = on_tls_func;


Ранг: 391.4 (мудрец)
Статус: Участник
_Вечный_Студент_

Создано: 3 июня 2015 20:28 · Поправил: 3 июня 2015 20:29 plutos New!
Цитата · Личное сообщение · #9

Может кому пригодится.
В статье приводится не только простой пример кода, но и детально разобраны все "внутренние аспекты" TLS.
http://resources.infosecinstitute.com/debugging-tls-callbacks/

| Сообщение посчитали полезным: ksol


Ранг: 98.5 (постоянный)
Статус: Участник

Создано: 10 июня 2015 17:20 New!
Цитата · Личное сообщение · #10

Да, хорошая статья. Для начала знакомства с TLS - то что надо.


Ранг: 391.4 (мудрец)
Статус: Участник
_Вечный_Студент_

Создано: 10 июня 2015 18:05 New!
Цитата · Личное сообщение · #11

ksol пишет:
Да, хорошая статья. Для начала знакомства с TLS - то что надо.



Ну если понравилась та статья, то вот еще цикл статей (точнее одна, разбита на 8 частей) от Nynaeve.
http://www.nynaeve.net/?p=190

На мой взгляд, одна из лучших, если не лучшая

Ранг: 98.5 (постоянный)
Статус: Участник

Создано: 11 июня 2015 17:34 New!
Цитата · Личное сообщение · #12

Ну там в основном TLS API и совсем не затрагивается TLS Callback.
Так что из ваших 2-х ссылок прямо к данной теме форума относится 1-я.


Ранг: 391.4 (мудрец)
Статус: Участник
_Вечный_Студент_

Создано: 11 июня 2015 18:09 · Поправил: 12 июня 2015 21:03 plutos New!
Цитата · Личное сообщение · #13

ksol пишет:
Ну там в основном TLS API и совсем не затрагивается TLS Callback.


Товарищ, вы всю статью прочли до конца внимательно?
Дело ваше: нравится - читайте, не нравится - не читайте, но только не нужно глупости писать.
 eXeL@B —› Программирование —› Подключить TlsCallback
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS