【发布时间】:2013-05-05 09:10:53
【问题描述】:
我想访问一个衍生进程的 TIB(我使用 CreateProcessW 成功创建了该进程)。
我通过以下方式获得了指向衍生进程的 TIB 的指针:
- GetThreadContext(当然要设置权限)
- 访问 pContext.SegFs
- 像这样格式化这个值:
(ldtSel.HighWord.Bits.BaseHi << 24 ) | ( ldtSel.HighWord.Bits.BaseMid << 16 ) | ( ldtSel.BaseLow );(我不认为这是必要的)。
格式化后我剩下的值是一个 10 位的指针。
如何使用这个变量代替 fs 寄存器来访问线程信息块? 我访问它的传统方式通常是这样的:
__asm
{
mov eax, fs:[0x30] // PEB
mov dwPebBase, eax
}
但是,用指针变量替换“fs”当然是行不通的,去掉分号会产生意想不到的结果。 那么如何通过这个指针值访问 TIB 的成员,我觉得好像我正在访问不应该访问的内存(或无论如何尝试:P)。
感谢您的帮助。
【问题讨论】:
-
TIB 位于另一个进程的地址空间中,恐怕您无法从父进程访问它(但也许
ReadProcessMemory可能会有所帮助)。 -
您需要使用
ReadProcessMemory。但与其跳入如何:为什么要从子进程中读取 TIB? (记住进程中可能有多个线程。) -
好的,谢谢,ReadProcessMemory 似乎是要走的路。我需要通过 PEB 访问 LDR_MODULE,并访问 LIST_ENTRY InLoadOrderModuleList 并爬取列表。无法正常访问线程的TIB。
标签: c++ c windows multithreading winapi