Decompile beam to erlang

Ulf Wiger (AL/EAB) <>
Sat Jan 28 15:03:41 CET 2006


Matthias Lang wrote:
> Writing a decompiler which can turn the above example
> back to source is a fifteen minute job. Writing a
> decompiler which handles more complex Erlang code
> is more time consuming, but not much harder.

Here's a pretty generic way to convert abstract
forms to .erl:


-module(abst_to_src).
-export([transform/2]).

transform(BeamFName, ErlFName) ->
  case beam_lib:chunks(BeamFName, [abstract_code]) of
    {ok, {_, [{abstract_code, {raw_abstract_v1,Forms}}]}} ->
      Src = 
        erl_prettypr:format(erl_syntax:form_list(tl(Forms))),
        {ok, Fd} = file:open(ErlFName, [write]),
        io:fwrite(Fd, "~s~n", [Src]),
        file:close(Fd); 
    Error ->
       Error
  end.

(It _did_ take exactly 15 minutes, 
including:
- just trying to hack it from memory
- reading the docs, waiting two minutes for 
  the erlang.org webserver to respond
- fetching the docs from local disk
- reading some more, giving up and then 
  searching my mail archive for an old 
  mail to Luke Gorrie, where I had included
  the above code
- Copy-paste, compiling, running and 
  verifying the results... :)

/Uffe



More information about the erlang-questions mailing list