免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2483 | 回复: 0
打印 上一主题 下一主题

[内核模块] 关于符号表的疑问。。。 [复制链接]

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
1 [报告]
发表于 2013-03-30 10:47 |显示全部楼层
这个很明显是挪用,因为这个字段作为标准是有意义的,但对内核来说没有意义。对于特性的程序,各个段的数据项大小早已是固定的大小的了,没必要从sh_entsize读回来,你想想,如果真读出来的值和内核对应的结构体长度不一样,内核情何以堪,接下去该如何处理??这是不可能的,因此sh_entsize这个值对内核没有意义。
因此挪用来存在这个段在CORE里头的偏移量。CORE这个空间是内核自己弄出来的,得找个地方存着它和每个需要分配内存(SHF_ALLOC)的段的关系。

从下面代码段可以看到,无论是数据项的个数或是数据项的大小,都没有从ELF上去获取。

static unsigned long layout_symtab(struct module *mod,
                                   Elf_Shdr *sechdrs,
                                   unsigned int symindex,
                                   unsigned int strindex,
                                   const Elf_Ehdr *hdr,
                                   const char *secstrings,
                                   unsigned long *pstroffs,
                                   unsigned long *strmap)
{
        unsigned long symoffs;
        Elf_Shdr *symsect = sechdrs + symindex;
        Elf_Shdr *strsect = sechdrs + strindex;
        const Elf_Sym *src;
        const char *strtab;
        unsigned int i, nsrc, ndst;

        /* Put symbol section at end of init part of module. */
        symsect->sh_flags |= SHF_ALLOC;
        symsect->sh_entsize = get_offset(mod, &mod->init_size, symsect,
                                         symindex) | INIT_OFFSET_MASK;
        DEBUGP("\t%s\n", secstrings + symsect->sh_name);

        src = (void *)hdr + symsect->sh_offset;
        nsrc = symsect->sh_size / sizeof(*src);  《——————————————————————————


这种不按标准的小窍门是容把人给弄昏。
你也可以搜一下代码,sh_entsize这个值,内核重来就没有当过是每项大小用过。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP