Задать вопрос

Как записать функцию в память, и вызвать по адресу 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));
  • Вопрос задан
  • 347 просмотров
Подписаться 5 Сложный Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Software-testing.ru
    Программирование на C# для тестировщиков
    10 недель
    Далее
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Для этого нужно погрузиться в WinAPI.
Вам следует сначала изучить флаги защиты страниц памяти, код может исполнятьтя только в странице памяти с флагом PAGE_EXECUTE.
Потом нужно понимать в 32 или 64 битной среде выполняется код и какой calling convention нужен для функции, так как у 32 битной версии много типов передачи параметров cdecl, cdecl, fastcall, у 64 битной в основном fastcall.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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