Как записать функцию в память, и вызвать по адресу c# небезопасный код?

Как можно записать код функции в память по адресу.
К примеру
delegate*<int, int, int> d = &sum;
            var ptr=Marshal.AllocCoTaskMem(1024*1024); 
// записать те же байты Marshal.Write.... 
            Console.WriteLine(Marshal.GetDelegateForFunctionPointer<Fun>( (IntPtr)d).Invoke(32,44)); 
//1 работает, а вторая исключение. Хотя следующие 1024 байтов значений одинаковые
Console.WriteLine(Marshal.GetDelegateForFunctionPointer<A>( (IntPtr)ptr).Invoke(32,44));
  • Вопрос задан
  • 333 просмотра
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Для этого нужно погрузиться в WinAPI.
Вам следует сначала изучить флаги защиты страниц памяти, код может исполнятьтя только в странице памяти с флагом PAGE_EXECUTE.
Потом нужно понимать в 32 или 64 битной среде выполняется код и какой calling convention нужен для функции, так как у 32 битной версии много типов передачи параметров cdecl, cdecl, fastcall, у 64 битной в основном fastcall.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы