Можно ли написать ассемблерный код в vb.net или C #? - PullRequest
5 голосов
/ 25 ноября 2010

я знаю, как писать код MSIL, но из любопытства я хотел бы знать, есть ли обходной путь для написания ассемблерного кода.Я могу придумать способ, как написать код в строке и передать его в собственный API Windows, который выполняет и возвращает результат, но не уверен, реально ли это или даже возможно.

Я хотел бы услышать вашмнения / suggestions.Thanks

Ответы [ 4 ]

3 голосов
/ 25 ноября 2010

Нет, невозможно написать код ассемблера непосредственно в C # или VB.Net.

Самое близкое, что вы можете сделать, это разделить ассемблерный код в собственную DLL, которая экспортировала точки входа в функцию в стиле C.Затем PInvoke в эти точки входа из приложения C # / VB.Net.

Другой вариант - использовать C ++ / CLI, так как можно встроить сборку в проект C ++ / CLI.

2 голосов
/ 25 ноября 2010

Вы можете собрать его из C # и передать сгенерированный машинный код функции C, например, через P / Invoke.

int execute(char* machine_code)
{
     int(*fn)() = machine_code;
     return fn();
}

Вам нужно побеспокоиться о том, чтобы убедиться, что область памяти является исполняемой, но это выходит за рамки этого ответа.

1 голос
/ 25 ноября 2010

Другой (более .NET) вариант здесь - записать его в IL и скомпилировать либо с ilasm, либо с чем-то вроде MonoDevelop, который поддерживает проекты IL.

1 голос
/ 25 ноября 2010

Вы можете скомпилировать код, используя fasm.dll , а затем используйте Marshal.GetDelegateForFunctionPointer, чтобы сделать его вызываемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...