zoukankan      html  css  js  c++  java
  • bpf 指令集

     58 struct bpf_insn {
     59     __u8    code;       /* opcode */
     60     __u8    dst_reg:4;  /* dest register */
     61     __u8    src_reg:4;  /* source register */
     62     __s16   off;        /* signed offset */
     63     __s32   imm;        /* signed immediate constant */
     64 };
     
    

     一条bpf的指令包括:8字节长

    其中操作码共8位,0,1,2这三位表示的是该操作的大类别:0X07

    BPF_LD(0x00) /   BPF_LDX(0x01) /   BPF_ST(0x02) /  BPF_STX(0x03) /   BPF_ALU(0x04) /   BPF_JMP(0x05) /   BPF_RET(0x06) /    BPT_MISC(0x07)

    对于 LD大类 来说:

    3,4位表示的是位宽0x00 代表4字节,0x08:2字节,0x10:1个字节 0X18

    5.6.7三位表示的是:0XE0

    BPF_IMM / BPF_ABS / BPF_IND / BPF_MEM / BPF_LEN / BPF_MSH

    对于ALU和JMP大类来说:

    4,5,6,7 高四位表示的是具体的操作:0xf0

    BPF_ADD / BPF_SUB / BPF_MUL / BPF_DIV / BPF_OR / BPF_AND / BPF_LSH / BPF_RSH / BPF_NEG / BPF_MOD / BPF_XOR / BPF_JA / BPF_JEQ / BPF_JGT / BPF_JGE / BPF_JSET /

    第3位表示的是:0x08

    BPF_K/BPF_X

    BPF使用的寄存器包括:

        * R0    - return value from in-kernel function, and exit value for eBPF program
        * R1 - R5   - arguments from eBPF program to in-kernel function
        * R6 - R9   - callee saved registers that in-kernel function will preserve
        * R10   - read-only frame pointer to access stack
    

    code 操作码(8 bit)

    目标寄存器(4 bit),源寄存(4 bit),偏移(16bit),立即数(32bit)

  • 相关阅读:
    模态对话框可能导致程序崩溃
    C++实现将字符串循环左移n个位置
    Android Gallery图片显示和文字提示及Menu 菜单
    android代码实现ScaleAnimation
    Android系统内存管理的问题
    android打电话发短信
    android开发之屏幕设置
    输入法
    黄金周
    气筒
  • 原文地址:https://www.cnblogs.com/honpey/p/8013073.html
Copyright © 2011-2022 走看看