⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regs-x86.h

📁 It s a Linux disassemble, can set break point, disassemble ELF file.
💻 H
字号:
/* * libDebug * * Copyright (C) 2000 Patrick Alken * This library comes with absolutely NO WARRANTY * * Should you choose to use and/or modify this source code, please * do so under the terms of the GNU General Public License under which * this program is distributed. * * $Id: regs-x86.h,v 1.1.1.1 2004/04/26 00:41:04 pa33 Exp $ */#ifndef INCLUDED_regs_x86_h#define INCLUDED_regs_x86_h#ifndef INCLUDED_sys_types_h#include <sys/types.h>#define INCLUDED_sys_types_h#endif#ifndef INCLUDED_libDebug_h#include "libDebug.h"#define INCLUDED_libDebug_h#endif#ifdef OS_LINUX# ifndef INCLUDED_sys_user_h#  include <sys/user.h>         /* struct user */#  define INCLUDED_sys_user_h# endif#elif OS_BSD# ifndef INCLUDED_machine_reg_h#  include <machine/reg.h>      /* struct reg */#  define INCLUDED_machine_reg_h# endif#endifstruct x86RegInfo{  char *name;           /* register name */  /*   * This value indicates the "chunk" position starting from   * the right. What I mean by "chunk" is a group of eight   * bits.   *   * For example, consider the eax register:   *   * eax     ax/ah                         al   * b31 ... b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0   *   * The position of ah is 2, since it is 2 groups of eight bits   * away from bit 0. The position of al is 1 since it is 1 group   * of eight bits from bit 0. eax is position 4 and ax is position   * 2.   *   * This serves a purpose when we want to modify ah or al only   * so in our array we know the position at which that particular   * register starts.   */  int position;  unsigned int flags; /* R_xxx bitmasks */  void *valptr;};#define FPU_NUM_DATA_REGS    8   /* number of fpu data registers */#define FPU_DATA_REG_SIZE    10  /* size of a fpu data register in bytes */#define MMX_NUM_REGS         8   /* number of mmx registers */#define MMX_REG_SIZE         8   /* size of a mmx register in bytes */struct x86fpuInfo{  unsigned short fctrl;   /* control register */  unsigned short fstat;   /* status register */  unsigned short ftag;    /* tag register */  long fip;               /* floating point instruction pointer */  unsigned short fcs;     /* floating code segment selector */  unsigned short fopcode; /* opcode last executed */  long fooff;             /* floating operand offset */  long foseg;             /* floating operand segment selector */  unsigned char stptr[FPU_NUM_DATA_REGS * FPU_DATA_REG_SIZE];};struct x86RegData{  void *valptr;    /* pointer to contents of register */};struct x86RegValue{  unsigned long lvalue;  unsigned char *stptr;};/* * Register flags */#define R_BITS8       (1 << 0) /* 8 bit register */#define R_BITS16      (1 << 1) /* 16 bit register */#define R_BITS32      (1 << 2) /* 32 bit register */#define R_BITS64      (1 << 3) /* 64 bit register */#define R_BITS80      (1 << 4) /* 80 bit register */#define R_NODISPLAY   (1 << 5) /* do not output register/value */#define R_GENERAL     (1 << 6) /* general register */#define R_FPU         (1 << 7) /* fpu register */#define R_FPU_DATA    (1 << 8) /* fpu data register */#define R_MMX         (1 << 9) /* fpu data register *//* * Indices into x86Registers[] */#define REG_EAX          0#define REG_EBX          1#define REG_ECX          2#define REG_EDX          3#define REG_ESP          4#define REG_EBP          5#define REG_ESI          6#define REG_EDI          7#define REG_DS           8#define REG_ES           9#define REG_FS           10#define REG_GS           11#define REG_SS           12#define REG_CS           13#define REG_EIP          14#define REG_EFLAGS       15#define REG_ENDGENERAL   16   /* marks the end of the general registers */#define REG_AH           17#define REG_AL           18#define REG_AX           19#define REG_BH           20#define REG_BL           21#define REG_BX           22#define REG_CH           23#define REG_CL           24#define REG_CX           25#define REG_DH           26#define REG_DL           27#define REG_DX           28#define REG_SP           29#define REG_BP           30#define REG_SI           31#define REG_DI           32#define REG_IP           33#define REG_FLAGS        34#define REG_ST0          35  /* fpu data registers */#define REG_ST1          36#define REG_ST2          37#define REG_ST3          38#define REG_ST4          39#define REG_ST5          40#define REG_ST6          41#define REG_ST7          42#define REG_FCTRL        43  /* control register */#define REG_FSTAT        44  /* status register */#define REG_FTAG         45  /* tag register */#define REG_FIP          46  /* floating point instruction pointer */#define REG_FCS          47  /* floating code segment selector */#define REG_FOPCODE      48  /* opcode last executed */#define REG_FOOFF        49  /* floating operand offset */#define REG_FOSEG        50  /* floating operand segment selector */#define REG_MM0          51  /* mmx registers */#define REG_MM1          52#define REG_MM2          53#define REG_MM3          54#define REG_MM4          55#define REG_MM5          56#define REG_MM6          57#define REG_MM7          58struct x86RegisterContents{#ifdef OS_LINUX  struct user Regs;#elif OS_BSD  struct reg Regs;  struct fpreg fpRegs;#endif};/* * Prototypes */struct debugWorkspace;int x86findRegisterDebug(struct debugWorkspace *ws, char *name);size_t x86readRegisterDebug(struct debugWorkspace *ws, struct x86RegInfo *rptr,                            struct x86RegValue *regVal);int x86printRegistersDebug(struct debugWorkspace *ws, int regindex, unsigned int flags,                           void (*callback)(), void *callbackArgs);int x86setRegisterDebug(struct debugWorkspace *ws, int regindex, char *value);int x86getFlagsDebug(struct debugWorkspace *ws, char *flags);long x86readIntRegisterDebug(struct debugWorkspace *ws, int regindex);/* * External declarations */extern struct x86RegInfo x86Registers[];#endif /* INCLUDED_regs_x86_h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -