2016-10-23 2 views
-2

В настоящее время я работаю над объединением некоторых объявлений для функций ntdll из различных файлов exploit-db, чтобы создать кейлоггер (в образовательных целях). Я пробовал искать здесь и общую сеть. Я не мог найти ничего подобного достаточно, чтобы понять, как его использовать, чтобы исправить мою проблему. Прошу прощения, если есть дубликат, я не мог найти ничего связанного.Ошибки компилятора с typedef C++

Я помещаю их в файл заголовка, и, пытаясь их скомпилировать, я получаю всевозможные ошибки, связанные с 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) 

Я хотел бы знать, как их решить (как я планирую добавить больше), и что более важно, как я могу убедиться, что я не получу их здесь?

+1

Вы компилируете в gcc? Это код, специфичный для компилятора, поэтому вам, вероятно, придется искать спецификации для вашего компилятора при правильном использовании. – Nonanon

+0

Поиск в Google показывает, что в основном «NTSTATUS» является [Microsoftese для «длинного»] (https://msdn.microsoft.com/en-us/library/cc230357.aspx). Таким образом, typedef не имеет смысла. Неясно, что именно вы намерены использовать в псевдониме, используя typedef. Если 'NTSTATUS' является возвращаемым значением из функции, оно не должно быть в скобках. Подробнее Googling показывает, что «WINAPI» [является Microsoftese для '__stdcall'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751 (v = vs.85) .aspx) - компилятор ключевое слово. Неясно, должно ли оно быть до или после '*'. –

+0

@Nonanon Я использую Mingw с версией gcc 4.9 – Semaphore

ответ

0

Тип NTSTATUS определен в заголовочном файле Windows SDK winternl.h:

typedef _Return_type_success_(return >= 0) LONG NTSTATUS; 

Вам необходимо включить этот заголовочный файл вместо того, чтобы пытаться определить NTSTATUS себя. Определенное SDK определение отличается двумя способами: 1 В нем содержатся аннотации SAL, которые позволяют выполнять статический анализ кода. 2 Он обеспечивает правильный псевдоним, независимо от платформы. Это должно быть 32-разрядное целочисленное значение на платформах x86 и x64. long может быть длиннее этого.

+0

Спасибо, программа работала, как только я добавил это определение, поэтому я не думал, что мне нужно добавить что-нибудь еще, я сразу же его поменяю. – Semaphore

+0

Хорошо, я использую Netbeans с Mingw, winternl.h не может быть импортирован, любые предложения? – Semaphore

+0

@JayM .: Я не знаю, что означает «winternl.h не может быть импортировано» *. Заголовочные файлы включены. Без лучшего заявления о проблемах мало что можно сделать. – IInspectable

 Смежные вопросы

  • Нет связанных вопросов^_^