初步了解

文件列表

  1. requirements.txt 本项目的依赖

  2. setup.py 中看项目的大致信息。

    其中,入口点: entry_points={"console_scripts": ["myth=mythril.interfaces.cli:main"]}, 为: myth 文件 而 myth 的入口也就是: mythril 模块/包(也就是文件夹)下面的 interfaces 包的 cli.py 中的 main 函数

  3. mythril 包是整个源码文件夹

    1. interfaces 是接口文件夹
    2. analysis 分析文件夹
      1. module 处理漏洞分析的模块
    3. disassembler 反汇编模块
  4. doc 是本项目介绍文档的源文件

    也有在线版本:Welcome to Mythril’s documentation!

大致了解

  1. 模块化设计

    Mythril Modules

    1. 每个模块可以有一个 __init__.py 用于被导入时的初始化工作

    2. analysis/module package 是用来检测漏洞的

      1. base.py 提供 DetectionModule 基类,modules 中哥哥漏洞检测模块继承自该基类。
      2. loadr.py 的 ModuleLoader 类实现了一个单例模式的 loader,加载基类中的 EntryPoint 类和 DetectionModule
    3. type(module).__name__

      知识点: type 命令时什么类型,对象的话,就返回类名。 __name__ 属性返回模块文件名。

      所有的模块都有一个内置属性 __name__ 。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块name 的值通常为模块文件名,不带路径或者文件扩展名

  2. 输入输出

    1. 输入

      1. 如果输入文件中有多个合约,默认检测最后一个,可以指定合约名,和 oyenete 的那个功能类似。
      2. 还可以通过指定合约地址分析链上合同。
      3. 指定超时时间、最大深度(二者都有默认)
    2. 结果输出

      有漏洞的编号,危害程度、合约名、介绍、位置等,挺好的,我们可以学习这个方面 输出类型、方式也值得学习:默认终端,提供参数指定其他方式

  3. 类型提示 Typing 模块

    Python 增强提议(PEP-484)等,向代码中添加类型信息的标准方法。静态分析,仅仅会在你编程时提示,并不会报错(Pycharm 会提示)

主要内容

  1. 入口点: mythril.interfaces.cli.main()

参考文件:

Python init.py 作用详解 Python init.py 作用详解 10.1 构建一个模块的层级包

全面理解 Python 中的类型提示(Type Hints) How should I use the Optional type hint? python typing doc

[command line interface (CLI)](https://searchwindowsserver.techtarget.com/definition/command-line-interface-CLI#:~:text=A%20command%20line%20interface%20(CLI, interfaces%20and%20character%20user%20interfaces.)