【问题标题】:VS linker can't find PsGetProcessWow64ProcessVS 链接器找不到 PsGetProcessWow64Process
【发布时间】:2020-09-11 08:56:57
【问题描述】:

我正在尝试在 VS 中编译一个驱动程序,但它显示 -

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol __imp__PsGetProcessWow64Process@4 referenced in function _GetProcessModule@8 Garhal  C:\Users\Raitis\source\repos\GarHal_CSGO\Garhal\memory.obj  1   

很快,我找到了一个使用PsGetProcessWow64Processhttps://prnt.sc/uffavf的地方

但它是定义的,甚至是官方的ntos.h函数。只需按 F12 即可轻松找到它 - https://prnt.sc/uffbjg

错误列表截图 - https://prnt.sc/uffc6t

【问题讨论】:

  • 你应该寻求 github 支持,而不是在 stackoverflow 上发布。

标签: c visual-studio linker wdk


【解决方案1】:

问题是 this 在未记录的函数中,并且链接器很难找到在生成的二进制文件中放置指向它的指针的函数的位置,因此首先在 ntddk.h 之前包含 ntifs.h 像这样

#include <ntifs.h>
#include <ntddk.h>

必须在 ntddk 之前,否则会出现奇怪的错误

然后添加这一行:

NTKERNELAPI PVOID PsGetProcessWow64Process(__in PEPROCESS Process);

这是函数的签名,现在您可以调用该函数了


获取它的另一种方法是使用函数指针并在运行时解析它

#include <ntddk.h>

typedef struct _PEB32 { 
    UCHAR InheritedAddressSpace; 
    UCHAR ReadImageFileExecOptions; 
    UCHAR BeingDebugged; 
    UCHAR Spare; 
    ULONG Mutant; 
    ULONG ImageBaseAddress; 
    ULONG/*PPEB_LDR_DATA32*/ Ldr; 
} PEB32, *PPEB32; 

typedef PPEB32 (NTAPI * pfn_PsGetProcessWow64Process) (PEPROCESS Process);
pfn_PsGetProcessWow64Process PsGetProcessWow64Process = NULL; 
RtlInitUnicodeString (&usFunctionName, L"PsGetProcessWow64Process"); 
PsGetProcessWow64Process = (pfn_PsGetProcessWow64Process) (SIZE_T)MmGetSystemRoutineAddress (&usFunctionName); 
pPEB32 = PsGetProcessWow64Process (pEProcess); 

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多