2012-11-24 33 views
2


标题已经描述了我的问题。
我发现这个post,但它并没有完全回答我的问题。
有了它的帮助,我得到了这个波长输出...从共享库中提取导出的函数(ubuntu)

$nm -C -g -D ./libLoggingHandler.so 

000000cc A _DYNAMIC 
... 
000042e0 T write_str(char*, char const*, int*) 
00005a78 T RingBuffer::WriteUnlock() 
... 
00005918 T TraceLines::GetItemSize() 
... 
     U SharedMemory::attach(int, void const*, int) 
... 
00003810 T TraceProfile::FindLineNr(int, int) 
... 
00002d40 T LoggingHandler::getLogLevel() 
... 
     U SharedResource::getSharedResourceKey(char const*, int) 
... 

这是导出的函数? 我已经在这个post中发现了一个提示,即“T”表示它已被导出。但是,如果我检查nm手册here,它只是说
T - 该符号位于文本(代码)部分。
我的问题是:这个输出是否给出了哪些函数是导出函数(或变量)的信息?
如果不是,我该如何得到它?

问候,Pingu

回答

0

我试图用IDA自己检查它,在那里你可以看到所有导出的函数和变量。看来如果nm输出线标有'T'或'B',它就是一个导出函数。
不知道这是否适用于每个.so文件,但只要没有其他人有更好的解决方案...
如果我错了,请纠正我。

问候企鹅家族

0

作为附录,通常是.so文件仅仅是一个指针/链接到真正的文件,例如:

foo.so - > foo.so.1.5.1

确保它指向您认为应该指向/链接到的版本。安装可能会出错,这是一个很好的完整性检查。