gpt4 book ai didi

c++ - 通过 FS 寄存器访问衍生进程的 TIB?

转载 作者:可可西里 更新时间:2023-11-01 11:19:59 26 4
gpt4 key购买 nike

我想访问衍生进程的 TIB(我使用 CreateProcessW 成功创建了进程)。

我通过以下方式获得了指向生成进程的 TIB 的指针:

  • GetThreadContext(当然有权限设置)
  • 访问 pContext.SegFs
  • 像这样格式化这个值:(ldtSel.HighWord.Bits.BaseHi << 24 ) | ( ldtSel.HighWord.Bits.BaseMid << 16 ) | ( ldtSel.BaseLow ); (我不认为这是必要的)。

格式后我剩下的值是一个 10 位指针。

我如何使用这个变量代替 fs 寄存器来访问线程信息 block ?我访问它的常规方式通常是这样的:

 __asm 
{
mov eax, fs:[0x30] // PEB
mov dwPebBase, eax
}

不过,用指针变量替换“fs”当然不行,去掉分号还有意想不到的效果。那么我如何通过这个指针值访问 TIB 的成员,我觉得我正在访问不应该被访问的内存(或者无论如何都试图访问 :P)。

谢谢你的帮助。

最佳答案

您为此采取了错误的方法。使用 NtQueryInformationProcess() 而不是 GetThreadContext() 来访问衍生进程的 PEB,例如:

PROCESS_INFORMATION pi = {0};
...
PROCESS_BASIC_INFORMATION pbi = {0};
ULONG pbi_len = 0;
if (NtQueryInformationProcess(pi.hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), &pbi_len) >= 0)
{
if (pbi.PebBaseAddress)
{
PEB peb = {0};
SIZE_T peb_len = 0;
if (ReadProcessMemory(pi.hProcess, pbi.PebBaseAddress, &peb, sizeof(peb), &peb_len))
{
// use peb as needed...
}
}
}

有关详细信息,请参阅以下文章:

Get Process Info with NtQueryInformationProcess

关于c++ - 通过 FS 寄存器访问衍生进程的 TIB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com