3

ELF ファイルがある場合、ライブラリ ファイル ".so" から各関数をインポートして、関数に関連付けられている共有ライブラリを表示するにはどうすればよいですか?

4

1 に答える 1

1

これは私にとってうまく機能します:

nm -uC test

たとえば、私が書いたこの他の回答のコードでは:

g++ -O0 -I ~/custom/boost/ test.cpp -o test 
nm -uC test

出力は

 w _Jv_RegisterClasses
 U _Unwind_Resume@@GCC_3.0
 U std::string::compare(std::string const&) const@@GLIBCXX_3.4
 U std::allocator<char>::allocator()@@GLIBCXX_3.4
 U std::allocator<char>::~allocator()@@GLIBCXX_3.4
 U std::ostream::operator<<(std::ostream& (*)(std::ostream&))@@GLIBCXX_3.4
 U std::ostream::operator<<(int)@@GLIBCXX_3.4
 U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)@@GLIBCXX_3.4
 U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)@@GLIBCXX_3.4
 U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()@@GLIBCXX_3.4
 U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()@@GLIBCXX_3.4
 U std::ios_base::Init::Init()@@GLIBCXX_3.4
 U std::ios_base::Init::~Init()@@GLIBCXX_3.4
 U std::__throw_bad_alloc()@@GLIBCXX_3.4
 U std::_Rb_tree_decrement(std::_Rb_tree_node_base const*)@@GLIBCXX_3.4
 U std::_Rb_tree_decrement(std::_Rb_tree_node_base*)@@GLIBCXX_3.4
 U std::_Rb_tree_increment(std::_Rb_tree_node_base const*)@@GLIBCXX_3.4
 U std::_Rb_tree_increment(std::_Rb_tree_node_base*)@@GLIBCXX_3.4
 U std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)@@GLIBCXX_3.4
 U std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@@GLIBCXX_3.4
 U std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@@GLIBCXX_3.4
 U operator delete(void*)@@GLIBCXX_3.4
 U operator new(unsigned long)@@GLIBCXX_3.4
 U __cxa_atexit@@GLIBC_2.2.5
 U __cxa_begin_catch@@CXXABI_1.3
 U __cxa_end_catch@@CXXABI_1.3
 U __cxa_rethrow@@CXXABI_1.3
 w __gmon_start__
 U __gxx_personality_v0@@CXXABI_1.3
 U __libc_start_main@@GLIBC_2.2.5
 U memmove@@GLIBC_2.2.5
 w pthread_cancel

これは、どの共有オブジェクトが依存関係を満たす必要があるかを示していないという欠点を多少認識していますがnm、これらのライブラリの出力に少し結合すると、長い道のりが必要になると思います。

名前の解読を防ぐために、-Cフラグを削除します。これは、データの相互参照を行う場合に非常に効果的です。c++filtユーザーフレンドリーな方法で名前を表示したい場合に備えて、後で名前を解読するために使用します

于 2012-10-07T21:07:02.347 に答える