Действительно ли возможно выполнить x86 последовательность сборки из C#?

Попробуйте Модуль PowerShell для служб терминалов :

Get-TSSession -ComputerName comp1 -UserName user1 | Stop-TSSession -Force

25
задан mmcdole 6 June 2009 в 05:48
поделиться

4 ответа

Чтобы противостоять утверждению Брайана, переписать код из ответа Леппи ссылка :

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace DynamicX86
{
    class Program
    {
        const uint PAGE_EXECUTE_READWRITE = 0x40;
        const uint MEM_COMMIT = 0x1000;

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);

        private delegate int IntReturner();

        static void Main(string[] args)
        {
            List<byte> bodyBuilder = new List<byte>();
            bodyBuilder.Add(0xb8);
            bodyBuilder.AddRange(BitConverter.GetBytes(42));
            bodyBuilder.Add(0xc3);
            byte[] body = bodyBuilder.ToArray();
            IntPtr buf = VirtualAlloc(IntPtr.Zero, (uint)body.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
            Marshal.Copy(body, 0, buf, body.Length);

            IntReturner ptr = (IntReturner)Marshal.GetDelegateForFunctionPointer(buf, typeof(IntReturner));
            Console.WriteLine(ptr());
        }
    }
}
45
ответ дан 28 November 2019 в 20:54
поделиться

Я считаю, что вы можете добавить управляемый проект C ++ к своему решению и предоставить метод с использованием инструкций asm. Вы можете ссылаться на этот проект из любого проекта .Net (не только C #), поэтому вы можете вызвать этот метод оттуда.

0
ответ дан 28 November 2019 в 20:54
поделиться

Да.

Просто используйте P / Invoke для функций winapi.

WriteProcessMemory или найдите указатель на свой буфер. Включите бит выполнения на странице (не помните функцию для этого).

CreateThread на указателе. WaitForObject (если вы хотите, чтобы он был однопоточным).

0
ответ дан 28 November 2019 в 20:54
поделиться

Нет, но вы можете написать сборку на C ++ и вызывать ее из C #. См. этот пример .

-1
ответ дан 28 November 2019 в 20:54
поделиться
Другие вопросы по тегам:

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