我想在汇编程序中使用 ES、FS 和 GS,以允许我拥有 3 个独立的地址空间。
是否有Win32 API可以设置LDT并给我适当的选择器的值?
我想在汇编程序中使用 ES、FS 和 GS,以允许我拥有 3 个独立的地址空间。
是否有Win32 API可以设置LDT并给我适当的选择器的值?
答案是:是的,但是。
您想要的 API 实际上在 NT 内核中,称为 NtSetLdtEntries。它没有标题。没有任何文档。存根位于 ntdll.lib 中,它不是 SDK 的一部分。你必须像我做的那样在逆向工程站点中摸索并手动绑定东西,直到我可以让它工作。
还有更糟的。您不能使用 GS,因为 Windows 在内部使用它;每当您进行系统调用时,它都会将其任意设置为 0(我认为它也可能在中断时将其随机设置为 0)。如果您尝试使用 GS 调试程序,Windows 将在断点处将其设置为 0!
ES和FS都不错。我认为。
这是我编写的一个未记录的文件,它使用了所有这些东西。如果你足够勇敢,你或许能够从中提取足够的信息来做一些有用的事情。祝你好运...