线程本地存储(TLS)包含线程的静态或全局值。当内存位置不是静态的时,这些值对于找到可靠的内存结构参考非常重要。

我想获取另一个进程的线程本地存储。

TLS应该位于线程信息块(TIB)中的[FS:0x2C]。虽然我不太了解FS寄存器的工作原理。我想我必须先找到TIB基址?我想我可以在WINAPI GetThreadContext获得的线程上下文中找到它,但是我有点不知所措。

评论

您是否正在寻找在同一过程中访问它的方法?不同的过程?弄清您的情况以及您实际需要做什么。

我尝试将其用于其他过程。我将更新我的问题以进行澄清。

#1 楼

您需要使用GetThreadSelectorEntry()

伪代码:

GetThreadContext(hThread, &context);
GetThreadSelectorEntry(hThread, context.SegFs, &selectorEntry);
ReadProcessMemory(hProcess, (selectorEntry.BaseLow | (selectorEntry.HighWord.Bytes.BaseMid << 0x10) | (selectorEntry.HighWord.Bytes.BaseHi << 0x18)) + 0x2C, &pTLS, sizeof(pTLS), &numberOfBytesRead);


您可以在此处看到GetProcessEntryPointAddress()函数,了解一些类似功能的示例代码。 br />

评论


谢谢,它的工作就像一个魅力:)我不知道GetThreadSelectorEntry()

– Samuirai
2013年12月7日20:00