ldd命令:
•第一列:程序需要依赖什么库
•第二列: 系统提供的与程序需要的库所对应的库
•第三列:库加载的开始地址
nm命令:
nm是用来查看指定程序中的符号表相关内容的工具。
ldd是用来静态分析程序运行时需要依赖的动态库的工具,pma是用来分析运行中的程序已经加载了哪些动态库。
eg:
jiangmingfu@ubuntu:~/work/code/gdb$ ldd debug
linux-gate.so.1 => (0x00e5f000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x008ca000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00a7a000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x00cc8000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x007a7000)
•第一列:程序需要依赖什么库
•第二列: 系统提供的与程序需要的库所对应的库
•第三列:库加载的开始地址
nm命令:
nm是用来查看指定程序中的符号表相关内容的工具。
eg:
jiangmingfu@ubuntu:~/work/code/gdb$ nm debug
08049f10 d _DYNAMIC
08049ff4 d _GLOBAL_OFFSET_TABLE_
0804859c R _IO_stdin_used
w _Jv_RegisterClasses
08048454 T _Z5hellov
08049f00 d __CTOR_END__
08049efc d __CTOR_LIST__
08049f08 D __DTOR_END__
08049f04 d __DTOR_LIST__
08048624 r __FRAME_END__
08049f0c d __JCR_END__
08049f0c d __JCR_LIST__
0804a018 A __bss_start
0804a010 D __data_start
08048550 t __do_global_ctors_aux
080483d0 t __do_global_dtors_aux
0804a014 D __dso_handle
w __gmon_start__
08048545 T __i686.get_pc_thunk.bx
08049efc d __init_array_end
08049efc d __init_array_start
08048540 T __libc_csu_fini
080484e0 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
0804a018 A _edata
0804a020 A _end
0804857c T _fini
08048598 R _fp_hw
08048320 T _init
080483a0 T _start
0804a018 b completed.6155
0804a010 W data_start
0804a01c b dtor_idx.6157
08048430 t frame_dummy
080484c6 T main
U printf@@GLIBC_2.0
U scanf@@GLIBC_2.0
考虑到c++编译器由于重载的存在会对符号名进行重新命名,可以使用nm -C命令恢复原始名称。