简单的反汇编beam文件

beam文件的格式是 "EA IFF 1985"标准的变种,它把数据分为多个chunks。有时候我们会有这样一种需求,我们想通过beam文件得到源代码,这时候我们首先要想到的是beam_lib模块
beam_lib可以用不同的标识符来访问Chunk数据,而标识符又分为两类,atoms和strings,通过atoms访问到的chunk返回的都是Compound terms

而通过strings访问到的是binary。当然了,其实我们可以理解成两张哈希表,分别保留着不同类型的Key和Value值,便于用户访问,

其实我们最频繁使用到的就是beam_lib:chunks/2,beam_lib:chunks/3,根据标识符,取得某类chunk的不同表现形式。
具体官方文档请查看 http://www.erlang.org/doc/man/beam_lib.html


ok,解析来,我们讨论一下反汇编beam文件的问题,首先我们要明确一件事,如果在编译模块时,已经指定了debug_info,那么就很简单了:


我们直接使用abstract_code来通过beam_lib:chunks来获取beam文件的asf即可。

可是有时候,我们拿到手的beam文件未必包含了debug_info的信息
如下:

 
 
或者已经对debug_info进行了加密(具体的加密方法,请查看官方文档)
如下:

 

在这两种情况下,我们可以看到beam_lib这时候就没办法直接获取到了,其实还有一种方式,我们可以通过strings标识符的方式,获取
到不同的chunks的binary形式,如果我们知道其内部格式,根据二进制进行反汇编即可,这说起来容易,做起来困难,
最近我在翻看代码时候,在compiler的lib中找到一个内部模块beam_disasm。

哈哈,看到没,熟悉的asf又出现了,既然得到了解析树,接下来,亲们想干嘛就干嘛啊,O(∩_∩)O
 






转载于:https://www.cnblogs.com/star-star/archive/2013/02/28/2936314.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值