V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
wcsjtu
V2EX  ›  Python

有没有办法在不 import 一个 Python 动态模块的情况下, 解析出这个库里面定义的函数和类

  •  
  •   wcsjtu · 2020-12-24 21:01:22 +08:00 · 1774 次点击
    这是一个创建于 704 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在写定制化的 Python 静态分析工具, 在分析.so 库时卡住了。 .py 文件, 可以分析它的抽象语法树, 找到其定义的函数和类, 但是.so 文件是个二进制的, 应该没有 ast 之类的东西, 该如何在不 import 它的情况下, 找到里面的函数和类呢

    9 条回复    2020-12-25 10:19:07 +08:00
    future0906
        1
    future0906  
       2020-12-24 22:09:36 +08:00
    so 里面有符号表
    ysc3839
        2
    ysc3839  
       2020-12-24 22:15:46 +08:00 via Android
    没办法,动态库要执行代码注册相关信息后才能知道内部情况。
    VDimos
        3
    VDimos  
       2020-12-24 22:26:26 +08:00 via Android
    无,类这个概念在 elf 文件里不存在,符号表里方法名也会混淆,extern 指定的函数倒是能找到符号表,至于完整的定义,无
    jones2000
        4
    jones2000  
       2020-12-24 22:27:26 +08:00
    做一个 so, 根据 cpython 规则读取其他so的接口就可以了。
    codehz
        5
    codehz  
       2020-12-24 23:58:51 +08:00 via Android
    (做一个假的 python,提供伪造的接口给 so,然后套出注册信息,一般不搞信息对抗的话这样就够了)))
    nomaka
        6
    nomaka  
       2020-12-25 00:25:01 +08:00
    wcsjtu
        7
    wcsjtu  
    OP
       2020-12-25 10:11:59 +08:00
    @VDimos 很好奇 pylint 、mypy 之类的 lint 工具, 是怎么感知到 so 里的类与方法, 然后给出 linting 的呢?
    wcsjtu
        8
    wcsjtu  
    OP
       2020-12-25 10:12:26 +08:00
    @codehz 这个也是个思路, 不过成本太高了……
    wcsjtu
        9
    wcsjtu  
    OP
       2020-12-25 10:19:07 +08:00
    @nomaka ModuleFinder 这个库, 解决了我前几天已经艰难地解决了的问题。 不过, 我现在遇到的困难是,module 已经找到了, 发现它是一个.so, 我要去解析这个.so 里面的类与函数……
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4639 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 07:34 · PVG 15:34 · LAX 23:34 · JFK 02:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.