日期:2014-05-16 浏览次数:20903 次
$ ldd cs linux-gate.so.1 => (0xffffe000) libz.so.1 => /lib/libz.so.1 (0xb7f8c000) libpthread.so.0 => /lib/libpthread.so.0 (0xb7f75000) libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0xb7e4d000) libpcre.so.0 => /usr/lib/libpcre.so.0 (0xb7e21000) libstdc++.so.6 => /usr/local/gcc4.5.1/lib/libstdc++.so.6 (0xb7d40000) libm.so.6 => /lib/libm.so.6 (0xb7d18000) libgcc_s.so.1 => /usr/local/gcc4.5.1/lib/libgcc_s.so.1 (0xb7cfd000) libc.so.6 => /lib/libc.so.6 (0xb7bbc000) /lib/ld-linux.so.2 (0xb7fab000) libdl.so.2 => /lib/libdl.so.2 (0xb7bb7000)
#include "iostream" using namespace std; class Test { public: void Hello() { cout < < "Hello world!" << endl; } }; int main() { Test test; test.Hello(); }
$ g++ test.cc -o test c$ nm test 08049f10 d _DYNAMIC 08049ff4 d _GLOBAL_OFFSET_TABLE_ 080486f0 t _GLOBAL__I_main 080487fc R _IO_stdin_used w _Jv_RegisterClasses 080486b0 t _Z41__static_initialization_and_destruction_0ii 0804870c W _ZN4Test5HelloEv U _ZNSolsEPFRSoS_E@@GLIBCXX_3.4 U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4 U _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4 0804a040 B _ZSt4cout@@GLIBCXX_3.4 U _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4 0804a0d4 b _ZStL8__ioinit U _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4 08049f00 d __CTOR_END__ 08049ef8 d __CTOR_LIST__ 08049f08 D __DTOR_END__ 08049f04 d __DTOR_LIST__ 080488c8 r __FRAME_END__ 08049f0c d __JCR_END__ 08049f0c d __JCR_LIST__ 0804a02c A __bss_start U __cxa_atexit@@GLIBC_2.1.3 0804a024 D __data_start 080487b0 t __do_global_ctors_aux 08048610 t __do_global_dtors_aux 0804a028 D __dso_handle w __gmon_start__ U __gxx_personality_v0@@CXXABI_1.3 080487aa T __i686.get_pc_thunk.bx 08049ef8 d __init_array_end 08049ef8 d __init_array_start 08048740 T __libc_csu_fini 08048750 T __libc_csu_init U __libc_start_main@@GLIBC_2.0 0804a02c A _edata 0804a0d8 A _end 080487dc T _fini 080487f8 R _fp_hw 08048508 T _init 080485e0 T _start 0804a0cc b completed.7065 0804a024 W data_start 0804a0d0 b dtor_idx.7067 08048670 t frame_dummy 08048694 T main
(3)查看某个符号的地址,以及在进程空间的大概位置(bss, data, text区,具体可以通过第二列的类型来判断)
附:nm输出中,部分符合类型说明 ,详细见 nm 的帮助
A
该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。
B
该符号的值出现在非初始化数据段(bss)中。例如,在一个文件中定义全局static int test。则该符号test的类型为b,位于bss section中。其值表示该符号在bss段中的偏移。一般而言,bss段分配于RAM中
C
该符号为common。common symbol是未初始话数据段。该符号没有包含于一个普通section中。只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个c文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C。否则其类型为B。
D
该符号位于初始