C / Python ctypes 共享对象反射库/技术
我在寻找一种方法,想要列出在一个用C语言编写的共享对象中定义的.text部分的符号,这个共享对象是通过Python的ctypes库加载的。简单来说,我想获取一个CDLL加载的对象中定义的函数列表。
如果用ctypes或者相关的库(或者Python绑定)无法做到这一点,另一种选择是使用一个Python的ELF解析库,或者像http://halflifelibrary.com/wiki/Metamod-P这样的解决方案。
有没有办法做到这一点呢?
2 个回答
1
在你尝试获取dll导出的函数列表的方法中,增加了一种新的方法。
有一个脚本可以在这个链接找到:http://projects.scipy.org/numpy/wiki/MicrosoftToolchainSupport。这个脚本可以提取dll的符号表,解析出公共表,并把这个表输出到一个.def文件中。不过,它也提到如果dll被剥离(也就是去掉了一些信息),这个方法可能就不管用了。
我不确定在Python中是否有好的ELF解析器。这里列出了一些我找到的:
0
顺便说一下,使用ctypes加载的共享对象是无法获取已定义方法的列表的,因为这个对象的结构没有元信息。
如果你需要一个特定平台的对象解析器,或许可以看看这个链接:http://projects.scipy.org/numpy/wiki/MicrosoftToolchainSupport,它使用objdump工具来获取文本部分定义的函数引用。
我建议的做法是使用像Hachoir这样的ELF解析库,或者Pydevtools,写一个小解析器来检查这个对象。