簡體   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