Leer ejecutable y cargarlo en memoria C#

SeiYa

Buenas, quiero leer un ejecutable, almacenar su código en un stream o array de bytes y ejecutarlo en memoria sin tener que utilizar el .exe original.

Podría así almacenar el código en una BBDD y poder destruir el original.

He conseguido hacerlo pero para ello debo crear un .exe y ese es el que ejecuta, la única posibilidad es hacerlo en un directorio temporal para que después se borre.

He conseguido otro código, el siguiente (bin es un array de bytes) pero solo ejecuta aplicaciones .NET y no otras aplicaciones (como el notepad.exe por ejemplo o un .exe de cualquier otro tipo de lenguaje).

Assembly a = Assembly.Load(bin);
MethodInfo method = a.EntryPoint;
if (method != null)
{
      object o = a.CreateInstance(method.Name);

  method.Invoke(o, null);
}

¿Tenéis alguna idea de como hacerlo teniendo en bin almacenado todos los bytes en un array?

Soleil

El segundo método funciona, pero porque es un ensamblado de .NET y usando reflexión se puede ejecutar fácilmente. El problema es hacerlo con un ejecutable arbitrario desconocido para .NET.

¿En que lenguaje está hecho el otro programa? ¿lo has hecho tú? Si es así, siempre puedes compilarlo en una DLL y usar DLLImport() para tener las clases accesibles.

SeiYa

Ahí está el tema, que puede ser cualquiera ... finalmente optaré por un método "extraer" que en lugar de ejecutar genere un .exe y listo, a ver si lo aceptan así XD

Usuarios habituales

  • SeiYa
  • Soleil