Доступ к TIB в Win32 - PullRequest
       0

Доступ к TIB в Win32

2 голосов
/ 01 апреля 2012

Внедрение в реализацию функций Win32 API, которые работают с TIB, таких как:

  • Функции доступа TLS: TlsAlloc, TlsFree, TlsSetValue, TlsGetValue
  • GetLastError, SetLastError
  • подсистема обмена сообщениями: GetMessage, PeekMessage и т. Д.

каждый обнаруживает, что все они получают доступ к TIB (иногдаTEB), читая содержимое селектора fs:[0x18].

OTOH в этом нет необходимости, поскольку fs регистр напрямую указывает на него.Согласно этой статье и тому, что я вижу на практике, регистр fs содержит адрес начала структуры TIB, тогда как со смещением 0x18 он имеет указатель на себя.

Тем не менее, что может быть причиной косвенного доступа к TIB?

1 Ответ

3 голосов
/ 01 апреля 2012

Любая инструкция, использующая FS, требует переопределения, которое добавляет к инструкции байт (и, как правило, вообще требует использования языка ассемблера). Указатель на FS:18 (по крайней мере, если память работает правильно) основан на DS, поэтому его можно использовать без переопределения, сохраняя байт, когда он используется, и (что наиболее важно для многих людей) можно использовать напрямую от языка более высокого уровня, такого как C или C ++, вместо использования языка ассемблера.

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