Linux cmd: ldd pmap nm

本文介绍了ldd和nm两个Linux下的实用工具。ldd用于分析程序运行时所需的动态库及其加载地址;nm则用于查看程序中的符号表,包括全局、局部及未定义的符号等。文章通过实例展示了如何使用这两个工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ldd命令:

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命令恢复原始名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值