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;
}