我想使用ProcessHacker项目中列出的一些未记录的符号。取自此处:

https://github.com/processhacker/processhacker/blob/master/phnt/include/ntpebteb.h#L241
https://github.com/processhacker /processhacker/blob/master/phnt/include/ntrtl.h#L7156

但是,我不知道它们属于哪个dll ...

在项目中自述页面,据说我只需要最新的Windows SDK,但编译后得到:

Severity    Code    Description Project File    Line    Suppression State

Error   LNK2019 unresolved external symbol "__declspec(dllimport) struct 
_TEB_ACTIVE_FRAME * __cdecl RtlGetFrame(void)" (__imp_?
RtlGetFrame@@YAPEAU_TEB_ACTIVE_FRAME@@XZ) referenced in function "public: static
 struct _TEB_ACTIVE_FRAME * __cdecl _RTL_FRAME::get(struct 
_TEB_ACTIVE_FRAME_CONTEXT const *)" (?
get@_RTL_FRAME@@SAPEAU_TEB_ACTIVE_FRAME@@PEBU_TEB_ACTIVE_FRAME_CONTEXT@@@Z) 
TestReentrancy  C:\projects.3\unit_tests\InjectionTest\Project1\main.obj  1   



也许任何人都可以告诉我如何调整项目配置以使这行得通 ?谢谢!

#1 楼

这些功能是从ntdll.dll文件导出的。要链接这些功能,请在源文件中添加#pragma comment (lib, "ntdll.lib")。或在Visual Studio中,首先检查活动的“配置和平台”。然后在“项目”>“属性”>“链接器”>“输入”>“其他依赖项”中添加库。例如,像这样%(AdditionalDependencies); ntdll.lib。对于mingw,cygwin,msys2等工具链(使用GCC的工具链),请在命令中使用-lntdll选项。

也可以直接在源代码中编写功能,而无需从ntdll导入功能。这些功能使用线程信息块(TEB)中的成员,如下所示:



PTEB_ACTIVE_FRAME RtlGetFrame()
{
    return NtCurrentTeb()->ActiveFrame;
}

void RtlPushFrame(PTEB_ACTIVE_FRAME Frame)
{
    struct _TEB *Teb;

    Teb = NtCurrentTeb();
    Frame->Previous = Teb->ActiveFrame;
    Teb->ActiveFrame = Frame;
}

void RtlPopFrame(PTEB_ACTIVE_FRAME Frame)
{
NtCurrentTeb()->ActiveFrame = Frame->Previous;
}