Весь код:
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
unsigned char b[] = "\xa1\x00\x70\xe8\x00";
int mySequency[256] = { 3 };
void *exec = VirtualAlloc(0, sizeof b, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
int main()
{
memcpy(exec, b, sizeof b);
((void(*)())exec)();
system("pause");
return 0;
}
Простой shellcode выполняется без проблем, например положить какое-то число в регистр, а вот когда в нем происходит попытка чтения или записи переменной mySequency, получаем ошибку:
Пробовал сделать:
DWORD old_protect;
VirtualProtect((DWORD*)mySequency, 256, PAGE_READWRITE, &old_protect);
Никак не влияет.
Данный байтовый код следующей инструкции:
mov eax, dword ptr[mySequency]
В виде ассемблерной вставки в Visual Studio работает без проблем. Подозреваю что нужно что-то еще подкрутить в конфигах проекта, но вроде уже все поотключал...
Покопался в конфигах, вроде как иногда ошибки с памятью пропадают, но теперь появилось: