A dynamic tracer for Linux

ir.h 804B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #ifndef _PLY_IR_H
  2. #define _PLY_IR_H
  3. #include <stdint.h>
  4. #include <stdlib.h>
  5. #include <linux/bpf.h>
  6. typedef enum vitype {
  7. VI_INSN,
  8. VI_LABEL,
  9. VI_REG_GET,
  10. VI_REG_PUT,
  11. } vitype_t;
  12. typedef struct vinsn {
  13. vitype_t vitype;
  14. union {
  15. struct {
  16. struct bpf_insn bpf;
  17. uint16_t dst;
  18. uint16_t src;
  19. } insn;
  20. int16_t label;
  21. uint16_t reg;
  22. };
  23. } vinsn_t;
  24. typedef struct ir {
  25. vinsn_t *vi;
  26. size_t len;
  27. int16_t next_label;
  28. uint16_t next_reg;
  29. } ir_t;
  30. int16_t ir_alloc_label (ir_t *ir);
  31. uint16_t ir_alloc_register(ir_t *ir);
  32. void ir_emit_insn (ir_t *ir, struct bpf_insn bpf, uint16_t dst, uint16_t src);
  33. void ir_emit_label (ir_t *ir, int16_t label);
  34. void ir_emit_reg_get(ir_t *ir, uint16_t reg);
  35. void ir_emit_reg_put(ir_t *ir, uint16_t reg);
  36. ir_t *ir_new(void);
  37. #endif /* _PLY_IR_H */