Operands(操作数)
- 获取操作数的助记符
idc.GetOpnd(ea,long n) IDA 7.0
idc.print_operand(ea, n) IDA 7.4
第一个参数是地址,第二个 long n
是操作数索引。第一个操作数是 0 和第二个是 1。
2.得到的操作数的类型。ea 是地址,n 是索引
idc.GetOpType(ea,n) IDA 7.0
idc.get_operand_type(ea, n) IDA 7.4
返回值:
idc.o_void
如果一个指令没有任何操作数它将返回 0。
idc.o_reg
如果一个操作数是一个普遍的寄存器将返回此类型。这个值在内部表示为 1。
idc.o_mem
如果一个操作数是直接内存引用它将返回这个类型。这个值在内部表示为 2。这种类型
是有用的在 DATA 段查找引用。
idc.o_phrase
这个操作数被返回则这个操作数包含一个基本的寄存器或一个索引寄存器。这个值在内
部表示为 3。
idc.o_displ
这个操作数被返回则操作数包含寄存器和一个位移值,这个为位移值是一个整数,例如
0x18。这是常见的当一条指令访问值在一个结构中。在内部,它表示为 4 的值。
idc.o_imm
操作数是这样一个为整数的 0xc 的值的类型。它在内部表示为 5。
idc.o_far
这个操作数不是很常,见当逆向 x86 或 x86_64
时。它是用来寻找操作数的访问立即数远 地址的。它在内部表示为 6。
idc.o_near
这个操作数不是很常见,当逆向 x86 或 x86_64
时。它是用来寻找操作数的访问立即数近 地址的。它在内部表示为 7。
- 可以获取操作数真正的地址
idc.GetOperandValue(ea, n) IDA 7.0
idc.get_operand_value(ea, n) IDA 7.4
例如这样一条指令
movzx eax, _ans[eax]
_ans是位于data或者bss段上的一个变量,用这个命令这可以得到在data或者bss段上的地址
Instructions(指令)
- idautils.Functions()将返回一个已知函数列表。这个列表将包含起始地址的每一个函数。idautils.Functions()可传递的参数范围内搜索。如果我们想要搜索可以通过开始地址和结束地址 idautils.Funtions(start_addr, end_addr) 。
- 返回函数名称
idc.GetFunctionName(func_ea) IDA 7.0
ida_funcs.get_func_name(functionAddr) IDA 7.4
- 获取反汇编指令
idc.GetDisasm(ea)
- 获取指令名称
idc.GetMnem(ea) IDA 7.0
idc.print_insn_mnem(ea) IDA 7.4
- 邻近指令:
获得下一条指令地址:
IDA 7.0:idc.NextHead(ea)
IDA 7.4:idc.next_head(ea)
获得前一条指令地址:
IDA 7.0:idc.PrevHead(ea)。
IDA 7.4:idc.prev_head(ea)
这些功能将得到下一个指令的开始而不是下一个地址
- 邻近地址</