typedef c++的编译器错误

Compiler errors with typedef c++

本文关键字:错误 编译器 c++ typedef      更新时间:2023-10-16

我目前正在将各种漏洞数据库文件中的ntdll函数的一些声明网格化,以便创建一个键盘记录程序(从教育角度(。我试着在这里和普通网站上搜索。我找不到任何类似的东西,我可以理解如何使用它来解决我的问题。如果有重复的,我很抱歉,我找不到任何相关的东西。

我把它们放在一个头文件中,当试图编译它们时,我会得到与头中的typedef相关的各种错误,我会收到提到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头文件wintnl.h:中定义

typedef _Return_type_success_(return >= 0) LONG NTSTATUS;

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

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

typedef long NTSTATUS;

它似乎编译正确,据我所知,其中一个函数运行良好。我感谢那些帮助我进行正确思考并朝着正确方向前进的人(TON:(。

编辑:通过使用visualstudios,我可以访问wintnl.h,在那里NTSTATUS是正确定义的,我最初的答案不是解决方案。