2010-11-24 3 views
5

Я знаю, как писать код MSIL, но из любопытства я хотел бы знать, есть ли обходной путь для написания кода сборки. Я могу думать о способе написания кода в строке и передачи его в родной windows api, который выполняет и возвращает результат, но не уверен, что это реально или даже возможно.Можно ли написать код сборки в vb.net или C#?

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

+2

Вы тоже кодируете код? – N0Alias 2010-11-24 22:15:07

ответ

2

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

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

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

3

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

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

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

+0

Я понимаю, поэтому правильный вопрос задать, можно ли скомпилировать код сборки во время выполнения на C/C++, так что если это возможно, тогда мы сможем вывести строку кода сборки в родную dll. – 2010-11-24 22:18:54

1

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

1

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

+0

Конечно, сборка на основе IL затем может быть объединен с сборкой C# с [`al.exe`] (http://msdn.microsoft.com/en-us/library/c405shex.aspx). Вам потребуется ручное редактирование файлов MSBuild ... – Richard 2010-12-17 10:35:19

Смежные вопросы