检索 PEB 地址 windows api

问题描述 投票:0回答:1

嘿,我需要检索当前线程的 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)失败。

我的问题是为什么第一种方法失败了。 提前谢谢你。

c++ c assembly winapi x86
1个回答
1
投票

我看到至少有 3 个不同的原因导致您的第一种方法不起作用:

  1. 它的指针间接层太少了。
  2. 您正在使用段选择器的值,就好像它是段基地址一样。
  3. 你只应该得到挂起线程的上下文。
© www.soinside.com 2019 - 2024. All rights reserved.