erlang beam_lib
一个简单的测试模块
-module(test1).
-export([test/0]).
test() ->
io:format("source code.~n", []).
通过compile:file("test1",[debug_info]),将test.erl文件编译,会生成一个test.beam文件
通过{ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(code:which(test1), [abstract_code]).
io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).
对test.beam文件操作么,可以获取test.beam文件中的源码内容。
结果如下:
-file("e:/workspace/demo/src/test1.erl", 1).
-module(test1).
-export([test/0]).
test() -> io:format("source code.~n", []).
ok
encrypt_debug_info 加密处理
建立一个.erlang.crypt 文件,文件内容是[{debug_info, des3_cbc, [], "my_source_code_secret_key"}]. %%string类型的内容是密钥,可以自己随便填写,
存放和test.erl文件同一目录下
通过compile:file("test1",[encrypt_debug_info])对test.erl文件进行编译,这时会生成一个test.beam文件,
只有当test.beam文件和.erlang.crypt 文件都在的时候,beam_lib:chunks(code:which(test1), [abstract_code])才能通过。
浙公网安备 33010602011771号