C++ typedef c++;
我目前正致力于从各种漏洞数据库文件中将ntdll函数的一些声明组合在一起,以便创建一个键盘记录器(从教育角度)。 我试着在这里搜索,在普通网络上搜索。我找不到任何足够类似的东西,我可以理解如何使用它来解决我的问题。很抱歉,如果有重复的,我找不到任何相关的 我把它们放在一个头文件中,当我试图编译它们时,我得到了与头文件中的typedef相关的各种错误,我得到了关于decltype的错误消息,我承认我似乎根本无法理解它。我从来没有真正弄乱过标题或decltype,我到处搜索,但仍然不能真正理解它。出现以下错误:C++ typedef c++;,c++,winapi,dll,header,C++,Winapi,Dll,Header,我目前正致力于从各种漏洞数据库文件中将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中的另一个错误是:(很抱歉线路太长)
我的错误是(我得到两个的两倍):
我想知道如何解决这些问题(因为我计划添加更多),更重要的是,我如何确保我不会从这里得到这些问题 答案非常简单。在我添加的标题中:
typedef long NTSTATUS;
它似乎编译正确,据我所知,其中一个函数运行良好。我感谢那些帮助我走上正确的思维过程和正确的方向的人:)
编辑:
通过使用visualstudios,我可以访问winternl.h,在那里正确定义了NTSTATUS,我最初的答案不是解决方案 类型
NTSTATUS
在Windows SDK头文件winternl.h中定义:
您需要包含该头文件,而不是自己定义
NTSTATUS
。SDK提供的定义在两个方面有所不同:1
它包含允许您运行静态代码分析的SAL注释<代码>2它提供正确的别名,与平台无关。在x86和x64平台上,它都应该是32位整数值<代码>长可能比这个长。您是在gcc中编译的吗?这是特定于编译器的代码,因此您可能必须在正确使用编译器时查找规范。谷歌搜索显示,基本上,NTSTATUS
是。因此,typedef毫无意义。使用typedef,不清楚您到底想要别名什么。如果NTSTATUS
是函数的返回值,则不应在括号中。更多的谷歌搜索揭示了WINAPI
——编译器特有的关键字。不清楚它是否需要在*
@Nonanon之前或之后。我正在使用带有gcc版本4的Mingw。9@SamVarshavchik老实说,我不知道我在谷歌上搜索的东西是否会给出好的答案,所以请跟我说。我也不确定代码到底是什么,只是它们在源代码中,而不是标题中。我可能和你一样困惑:(公平地说,这对我来说并不像一个有效的C++代码,即使在对前面提到的MySoSt.To的允许之后,也不需要。你需要包括定义NtStand的文件。你是正确的,我编辑了我的声明,包括了为我工作的,并正常工作。谢谢,程序一旦我添加了那个定义,那么我就工作了。我不认为我需要添加任何其他内容,我会立即更改。好的,我正在使用Netbeans与Mingw,winternl.h无法导入,有什么建议吗?@JayM:我不知道,什么“winternl.h无法导入”应该是指。包含了头文件。如果没有更好的问题说明,就没有什么帮助了。头文件无法包含,看起来不在那里。我不确定我还可以提供哪些信息,我正在用谷歌搜索。我似乎找不到它。winternl.h是Windows SDK的一部分。请确保已经正确安装了SDK,并建立了构建环境。MinGW被称为薄片。如果可以,请考虑使用具有官方支持的构建环境(例如)。
error: expected primary-expression before '__attribute__'
error: typedef 'NTSTATUS' is initialized (use decltype instead)
typedef long NTSTATUS;
typedef _Return_type_success_(return >= 0) LONG NTSTATUS;