模块API之sprint_symbol
来源:互联网 发布:网络代理平台 编辑:程序博客网 时间:2024/05/29 06:28
int sprint_symbol(char *buffer, unsigned long address)的作用是根据内存中地址address查找这个地址对应的symbol,并加此symbol的name,offset,size等基本信息连成字符串赋值给buffer.其使用的例子如下:static void hist_trigger_stacktrace_print(struct seq_file *m, unsigned long *stacktrace_entries, unsigned int max_entries){char str[KSYM_SYMBOL_LEN];unsigned int spaces = 8;unsigned int i;for (i = 0; i < max_entries; i++) {if (stacktrace_entries[i] == ULONG_MAX)return;seq_printf(m, "%*c", 1 + spaces, ' ');sprint_symbol(str, stacktrace_entries[i]);seq_printf(m, "%s\n", str);}}其源码分析如下:int sprint_symbol(char *buffer, unsigned long address){return __sprint_symbol(buffer, address, 0, 1);}继续调用__sprint_symbol,其第三个参数symbol_offset等于0,第四个参数add_offset等于1static int __sprint_symbol(char *buffer, unsigned long address, int symbol_offset, int add_offset){char *modname;const char *name;unsigned long offset, size;int len;//第三个参数表示address 是否要增加一个偏移,这里赋值为0 表示不需要增加偏移 address += symbol_offset;//通过kallsyms_lookup 找address对应的size,offset,modnamename = kallsyms_lookup(address, &size, &offset, &modname, buffer);//如果没有找到address 对应的symbol,则返回,这时候buffer里面的内容就是几个addres。因为symbol_offset等于0if (!name)return sprintf(buffer, "0x%lx", address - symbol_offset);// 如果name 不等于buffer 说明address 对应的symbol在模块中,将name赋值给bufferif (name != buffer)strcpy(buffer, name);len = strlen(buffer);offset -= symbol_offset;//这里的add_offset 为1,会在buffer中以+%#lx/%#lx的格式添加offset和sizeif (add_offset)len += sprintf(buffer + len, "+%#lx/%#lx", offset, size);// 如果有模块name的话,则在buffer中加上address 对应的模块的nameif (modname)len += sprintf(buffer + len, " [%s]", modname);return len;}
阅读全文
0 0
- 模块API之sprint_symbol
- 模块API之__module_address
- 模块API之__module_text_address
- 模块API之find_module
- 模块API之module_is_live
- 模块API之module_refcount
- 模块API之try_module_get
- 模块API之module_address_lookup
- 模块API之lookup_module_symbol_name
- 模块API之lookup_module_symbol_attrs
- 模块API之module_get_kallsym
- 模块API之print_modules
- 模块API之ref_module
- 模块API之register_module_notifier
- 模块API之each_symbol_section
- 模块API之symbol_put_addr
- 模块API之print_symbol
- 模块API之module_put/__module_get
- Mac 电脑 配置Mysql 默认编码utf8
- 微信公众号相应消息 ,自动回复消息
- 导出excel封装
- [leetcode]#28. Implement strStr()
- RecyclerView的item点击,长按事件
- 模块API之sprint_symbol
- scrapy的第一个爬虫
- mongodb中批量将时间戳转变通用日期格式
- “集百度AI技术之大成的终极硬件形态”发布
- SQL中的数据类型
- python数字图像处理笔记
- Groq新进展!谷歌TPU原班人马明年发布首款AI芯片
- android自定义控件 侧滑菜单
- 玩转Python-Scrapy(一):初探scrapy