誤って私が書いたエリクシールエスケープのソースコードを削除しました。最後の手段として、サーバーにデプロイされた実行可能ファイルを逆コンパイルすることによって、ソースを取得しようとしています(可能な場合)。エスケープ実行可能ファイルのソースコードを取得
問題が発生した場合は、追加の引数なしでmixを実行しているUbuntu 16.04でコンパイルされました。
誰かが私にこのポインタをどのようにするか、どこから始めるべきかを教えていただけたらと思います!ここで
おかげ
誤って私が書いたエリクシールエスケープのソースコードを削除しました。最後の手段として、サーバーにデプロイされた実行可能ファイルを逆コンパイルすることによって、ソースを取得しようとしています(可能な場合)。エスケープ実行可能ファイルのソースコードを取得
問題が発生した場合は、追加の引数なしでmixを実行しているUbuntu 16.04でコンパイルされました。
誰かが私にこのポインタをどのようにするか、どこから始めるべきかを教えていただけたらと思います!ここで
おかげ
はあなたのファイルのコンパイルErlangのソースを取り戻すことができる方法です。私はそれがescriptには全く存在しないので元のElixirソースを戻すことは可能だとは思わない。コンパイルされたErlangバイトコードのみです。あなたが何らかのErlangを知っていれば、逆コンパイルされたErlangコードはかなり読みやすいはずです(そうでない場合は、this速いErlangをチェックしてください。< - > Elixirクラッシュコース)。
エスケープ実行ファイルは、#! /usr/bin/env escript
で始まり、その後にいくつかの行が続き、埋め込まれたコンパイル済みファイルはバイナリのzipファイルとして存在します。エディタでエスケープ・ファイルを開き、行がPK
(zipの先頭)で始まるまですべてを削除します。
$ 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([email protected]) -> 'Elixir.IO':inspect({[email protected], [email protected]}).
:最後に、あなたが
decompile-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
...
:
$ mix escript.build
$ head -c 59 m
#! /usr/bin/env escript
%%
%%! -escript main m_escript
PK
$ vim m # remove everything until `PK`
$ head -c2 m
PK
は今、あなたはunzip
でファイルの内容を抽出し、すべてのコンパイル済み.beam
ファイルを取得することができます
これは元のエリクシールソースであった:
$ cat lib/m.ex
defmodule M do
def main(args \\ []) do
IO.inspect {args, args}
end
end
ありがとう、まだやるべきことがいくつかありますが、それは素晴らしいベースです。 – mur762