Elixir 获取escript可执行文件的源代码

Elixir 获取escript可执行文件的源代码,elixir,decompiling,Elixir,Decompiling,我错误地删除了我写的长生不老药铭文的源代码;作为最后的手段,我试图通过反编译部署在服务器上的可执行文件来获取源代码(如果可能的话) 如果有必要,它是在Ubuntu 16.04上编译的,运行mix escript.build,没有附加参数 如果有人能告诉我如何做或从哪里开始,我将不胜感激 谢谢以下是如何取回文件的已编译Erlang源代码。我不认为这是可能得到原来的长生不老药来源回来,因为它是不存在于所有的描述;只有已编译的Erlang字节码是可用的。如果您知道一些Erlang,反编译的Erlang

我错误地删除了我写的长生不老药铭文的源代码;作为最后的手段,我试图通过反编译部署在服务器上的可执行文件来获取源代码(如果可能的话)

如果有必要,它是在Ubuntu 16.04上编译的,运行mix escript.build,没有附加参数

如果有人能告诉我如何做或从哪里开始,我将不胜感激


谢谢

以下是如何取回文件的已编译Erlang源代码。我不认为这是可能得到原来的长生不老药来源回来,因为它是不存在于所有的描述;只有已编译的Erlang字节码是可用的。如果您知道一些Erlang,反编译的Erlang代码应该是可读的(如果不知道,请查看quick Erlang Elixir速成课程)

escript可执行文件以
#开头/usr/bin/env escript
后跟一些行,然后嵌入式编译文件以二进制zip文件的形式出现。在编辑器中打开escript文件并删除所有内容,直到以
PK
开头的行(zip的开头)

现在,您可以使用
解压
提取文件内容,并获得所有编译的
.beam
文件:

$ unzip m -d extracted
Archive:  m
  inflating: extracted/m_escript.beam
  inflating: extracted/Elixir.Version.Parser.DSL.beam
  inflating: extracted/Elixir.Kernel.LexicalTracker.beam
  inflating: extracted/Elixir.IO.ANSI.beam
  inflating: extracted/Elixir.Inspect.NaiveDateTime.beam
  inflating: extracted/Elixir.Protocol.beam
  inflating: extracted/Elixir.Inspect.Any.beam
  ...
最后,您可以使用以下方法反编译所需的模块:

这是长生不老药的原始来源:

$ cat lib/m.ex
defmodule M do
  def main(args \\ []) do
    IO.inspect {args, args}
  end
end

非常感谢,还有一些工作要做,但这是一个伟大的基础,非常感谢!!!
$ decompile-beam extracted/Elixir.M.beam
-compile(no_auto_import).

-file("lib/m.ex", 1).

-module('Elixir.M').

-export(['__info__'/1, main/0, main/1]).

-spec '__info__'(attributes | compile | exports |
         functions | macros | md5 | module |
         native_addresses) -> atom() |
                      [{atom(), any()} |
                       {atom(), byte(), integer()}].

'__info__'(functions) -> [{main, 0}, {main, 1}];
'__info__'(macros) -> [];
'__info__'(info) ->
    erlang:get_module_info('Elixir.M', info).

main() -> main([]).

main(args@1) -> 'Elixir.IO':inspect({args@1, args@1}).
$ cat lib/m.ex
defmodule M do
  def main(args \\ []) do
    IO.inspect {args, args}
  end
end