2016-10-23 6 views
-2

Ich arbeite zur Zeit zusammen einige Deklarationen für Ntdll-Funktionen aus verschiedenen Exploit-DB-Dateien zusammen, um einen Keylogger (pädagogisch) zu erstellen. Ich habe versucht, hier zu suchen, und das allgemeine Web. Ich konnte nichts Ähnliches finden, wo ich verstehen konnte, wie ich es verwenden könnte, um mein Problem zu beheben. Ich entschuldige mich, wenn es ein Duplikat gibt, ich konnte nichts Ähnliches finden.Compiler-Fehler mit typedef C++

Ich habe diese in eine Header-Datei, und wenn ich versuche, sie zu kompilieren bekomme ich alle Arten von Fehlern im Zusammenhang mit den Typedefs in der Kopfzeile, bekomme ich Fehlermeldungen, die decltype, und ich gebe zu, ich kann nicht scheinen verstehe es überhaupt. Ich habe mich nie wirklich mit Header-Sachen oder mit Decltype beschäftigt, ich suchte herum, kann es aber immer noch nicht wirklich verstehen. Die Fehler treten mit diesem:

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 
); 

Der andere Fehler in der main.cpp ist: (sorry über die lange Linie)

lNtAllocVirtMem pNtAllocateVirtualMemory=(lNtAllocVirtMem)GetProcAddress(LoadLibaryA("ntdll.dll"),"NtAllocateVirtualMemory"); 

Meine Fehler sind (ich ein Doppel beider erhalten):

Ich würde gerne wissen, wie man diese (wie ich mehr hinzufügen möchte) zu lösen, und noch wichtiger, wie kann ich sicherstellen, dass ich diese von hier aus nicht bekommen?

typedef _Return_type_success_(return >= 0) LONG NTSTATUS; 

Sie diese Header-Datei stattdessen NTSTATUS selbst zu definieren versuchen, umfassen müssen:

+1

Kompilieren Sie in gcc? Dies ist Compiler-spezifischen Code und so müssen Sie wahrscheinlich die Spezifikationen für Ihren Compiler auf ordnungsgemäße Verwendung nachschlagen. – Nonanon

+0

Eine Google-Suche zeigt, dass 'NTSTATUS' im Grunde genommen [Microsoftsese für ein' long'] ist (https://msdn.microsoft.com/en-us/library/cc230357.aspx). Daher macht der Typdef keinen Sinn. Es ist nicht klar, was genau Sie beabsichtigen, mit typedef alias zu aliasieren. Wenn 'NTSTATUS' der Rückgabewert der Funktion ist, sollte er nicht in Klammern stehen. Mehr Googeln zeigt, dass "WINAPI" [ist Microsoftsese für "__stdcall"] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751 (v = vs.85) .aspx) - ein Compiler spezifisches Schlüsselwort Nicht klar, ob es vor oder nach dem '*' sein muss. –

+0

@Nonanon Ich benutze Mingw mit gcc Version 4.9 – Semaphore

Antwort

0

Der Typ NTSTATUS wird in der Windows SDK-Header-Datei winternl.h definiert. Die vom SDK bereitgestellte Definition unterscheidet sich auf zwei Arten: 1 Sie enthält SAL-Anmerkungen, mit denen Sie statische Codeanalysen ausführen können. 2 Es bietet den korrekten Alias, unabhängig von der Plattform. Es sollte ein 32-Bit-Integer-Wert sowohl auf x86- als auch auf x64-Plattformen sein. long kann länger als das sein.

+0

Danke, Das Programm funktionierte, sobald ich diese Definition hinzugefügt hatte, also dachte ich nicht, dass ich etwas hinzufügen musste, ich werde das sofort ändern. – Semaphore

+0

Alles klar, ich benutze Netbeans mit Mingw, winternl.h konnte nicht importiert werden, irgendwelche Vorschläge? – Semaphore

+0

@JayM .: Ich weiß nicht, was * "winternl.h konnte nicht importiert werden" * soll heißen. Header-Dateien sind enthalten. Ohne eine bessere Problemaussage gibt es wenig Hilfe. – IInspectable