2010-11-24 15 views
5

sé cómo escribir código MSIL pero por curiosidad me gustaría saber si hay una solución para escribir código de ensamblado. Puedo pensar en una forma de escribir el código en una cadena y pasarlo a una API nativa que se ejecuta y devuelve el resultado, pero no estoy seguro si esto es real o incluso posible.¿Es posible escribir código de ensamblaje en vb.net o C#?

me gustaría escuchar sus opiniones/suggestions.Thanks

+2

¿Código en binario también? – N0Alias

Respuesta

2

Puede montarlo desde C# y pasar el código de máquina generado a una función C como esta a través de P/Invoke.

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

Usted había necesidad de preocuparse por asegurarse de que la región de memoria es ejecutable, pero que está más allá del alcance de esta respuesta.

3

No, no es posible escribir el código de montaje directamente en C# o VB.Net.

Lo más cerca que puede hacer para hacer esto es separar el código del ensamblado en una DLL nativa que exportó los puntos de entrada de la función de estilo C. Luego PInvoque en esos puntos de entrada de la aplicación C#/VB.Net.

Otra opción es utilizar C++/CLI ya que es posible ensamblar en línea en un proyecto de C++/CLI.

+0

lo entiendo, así que la pregunta correcta es si es posible compilar el código ensamblador en tiempo de ejecución en C/C++ entonces si es posible entonces podemos pinvokear una cadena de código de ensamblado en un dll nativo –

1

Puede compilar el código usando fasm.dll, y luego usar Marshal.GetDelegateForFunctionPointer para hacerlo invocable.

1

Otra opción (más .NET) aquí sería escribirla en IL y compilar con ilasm, o algo así como MonoDevelop que tiene soporte para proyectos IL.

+0

Por supuesto, el ensamblado basado en IL podría fusionarse en el ensamblado C# con ['al.exe'] (http://msdn.microsoft.com/en-us/library/c405shex.aspx). Se requerirá la edición manual de los archivos de MSBuild ... – Richard

Cuestiones relacionadas