函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:arch\x86\lib\insn-eval.c Create Date:2022-07-27 08:24:33
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:get_reg_offset

函数原型:static int get_reg_offset(struct insn *insn, struct pt_regs *regs, enum reg_type type)

返回类型:int

参数:

类型参数名称
struct insn *insn
struct pt_regs *regs
enum reg_typetype
399  regno等于0
401  static const int regoff[] = {offsetof(structpt_regs, ax), offsetof(structpt_regs, cx), offsetof(structpt_regs, dx), offsetof(structpt_regs, bx), offsetof(structpt_regs, sp), offsetof(structpt_regs, bp), offsetof(structpt_regs, si), offsetof(structpt_regs, di), offsetof(structpt_regs, r8), offsetof(structpt_regs, r9), offsetof(structpt_regs, r10), offsetof(structpt_regs, r11), offsetof(structpt_regs, r12), offsetof(structpt_regs, r13), offsetof(structpt_regs, r14), offsetof(structpt_regs, r15), }
421  nr_registers等于ARRAY_SIZE - get the number of elements in array @arr*@arr: array to be sized(regoff)
426  如果IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',* 0 otherwise.(CONFIG_X86_64)且非x86_64nr_registers减等于8
430  :type恒等于REG_TYPE_RM
431  regno等于X86_MODRM_RM(value)
437  如果非X86_MODRM_MOD(value)且regno恒等于5则返回:负EDOM
440  如果X86_REX_B(value)则regno加等于8
442  退出
444  :type恒等于REG_TYPE_INDEX
445  regno等于X86_SIB_INDEX(value)
446  如果X86_REX_X(value)则regno加等于8
455  如果X86_MODRM_MOD(value)不等于3且regno恒等于4则返回:负EDOM
457  退出
459  :type恒等于REG_TYPE_BASE
460  regno等于X86_SIB_BASE(value)
466  如果非X86_MODRM_MOD(value)且regno恒等于5则返回:负EDOM
469  如果X86_REX_B(value)则regno加等于8
471  退出
473  默认
474  pr_err_ratelimited("invalid register type: %d\n", type)
475  返回:负EINVAL
478  如果regno大于等于nr_registers
479  WARN_ONCE(1, "decoded an instruction with an invalid register")
480  返回:负EINVAL
482  返回:regoff[regno]
调用者
名称描述
insn_get_modrm_rm_offsn_get_modrm_rm_off() - Obtain register in r/m part of the ModRM byte*@insn: Instruction containing the ModRM byte*@regs: Register values as seen when entering kernel mode* Returns:* The register indicated by the r/m part of the ModRM byte. The
get_eff_addr_regget_eff_addr_reg() - Obtain effective address from register operand*@insn: Instruction
get_eff_addr_modrmget_eff_addr_modrm() - Obtain referenced effective address via ModRM*@insn: Instruction
get_eff_addr_sibget_eff_addr_sib() - Obtain referenced effective address via SIB*@insn: Instruction