HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 31.03.2017, 22:47
kick
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами: 5952720

Репутация: 6527


По умолчанию

Для выполнения ASM кода в C# необходимо:

Добавляем вызов InteropServices:

Код:


Код:
using System.Runtime.InteropServices;
Дальше добавляем следующий код:

Код:


Код:
[DllImport("kernel32.dll", SetLastError = true)]
        static extern bool VirtualProtect(IntPtr lpAddress, uint dwSize,
           uint flNewProtect, out uint lpflOldProtect);

        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        private delegate int AsmCodeExecutor();

        private unsafe int Asm_Execute(byte[] Code)
        {
            byte* CodePointer;
            fixed (byte* p = &Code[0])
                CodePointer = p;
            uint OldProtect;
            VirtualProtect((IntPtr)CodePointer, (uint)Code.Length, (uint)0x40, out OldProtect);
            AsmCodeExecutor ExecuteAsmCode = (AsmCodeExecutor)Marshal.GetDelegateForFunctionPointer((IntPtr)CodePointer, typeof(AsmCodeExecutor));
            int AsmCodeResult = ExecuteAsmCode();
            return AsmCodeResult;
        }
Пример вызова:

Код:


Код:
byte[] ByteCode = { 0xE8, 0x00, 0x00, 0x00, 0x00, 0x58, 0x83, 0xE8, 0x05, 0xC3 };
            int Rez = Asm_Execute(ByteCode);
В переменной Rez будет конечно значение регистра eax. Конкретно в данном примере, выполнялся код,вычисляющий свое местоположение в памяти:

Код:


Код:
call @@Next
 @@Next:
  pop eax
  sub eax,5
  ret
У кого будет выдавать ошибку связанную с /unsafe делаем так:
  1. Заходим в Свойства проекта
  2. Выбираем вкладку "Построение"
  3. Разрешить "Небезопасный код".
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.