我正在努力将来自各种exploit-db文件的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)
我想知道如何解决这些问题(因为我计划增加更多),更重要的是,我怎样才能确保我不会从这里得到这些?
答案 0 :(得分:0)
类型NTSTATUS
在Windows SDK头文件 winternl.h 中定义:
typedef _Return_type_success_(return >= 0) LONG NTSTATUS;
您需要包含该头文件,而不是尝试自己定义NTSTATUS
。 SDK提供的定义有两种不同的方式:1
它包含SAL注释,允许您运行静态代码分析。 2
它提供了正确的别名,无论平台如何。它应该是x86和x64平台上的32位整数值。 long
可能比此长。