【问题标题】:How to calculate the total basic block number in a Linux ELF binary如何计算 Linux ELF 二进制文件中的总基本块数
【发布时间】:2021-06-25 15:02:54
【问题描述】:

我正在尝试查看在常见使用场景下,常见软件不需要多少代码块。有没有静态二进制分析工具可以计算出一个Linux ELF的总基本块数?

【问题讨论】:

    标签: linux elf static-analysis


    【解决方案1】:

    好的,我用Angr写了一个脚本来获取所有的基本块:

    #!/usr/bin/env python3
    # A script to dump function and basic block locations, size, etc.
    # Install angr (https://docs.angr.io/introductory-errata/install) before use it.
    # @author: xiaogw (https://stackoverflow.com/users/1267984/xiaogw)
    import angr
    import sys
    
    def dump_functions_bbs(p, cfg):
      for key in cfg.kb.functions:
        for bb in cfg.kb.functions[key].blocks:
          print("%s: %s" % (hex(bb.addr), hex(bb.size)))
    
    def main(argv):
      if (len(argv) < 2):
        print("Usage %s <BIN>" % argv[0])
        return 1
      path_to_binary = argv[1]
      p = angr.Project(path_to_binary, load_options={'auto_load_libs': False})
      cfg = p.analyses.CFGFast()
      dump_functions_bbs(p, cfg)
    
      return 0
    
    if __name__ == '__main__':
      main(sys.argv)
    

    【讨论】:

    • 我运行了你的程序,看起来不错,它列出了 Angr 定义的所有基本块。谢谢!!!!
    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多