Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assembler library for .NET, assembling runtime-variable strings into machine code for injection

Tags:

c#

x86

assembly

Is there such a thing as an x86 assembler that I can call through C#? I want to be able to pass x86 instructions as a string and get a byte array back. If one doesn't exist, how can I make my own?

To be clear - I don't want to call assembly code from C# - I just want to be able to assemble code from instructions and get the machine code in a byte array.

I'll be injecting this code (which will be generated on the fly) to inject into another process altogether.

like image 205
Erik Forbes Avatar asked Sep 26 '08 03:09

Erik Forbes


2 Answers

As part of some early prototyping I did on a personal project, I wrote quite a bit of code to do something like this. It doesn't take strings -- x86 opcodes are methods on an X86Writer class. Its not documented at all, and has nowhere near complete coverage, but if it would be of interest, I would be willing to open-source it under the New BSD license.

UPDATE: Ok, I've created that project -- Managed.X86

like image 139
Alex Lyman Avatar answered Oct 07 '22 21:10

Alex Lyman


See this project:

https://github.com/ZenLulz/MemorySharp

This project wraps the FASM assembler, which is written in assembly and as a compiled as Microsoft coff object, wrapped by a C++ project, and then again wrapped in C#. This can do exactly what you want: given a string of x86/x64 assembly, this will produce the bytes needed.

If you require the opposite, there is a port of the Udis86 disassembler, fully ported to C#, here:

https://github.com/spazzarama/SharpDisasm

This will convert an array of bytes into the instruction strings for x86/x64

like image 26
Zachary Canann Avatar answered Oct 07 '22 22:10

Zachary Canann