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

2020-12-24 21:01:22 +08:00
 wcsjtu

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

2225 次点击
所在节点    Python
9 条回复
future0906
2020-12-24 22:09:36 +08:00
so 里面有符号表
ysc3839
2020-12-24 22:15:46 +08:00
没办法,动态库要执行代码注册相关信息后才能知道内部情况。
VDimos
2020-12-24 22:26:26 +08:00
无,类这个概念在 elf 文件里不存在,符号表里方法名也会混淆,extern 指定的函数倒是能找到符号表,至于完整的定义,无
jones2000
2020-12-24 22:27:26 +08:00
做一个 so, 根据 cpython 规则读取其他so的接口就可以了。
codehz
2020-12-24 23:58:51 +08:00
(做一个假的 python,提供伪造的接口给 so,然后套出注册信息,一般不搞信息对抗的话这样就够了)))
nomaka
2020-12-25 00:25:01 +08:00
wcsjtu
2020-12-25 10:11:59 +08:00
@VDimos 很好奇 pylint 、mypy 之类的 lint 工具, 是怎么感知到 so 里的类与方法, 然后给出 linting 的呢?
wcsjtu
2020-12-25 10:12:26 +08:00
@codehz 这个也是个思路, 不过成本太高了……
wcsjtu
2020-12-25 10:19:07 +08:00
@nomaka ModuleFinder 这个库, 解决了我前几天已经艰难地解决了的问题。 不过, 我现在遇到的困难是,module 已经找到了, 发现它是一个.so, 我要去解析这个.so 里面的类与函数……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/738710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX