私は現在、さまざまなexploit-dbファイルからntdll関数のいくつかの宣言を組み合わせて、キーロガーを作成しています(教育的に)。 ここでは一般的なウェブを検索してみました。私は問題を解決するためにそれを使用する方法を理解できるところに似た何かを見つけることができませんでした。私は重複がある場合は謝罪する、私は何か関連するものを見つけることができませんでした。typedefのコンパイラエラー
これらをヘッダファイルに入れてコンパイルしようとすると、ヘッダ内の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)
私はこれらの問題を解決する方法を知りたいと思っています(さらに追加する予定です)。もっと重要なことは、どうすればこれらの問題を解決することができますか?
あなたはgccでコンパイルしていますか?これはコンパイラ固有のコードなので、適切な使い方でコンパイラの仕様を調べなければならないでしょう。 – Nonanon
Googleの検索によると、基本的にNTSTATUSは[long longのためのマイクロソフト](https://msdn.microsoft.com/en-us/library/cc230357.aspx)です。したがってtypedefは意味をなさない。 typedefを使用して、エイリアスするものが何であるかははっきりしません。 'NTSTATUS'が関数からの戻り値であれば、それは括弧で囲まれてはいけません。より多くのグーグルが「WINAPI」は「__stdcall」のためのマイクロソフトであることを明らかにしている(https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v = vs.85).aspx) - コンパイラ特定のキーワード。 '*'の前後にする必要があるかどうかは不明です。 –
@ノナノン私はgccバージョン4.9でMingwを使用しています – Semaphore