[英]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.