除了Extend a dynamic linked shared library?我想知道,我如何获得一个共享库的所有公共方法的列表,封闭源代码。发现共享库的公共方法
我已经试过
nm -D libfoo.so
readelf -s libfoo.so
但像返回类型有我丢失的信息,参数等
由于这一领域的初学者,我甚至不能弄清楚什么那些方法了可以为我的应用程序调用。
有没有人更有用的工具?
编辑:
对于一个非常简单的例子,我有以下几点:
libtest1.c:
int puts(char const *);
void libtest1()
{
puts("libtest1: called puts()");
}
然后我编译libtest1.c到libtest1.so:
gcc -fPIC -shared -o libtest1.so libtest1.c
在我的“程序”(test.c)中,我使用共享库如下:
void libtest1(); //from libtest1.so
int main()
{
libtest1();
}
和编译test.c的测试:
gcc -o test test.c -ltest1 -ldl
这将工作,虽然我没有libtest1.h包括。 它工作的“正义”,因为我知道可能有一个libtest1() - 方法来调用。
现在想起我丢失了libtest1.c,并且只是将libtest1.so放在我的手中,不记得方法是什么以及它们需要什么参数。
这是一个愚蠢的例子,我知道:)
或者作为其他例子(也许更好):
假设我发现了一个“libstone2goldconverter.so”的地方在我的系统,并认为“噢,我的上帝,我会用它“但是如何?
如果您发现'libstone2goldconverter .so'请让我知道! :D – Veger
如果您确实需要在不使用头文件的情况下尝试此操作,则问题基本上与逆向工程机器(汇编)代码相同。也就是说,硬件和自动工具只能做一些工作。 – aschepler
我相信我会为我的案例找到头文件,但如果有其他方法可以找出api,它会更容易。我会让你知道,veger;) –