NtAllocateVirtualMemory завершается с ошибкой 0xC0000005C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 NtAllocateVirtualMemory завершается с ошибкой 0xC0000005

Сообщение Anonymous »


При попытке выделить память через NtAllocateVirtualMemory (работает через VirtualAlloc, но мне интересно, как это будет работать через NTAPI) и я не понимаю, в чем причина, я дал разрешения PAGE_EXECUTE_READ, но мне тоже не удалось выделить

#include #define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0) беззнаковый символьный буфер[] = { 0x90, // НЕТ 0x90, // НЕТ 0xcc, // ЦЕЛОЕ3 0xc3 // ОТМЕНА }; без знака int buffer_len = 4; typedef NTSTATUS(NTAPI* pNtAllocateVirtualMemory)( РУЧКА ProcessHandle, PVOID* Базовый адрес, УЛОНГ ЗероБитс, ПУЛОНГ РегионРазмер, Тип распределения ULONG, УЛОНГ Защитить ); typedef NTSTATUS(NTAPI* pNtWriteVirtualMemory)( РУЧКА ProcessHandle, Базовый адрес PVOID, ПВОИД-буфер, SIZE_T Размер Буфера, PSIZE_T Число записанных байтов ); интервал основной() { PVOID exec_mem; БУЛ рв; РУЧКА рт; pNtAllocateVirtualMemory ntAllocateVirtualMemory = (pNtAllocateVirtualMemory)GetProcAddress(GetModuleHandleA("ntdll"), "NtAllocateVirtualMemory"); Статус NTSTATUS = ntAllocateVirtualMemory( ПолучитьТекущийПроцесс(), &exec_mem, 0, (ПУЛОНГ)&buffer_len, MEM_COMMIT | МЕМ_РЕЗЕРВ, PAGE_READWRITE ); если (!NT_SUCCESS(статус)) { вернуть -1; } pNtWriteVirtualMemory ntWriteVirtualMemory = (pNtWriteVirtualMemory)GetProcAddress(GetModuleHandleA("ntdll"), "NtWriteVirtualMemory"); SIZE_T записано байт; статус = ntWriteVirtualMemory( ПолучитьТекущийПроцесс(), exec_mem, буфер, буфер_лен, &байтыНаписано ); rt = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)exec_mem, 0, 0, 0); WaitForSingleObject(rt, -1); вернуть 0; } Я пытался изменить разрешения, длину, пытался передать длину как указатель, но все равно не получилось.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»