繁体   English   中英

typedef c ++的编译器错误

[英]Compiler errors with typedef c++

我目前正在努力将来自各种漏洞利用数据库文件的 ntdll 函数的一些声明结合在一起,以创建一个键盘记录器(教育)。 我试着在这里和一般的网络上搜索。 我找不到任何与我可以理解如何使用它来解决我的问题相似的东西。 如果有重复,我很抱歉,我找不到任何相关的内容。

我把这些放在一个头文件中,当我试图编译它们时,我得到了与头中 typedefs 相关的各种错误,我收到了提到 decltype 的错误消息,我承认我似乎根本无法理解它. 我从来没有真正弄乱过头文件或 decltype,我四处搜索,但仍然无法真正理解它。 出现以下错误:

typedef (NTSTATUS) (WINAPI *LPFUN_NtCreateThreadEx)
(
    OUT PHANDLE hThread,
    IN ACCESS_MASK DesiredAccess,
    IN LPVOID ObjectAttributes,
    IN HANDLE ProcessHandle,
    IN LPTHREAD_START_ROUTINE lpStartAddress,
    IN LPVOID lpParameter,
    IN BOOL CreateSuspended,
    IN DWORD StackZeroBits,
    IN DWORD SizeOfStackCommit,
    IN DWORD SizeOfStackReserve,
    OUT LPVOID lpBytesBuffer
);

typedef NTSTATUS(NTAPI *lNtAllocVirtMem)(
    IN  HANDLE  ProcessHandle,
    IN  PVOID   *BaseAddress,
    IN  PULONG  ZeroBits,
    IN  PSIZE_T RegionSize,
    IN  ULONG   AllocationType,
    IN  ULONG   Protect
);

main.cpp 中的另一个错误是:(抱歉排长了)

lNtAllocVirtMem pNtAllocateVirtualMemory=(lNtAllocVirtMem)GetProcAddress(LoadLibaryA("ntdll.dll"),"NtAllocateVirtualMemory");

我的错误是(我得到了两个):

error: expected primary-expression before '__attribute__'
error: typedef 'NTSTATUS' is initialized (use decltype instead)

我想知道如何解决这些问题(因为我计划添加更多内容),更重要的是,我如何确保我不会从这里得到这些?

NTSTATUS类型在 Windows SDK 头文件Winternl.h 中定义

typedef _Return_type_success_(return >= 0) LONG NTSTATUS;

您需要包含该头文件,而不是尝试自己定义NTSTATUS SDK 提供的定义在两个方面有所不同: 1它包含允许您运行静态代码分析的 SAL 注释。 2它提供正确的别名,与平台无关。 在 x86 和 x64 平台上,它应该是一个 32 位整数值。 long可能比这更长。

答案非常简单。 我在标题中添加了:

typedef long NTSTATUS;

它似乎已正确编译,根据我的理解,其中一个功能运行良好。 我感谢那些帮助我进行正确思考过程和正确方向的人 TON :)。

编辑:通过使用视觉工作室,我可以访问 Winternl.h,其中正确定义了 NTSTATUS,我的原始答案不是解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM