C # Comment récupérer le code d’un processus et l’exécuter ensuite?

Comme un processus est une instance d’un programme informatique et contient le code du programme et son activité en cours, j’ai essayé la chose suivante:

  • Analysez mon processus et récupérez un tableau d’octets.
  • Exécutez ces octets.

Mon problème est que je récupère à la fois le code du programme et son activité en cours, alors que je ne m’intéresse qu’à la première partie.

Voici comment je récupère les octets de mon processus “foo”:

public static byte[] resortingeveProcessBytes(Ssortingng processName) { Process process = ApplicationFinder.FromProcessName(processName).First(); var sharp = new MemorySharp(process); List bytes = new List(); IntPtr ptr = IntPtr.Zero; try { while (true) { bytes.Add(sharp.Read(ptr, 1)[0]); ptr = IntPtr.Add(ptr, 1); } } catch (Exception e) { Console.Write("Exception caught : " + e); } return bytes.ToArray(); } 

Et voici comment j’essaie de l’exécuter:

 byte[] bytes = resortingeveProcessBytes("foo"); Assembly asm = Assembly.Load(bytes); Object[] Args = new Object[0]; asm.EntryPoint.Invoke(null, Args); 

Et cela me donne l’erreur suivante:

Une exception non gérée de type ‘System.BadImageFormatException’ s’est produite dans mscorlib.dll

En attendant, si je récupère les octets de mon programme “foo.exe” et les exécute, comme ci-dessous, cela fonctionne.

 Byte[] bytes = File.ReadAllBytes(pathToFooExe); Assembly asm = Assembly.Load(bytes); 

Le tableau d’octets que je récupère de mon processus est beaucoup plus volumineux que celui que je récupère à partir de mon fichier “foo.exe”. Parce que je suppose que je récupère également l’activité de processus en cours.

Comment puis-je récupérer uniquement la partie code de mon processus?

Est-ce que ça commence à IntPtr.Zero ou plus tard? Et quand est-ce que je m’arrête?

Toute aide serait appréciée, merci d’avance.

Si vous lisez à propos de la fonction Assembly.Load, vous pouvez voir que vous l’utilisez de manière incorrecte. Le simple fait qu’il autorise un tableau d’octets en entrée ne signifie pas que vous lui fournissez un tableau d’octets.

Assembly.Load (Byte [])

Charge l’assembly avec une image basée sur un format de fichier d’object commun (COFF) contenant un assemblage émis. L’assembly est chargé dans le domaine d’application de l’appelant.

Format de fichier COFF

Ce n’est pas ce que vous faites évidemment. Fondamentalement, ce que vous faites ne peut pas être fait. CherryDT vous a également donné une bonne raison dans ses commentaires.