vxworks 符号表 详解

vxworks符号表,又称内核符号表(kernel symbol table),其中存储了程序中各个模块的函数、变量和常量信息(还包括shell创建的变量)。符号表包括两种类型,系统符号表和用户符号表。

系统符号表:
系统符号表包含所有全局符号的名字和地址。它在下面4个功能中会用到:

1. Kernel Object-Module Loader(动态加载对象文件到内核)

2. Debugging Facilities(调试功能)

3. Kernel Shell(内核shell)

4. WDB Target Agent(WDB工具)

系统符号表有两种类型,包括build-in符号表和分离符号表。

build-in符号表:
build-in符号表会将符号信息复制成代码,然后共同编译链接生成镜像。

1. makeSymTbl.tcl工具生成符号信息,并复制在symTbl.c文件的standTbl 数组中,具体内容如下。

SYMBOL standTbl [92569] =

    {

        {{NULL}, "ACCESS_ID_TaskID", (char*) &ACCESS_ID_TaskID, 0, 0,  SYM_GLOBAL | SYM_DATA},

        {{NULL}, "ACCESS_Id_Cli_Init", (char*) ACCESS_Id_Cli_Init, 0, 0,  SYM_GLOBAL | SYM_TEXT},

        {{NULL}, "ACCESS_id_CommandInstall", (char*) ACCESS_id_CommandInstall, 0, 0,  SYM_GLOBAL | SYM_TEXT},

......

        {{NULL}, "zsend_ipv6_delete_multipath", (char*) zsend_ipv6_delete_multipath, 0, 0,  SYM_GLOBAL | SYM_TEXT},

        {{NULL}, "zstrdup", (char*) zstrdup, 0, 0,  SYM_GLOBAL | SYM_TEXT},

};

全局数组standTbl类型的定义如下,包含了函数或全局变量的名字和地址,最后的type表明这是什么类型的数据:

typedef struct symbol           /* SYMBOL - entry in symbol table */

{

    SL_NODE     nameHNode;      /* hash node (must come first) */

    char * name; /* pointer to symbol name */

    SYM_VALUE value; /* symbol value */

    SYM_REF symRef; /* Id of module, or predefined SYMREF. */

    SYM_GROUP group;          /* symbol group */

    SYM_TYPE    type;           /* symbol type */

} SYMBOL;

2. symTbl.c文件被正常编译链接到vxworks镜像中,程序运行初始化时,会利用standTbl数组生成系统符号表。

分离符号表:
分离符号表被编译成单独的对象文件(vxWorks.sym文件),然后被加载到内存中。

shell查找符号表:
通过lkup函数或symShow函数可以在shell中查找符号(symLib库中定义相关函数):

-> lkup "moduleShow"

moduleShow                0x004b2c7c text     

moduleShowInit            0x004b2a14 text     

value = 0 = 0x0

-> symShow sysSymTbl,"moduleShow"

moduleShowInit            0x004b2a14 text     

moduleShow                0x004b2c7c text     

value = 0 = 0x0

用户符号表:
为了安全,用户自定义的符号可以不放在系统符号表中,而是创建一个用户符号表,放在其中。symTblCreate函数可以创建一个符号表,相关的信息参考symLib库的定义。

本文参考官方文档《vxworks kernel shell users guide 6.9》第四章Kernel Symbol Table,为自己总结,可能理解有误,仅供参考。
————————————————
版权声明:本文为CSDN博主「牛仕琦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013026227/article/details/73821817

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值