nm命令分析ELF文件符号

示例

#include <stdio.h>

static int global = 0;

static void mytest_print(void)
{
    printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);
}

void mytest2(void)
{
    printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);
}

void mytest(void)
{
    mytest2();
    mytest_print();
}

编译成动态库

gcc -m32 -g -shared -fPIC mytest.c -o libmytest.so

nm分析libmytest.so(nm libmytest.so)动态库

00002018 B __bss_start
00002018 b completed.7211
         w __cxa_finalize@@GLIBC_2.1.3
00000430 t deregister_tm_clones
000004c0 t __do_global_dtors_aux
00001f04 t __do_global_dtors_aux_fini_array_entry
00002014 d __dso_handle
00001f0c d _DYNAMIC
00002018 D _edata
00002020 B _end
000005e8 T _fini
00000510 t frame_dummy
00001f00 t __frame_dummy_init_array_entry
0000071c r __FRAME_END__
00000614 r __FUNCTION__.1935
00000624 r __FUNCTION__.1939
0000201c b global
00002000 d _GLOBAL_OFFSET_TABLE_
         w __gmon_start__
0000062c r __GNU_EH_FRAME_HDR
000003b8 T _init
         w _ITM_deregisterTMCloneTable
         w _ITM_registerTMCloneTable
00001f08 d __JCR_END__
00001f08 d __JCR_LIST__
         w _Jv_RegisterClasses
000005c0 T mytest
00000588 T mytest2
00000550 t mytest_print
         U printf@@GLIBC_2.0
00000470 t register_tm_clones
00002018 d __TMC_END__
000005e4 t __x86.get_pc_thunk.ax
00000420 t __x86.get_pc_thunk.bx
0000054c t __x86.get_pc_thunk.dx

说明:

  • 第一列表示该符号在ELF文件中的偏移量
  • 第二列表示符号在ELF中的作用域范围
  • 第三列表示符号名

第二列说明

所在段名称作用域
BSS段B位于全局BSS段,在进程所在范围内的所有地方都可引用该变量(如:定义的全局变量)
b位于局部BSS段,仅在当前文件中可引用(如:定义的static变量)
text段T位于全局text段,在进程所在范围的所有地方均可引用该函数
t位于局部text段,仅在当前文件中可引用该函数(如:定义的static函数)
U位于全局text段该函数有可能位于某一动态库中,需要在动态库加载过程中进行动态库重定位操作
该函数只有定义没有实现,需要给出具体实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值