11

It this even possible? Are there any free tools?

3
  • Did you try those github.com/aerror2/ILSpy-For-MacOSX or tirania.org/blog/archive/2011/Feb-04.html.
    – PhoeniX
    Commented May 15, 2017 at 18:26
  • I did, but after i build the project and run the .exe with mono, i get an error. I get this: Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. I may debug the project in the future to find the issue if no easier solution will arise till then. :)
    – ttt
    Commented May 15, 2017 at 18:43
  • It depends on the complexity of the original executable, but in general debugger is the way to solve the problem.
    – PhoeniX
    Commented May 15, 2017 at 18:49

4 Answers 4

13

Visual Studio for Mac can do the job. Just hit File / Open and then choose the executable or library you want. It'll open the Assembly Browser window.

If you need more detailed code change the Visibility to All members and the Language to C#.

Visibility

Language

decompiled

3
  • but this way doesn't give you the code. Only the signatures of the methods. Commented Feb 13, 2019 at 21:39
  • @PawełŁukasik yes you can do, just take a look at my updated post.
    – gandarez
    Commented Feb 14, 2019 at 22:20
  • Yup. My mistake. Commented Feb 14, 2019 at 22:24
5

Best free tool for the job is ILSpy, but it runs on Windows. This gives you a limited list of options:

  1. create a windows virtual machine (with virtualbox or vmware player) and run it in there

  2. install WINE on mac, to allow you run .exe files.

  3. get visual studio for mac and use ikdasm

  4. if you feel hardcore, open it in a disassembler ;)

Being an IT guy myself, I would go for the first solution. Check them all out briefly and go for one!

2
  • 2
    for point 3, there's no tool called ildasm. The tools that are included VS for Mac are called ikdasm or monodis Commented May 21, 2017 at 5:44
  • Thnks for the notice! I corected it. Commented May 21, 2017 at 8:23
2

You can use Jetbrains' Rider. It has a 30 day free trial period.

  1. Open Rider and open or create a C# project
  2. Add a dependency to the .exe file (naturally, this also works for .dll).

enter image description here

  1. In a class in your project, import the package and type the class you want to inspect.

enter image description here

  1. Do Command+click or Command+B on the class name to trigger Rider's decompile option. Confirm if necessary.

The disadvantage is that we have to repeat step 4 for each class we want to decompile.

1
  • 2
    it looks like you were too fast. Point 4 is incomplete and 5 is missing. Commented Mar 13, 2018 at 8:10
0

Is this even possible?

Generally yes, with a couple of exceptions:

  • Starting with .NET Core and now .NET the .exe files produced by the compilation of applications are not CLR assemblies but native assemblies. CLR assemblies contain IL and are decompilable to C# while native assemblies contain machine code and cannot be decompiled to C#.

Hint: in that scenario one should decompile the .dll with the same name. That's the file that contains the compiled C# code.

  • Ahead-of-Time compiled .exe files are also not CLR assemblies and cannot be decompiled to C#

Are there any free tools?

Yes, there are. One such tool is CodemerxDecompile - the spiritual successor of the popular JustDecompile. While JustDecompile is Windows only, CodemerxDecompile is a multi-platform decompiler that runs on Windows, Linux and MacOS.

Disclosure: I'm part of the team behind CodemerxDecompile.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.