|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
IntroductionThis article illustrates a little tool for disassembling a .NET assembly IL code and making some patches. BackgroundFor my application, I have used Mono.Cecil, a very powerful library for modifying IL code. If you want more info, visit the Cecil homepage. Another Cecil article I found to be helpful is the one by ronnyek: MonoCecilChapter1.asp. Using the codeYou only need to load an assembly and look at all the types that it contains. When you click on one type, its methods and some information appear in the right. You can delete a type, delete a method, or edit the code of a method. In the Edit Code form, you can watch the IL code, remove a sentence, or insert a new sentence. The basic code for using Cecil is: AssemblyDefinition assembly = AssemblyFactory.GetAssembly("assembly.exe");
//Gets all types of the MainModule of the assembly
foreach(TypeDefinition type in assembly.MainModule.Types)
{
if(type.Name != "<Module>")
{
//Gets all methods of the current type
foreach(MethodDefinition method in type.Methods)
{
//Gets the CilWorker of the method for working with CIL instructions
CilWorker worker = method.Body.CilWorker;
//Creates the MSIL instruction for inserting the sentence
Instruction insertSentence = worker.Create(OpCodes.Ldstr, "Text");
//Inserts the insertSentence instruction before the first //instruction
method.Body.CilWorker.InsertBefore(method.Body.Instructions[0],
insertSentence);
}
//Import the modifying type into the AssemblyDefinition
assembly.MainModule.Import(type);
}
}
//Save the new assembly
AssemblyFactory.SaveAssembly(assembly, "new.exe");
Points of InterestI want to improve the program and add some more options like methods insertion, feature to show C# code (like Reflector), and an improved instructions insertion. History
|
||||||||||||||||||||||