简体   繁体   English

如何计算 Linux ELF 二进制文件中的总基本块数

[英]How to calculate the total basic block number in a Linux ELF binary

I'm trying to see how many code blocks are not necessary for common software under common usage scenarios.我想看看在常见的使用场景下,有多少代码块对于普通软件来说是不必要的。 Is there a static binary analysis tool that can calculate the total basic block number of a Linux ELF that?有没有一个静态二进制分析工具可以计算一个Linux ELF的总基本块数?

Okay, I wrote a script using Angr to obtain all the basic blocks:好的,我使用 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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM