首页
社区
课程
招聘
[求助]idapython中op_t存储操作数的疑问
发表于: 2018-9-15 15:58 3324

[求助]idapython中op_t存储操作数的疑问

2018-9-15 15:58
3324
当操作数的类型为 o_phrase时,是怎么存储里面的信息的,比如使用idautils.DecodeInstruction对 "mov  eax, [edx+ebp]" 这条x86指令的解码,第二个操作数的op_t.phrase=4,op_t. specflag1=1 ,op_t.specflag2=42
intel.hpp中对寄存器的编号的定义如下:

enum RegNo
{
  R_none = -1,
  R_ax = 0,
  R_cx = 1,
  R_dx = 2,
  R_bx = 3,
  R_sp = 4,
  R_bp = 5,
  R_si = 6,
  R_di = 7,
  R_r8 = 8,
  R_r9 = 9,
  R_r10 = 10,
  R_r11 = 11,
  R_r12 = 12,
  R_r13 = 13,
  R_r14 = 14,
  R_r15 = 15,
  R_al = 16,
  R_cl = 17,
  R_dl = 18,
  R_bl = 19,
  R_ah = 20,
  R_ch = 21,
  R_dh = 22,
  R_bh = 23,
  R_spl = 24,
  R_bpl = 25,
  R_sil = 26,
  R_dil = 27,
  R_ip = 28,
  R_es = 29,    // 0
  R_cs = 30,    // 1
  R_ss = 31,    // 2
  R_ds = 32,    // 3
  R_fs = 33,
  R_gs = 34,
  R_cf = 35,    // main cc's
  R_zf = 36,
  R_sf = 37,
  R_of = 38,
  R_pf = 39,    // additional cc's
  R_af = 40,
  R_tf = 41,
  R_if = 42,
  R_df = 43,
  R_efl = 44,   // eflags
  // the following registers will be used in the disassembly
  // starting from ida v5.7
  R_st0 = 45,   // floating point registers (not used in disassembly)
  R_st1 = 46,
  R_st2 = 47,
  R_st3 = 48,
  R_st4 = 49,
  R_st5 = 50,
  R_st6 = 51,
  R_st7 = 52,
  R_fpctrl = 53,// fpu control register
  R_fpstat = 54,// fpu status register
  R_fptags = 55,// fpu tags register
  R_mm0 = 56,   // mmx registers
  R_mm1 = 57,
  R_mm2 = 58,
  R_mm3 = 59,
  R_mm4 = 60,
  R_mm5 = 61,
  R_mm6 = 62,
  R_mm7 = 63,
  R_xmm0 = 64,  // xmm registers
  R_xmm1 = 65,
  R_xmm2 = 66,
  R_xmm3 = 67,
  R_xmm4 = 68,
  R_xmm5 = 69,
  R_xmm6 = 70,
  R_xmm7 = 71,
  R_xmm8 = 72,
  R_xmm9 = 73,
  R_xmm10 = 74,
  R_xmm11 = 75,
  R_xmm12 = 76,
  R_xmm13 = 77,
  R_xmm14 = 78,
  R_xmm15 = 79,
  R_mxcsr = 80,
  R_ymm0  = 81, // AVX 256-bit registers
  R_ymm1  = 82,
  R_ymm2  = 83,
  R_ymm3  = 84,
  R_ymm4  = 85,
  R_ymm5  = 86,
  R_ymm6  = 87,
  R_ymm7  = 88,
  R_ymm8  = 89,
  R_ymm9  = 90,
  R_ymm10 = 91,
  R_ymm11 = 92,
  R_ymm12 = 93,
  R_ymm13 = 94,
  R_ymm14 = 95,
  R_ymm15 = 96,
  R_last,
};
就是不理解为什么那三个成员变量没有R_dx或R_bp的值
最后于 2018-9-15 16:01 被会飞的鱼油编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 930
活跃值: (1328)
能力值: ( LV15,RANK:750 )
在线值:
发帖
回帖
粉丝
2
实际上 base register 和 index register 是通过 op.specflag2 & 7 和 (op.specflag2 >> 3) & 7算出来的。具体可以查看intel.hpp里面的x86_base函数,但是这个函数在IDAPython里面没有对应的函数。
2018-9-17 12:56
0
雪    币: 23724
活跃值: (5304)
能力值: ( LV12,RANK:529 )
在线值:
发帖
回帖
粉丝
3
iweizime 实际上 base register 和 index register 是通过 op.specflag2 & 7 和 (op.specflag2 >> 3) & 7算出来的。 ...
多谢,我查文档的时候只写了信息存在哪些成员变量里,并没有给出计算方法
2018-9-17 13:27
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
你哪里查到的 RegNo 这个结构体,我都没有看见哪个文档里面有在写 
2018-11-5 14:01
0
雪    币: 23724
活跃值: (5304)
能力值: ( LV12,RANK:529 )
在线值:
发帖
回帖
粉丝
5
gkdark 你哪里查到的 RegNo 这个结构体,我都没有看见哪个文档里面有在写
在SDK中include目录下的intel.hpp
2018-11-5 18:50
0
游客
登录 | 注册 方可回帖
返回
//