嘿,我需要检索当前线程的 PEB 地址,所以我尝试了两种不同的方法: 第一:
CONTEXT context;
memset(&context, 0, sizeof(CONTEXT));
context.ContextFlags = CONTEXT_FULL;
// Get the context of the current thread
GetThreadContext(GetCurrentThread(), &context);
unsigned long offset = 0x30;
PEB *pPEB = (PEB *)(context.SegFs + offset); // fs[0x30]
第二:
PEB *pPEB = (PEB *)__readfsdword(0x30);
第二种方法(使用 readfsdword)有效,第一种方法(使用 CONTEXT)失败。
我的问题是为什么第一种方法失败了。 提前谢谢你。
我看到至少有 3 个不同的原因导致您的第一种方法不起作用: