函数逻辑报告 |
Source Code:kernel\trace\trace_kprobe.c |
Create Date:2022-07-27 13:50:13 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| 首页 | 函数Tree |
| 注解内核,赢得工具 | 下载SCCT | English |
函数名称:trace_kprobe_create
函数原型:static int trace_kprobe_create(int argc, const char *argv[])
返回类型:int
参数:
| 类型 | 参数 | 名称 |
|---|---|---|
| int | argc | |
| const char * | argv |
| 736 | struct trace_kprobe * tk = NULL |
| 737 | ret等于0 |
| 738 | bool is_return = false |
| 740 | event等于NULL, group等于KPROBE_EVENT_SYSTEM |
| 741 | maxactive等于0 |
| 742 | offset等于0 |
| 743 | void * addr = NULL |
| 745 | flags等于TPARG_FL_KERNEL |
| 753 | 退出 |
| 754 | 默认 |
| 755 | 返回:负ECANCELED |
| 760 | trace_probe_log_init("trace_kprobe", argc, argv) |
| 762 | event等于strchr - Find the first occurrence of the character c in the string s.*@s: the string to be searched*@c: the character to search for |
| 766 | 如果是数字则 |
| 767 | 如果非is_return则 |
| 768 | trace_probe_log_err(1, MAXACT_NO_KPROBE) |
| 769 | 转到:parse_error |
| 775 | 如果len大于MAX_EVENT_NAME_LEN减1则 |
| 776 | trace_probe_log_err(1, BAD_MAXACT) |
| 777 | 转到:parse_error |
| 783 | trace_probe_log_err(1, BAD_MAXACT) |
| 784 | 转到:parse_error |
| 789 | 如果maxactive大于KRETPROBE_MAXACTIVE_MAX则 |
| 790 | trace_probe_log_err(1, MAXACT_TOO_BIG) |
| 791 | 转到:parse_error |
| 798 | trace_probe_log_set_index(1) |
| 805 | symbol等于kstrdup(argv[1], GFP_KERNEL) |
| 809 | ret等于traceprobe_split_symbol_offset(symbol, & offset) |
| 811 | trace_probe_log_err(0, BAD_PROBE_ADDR) |
| 812 | 转到:parse_error |
| 814 | 如果kprobe_on_func_entry(NULL, symbol, offset)则flags或等于TPARG_FL_FENTRY |
| 816 | 如果offset且is_return且非flags按位与TPARG_FL_FENTRY的值则 |
| 817 | trace_probe_log_err(0, BAD_RETPROBE) |
| 818 | 转到:parse_error |
| 822 | trace_probe_log_set_index(0) |
| 823 | 如果event则 |
| 826 | 如果ret则转到:parse_error |
| 828 | 否则 |
| 843 | 如果是错误则 |
| 849 | argc减等于2 |
| 849 | argv加等于2 |
| 852 | 以i小于argc且i小于MAX_TRACE_ARGS循环 |
| 866 | ret等于traceprobe_set_print_fmt( & tp, is_return) |
| 871 | 如果ret则 |
| 872 | trace_probe_log_set_index(1) |
| 873 | 如果ret恒等于负EILSEQ则trace_probe_log_err(0, BAD_INSN_BNDRY) |
| 875 | 否则如果ret恒等于负ENOENT则trace_probe_log_err(0, BAD_PROBE_ADDR) |
| 877 | 否则如果ret不等于负ENOMEM且ret不等于负EEXIST则trace_probe_log_err(0, FAIL_REG_PROBE) |
| 879 | 转到:error |
| 882 | out : |
| 883 | trace_probe_log_clear() |
| 885 | 返回:ret |
| 887 | parse_error : |
| 889 | error : |
| 890 | free_trace_kprobe(tk) |
| 891 | 转到:out |
| 名称 | 描述 |
|---|---|
| create_or_delete_trace_kprobe |
| 源代码转换工具 开放的插件接口 | X |
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |