Есть ли API для Win32, который позволит мне использовать ES, GS, FS? - PullRequest
1 голос
/ 12 февраля 2012

Я хотел бы использовать ES, FS и GS в ассемблерной программе, чтобы у меня было 3 отдельных адресных пространства.

Существует ли Win32 API, который настроит LDT и выдаст значения для соответствующих селекторов?

1 Ответ

2 голосов
/ 12 февраля 2012

Ответ: да, но.

API, который вы хотите, фактически находится в ядре NT и называется NtSetLdtEntries. Там нет заголовка для этого. Там нет никакой документации для этого. Заглушки находятся в ntdll.lib, который не является частью SDK. Вы должны сделать то, что я сделал, и перемещаться по сайтам обратного инжиниринга и вручную связывать вещи, пока я не смогу заставить это работать.

Там хуже. Вы не можете использовать GS, поскольку Windows использует его внутри; всякий раз, когда вы делаете системный вызов, он произвольно устанавливает его в 0 (и я думаю может также случайно установить его в 0 при прерываниях). Если вы попытаетесь отладить программу с помощью GS, Windows установит ее на 0 в точках останова!

ES и FS в порядке. Я думаю.

Вот недокументированный файл, который я написал, который использует все это. Если вы смелы, вы можете извлечь из нее достаточно информации, чтобы сделать что-то полезное. Удачи ...

http://lbw.git.sourceforge.net/git/gitweb.cgi?p=lbw/lbw;a=blob;f=src/syscalls/thread.cc;hb=a3b44871bd89009e644894431cbc6534fe033369

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