Как найти начало и конец локального хранилища потока? - PullRequest
2 голосов
/ 05 декабря 2008

Как в Windows и Linux по заданному дескриптору потока я могу определить начало и конец соответствующего блока локального хранилища статического потока?

Ответы [ 3 ]

4 голосов
/ 06 декабря 2008

Вы можете найти эту информацию в Информационном блоке темы . Тем не менее, обратите внимание, что при этом происходит доступ к недокументированным структурам, и, таким образом, очень непереносим и может сломаться в будущей версии Windows . Похоже, что вы можете получить текущую нить для локального хранилища потоков из TIB; Я не уверен, кто вы получите TLS другого потока.

Вы можете попробовать копаться в блоке среды процесса (PEB) со смещением 0x30 в TIB, но, опять же, вы имеете дело с недокументированными структурами, которые могут быть изменены.

2 голосов
/ 06 декабря 2008

Информационный блок потока Windows дает адрес массива локального хранилища потока в FS: 0x2C, который является массивом указателей на TLS для каждого модуля. Проблема заключается в том, что нет указаний на то, насколько велик этот массив или насколько велики каждый из блоков данных модуля TLS.

1 голос
/ 05 декабря 2008

См. MSDN для получения дополнительной информации о различных функциях, связанных с локальным хранением потока. Вы можете использовать TlsGetValue () , чтобы получить конкретное значение TLS; не копайтесь в памяти, даже если это работает - вы просто вызываете неопределенное поведение, которое работает, но может произойти сбой в будущих версиях Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...