2012年7月5日星期四

ida-pro常见用法

本文主要写ida-pro的用法,并不断的更新。
 


1.显示反汇编数据,也就是机器码。
选项->常规->机器码字节数  这个数最大为15.
C7 85 C4 FE FF FF 28 01 00 00       mov     [ebp+pe.dwSize], 128h

mov word ptr es:[eax + ecx * 8 + 0x11223344], 0x12345678
对应的机器编码是:26 66 c7 84 c8 44 33 22 11 78 56

mov dword ptr es:[eax + ecx * 8 + 0x11223344], 0x12345678
它的encode(机器编码)是:26 c7 84 c8 44 33 22 11 78 56 34 12 (共12个字节)

lock mov dword ptr es:[eax+ecx*8+0x11223344], 0x12345678
注意,仅在 16 位下,这条指令的编码是:26 66 67 F0 C7 84 C8 44 33 22 11 78 56 34 12 (正好 15 个字节)

有没有超过 15 个字节的指令编码,答案是:没有! 那么在 64 位下呢? 答案同样是没有!

为什么指令长度最长是 15 字节?
  (1)4 个字节的 prefix 已经达到饱和度了:1 个字节用来调整 segment,1 个字节用来调整 Operand-Size,1 个字节用来调整 Address-Size,还有 1 个字节用来 lock 总线。已经无法再增加 prefix 了。
  (2)若是采用 2 个字节的 Opcode 码,则寻址模式上不会有 mem32, imm32 这种操作法。所以还是采用 1 个字节的 Opcode,而得到 imm32 4 个字节的立即数。
  (3)ModRM + SIB:2 个字节。
  (4)4 个字节的 displacement 值。
  (5)4 个字节的 immediate 值。
这样每个组成部分都呈饱和状态,加起来总共 15 个字节,而只有采用 mem32, imme32 这种寻址模式可能会达到饱和状态。
  在 64 位下,若采用 mem, imme 的寻址模式,这和 32 位是一致的,所以不会超越 15 个字节,
以上摘自:【x64 指令系统】之 指令编码内幕 
http://www.mouseos.com/x64/doc2.html
http://www.mouseos.com/x64/format.html


2.显示一个函数都被谁调用了及内部流程。
点击/选中这个函数,右键,在弹出的菜单中选择jump to xref to operand...或者list cross references to...
                            相应的快捷键是X和Ctrl+X。建议常用X。
如果想图形化的显示一个函数从入口到这个函数的调用流程,就如上操作,然后选择Xrefs graph to...
还有一个显示这个函数的内部调用流程的,操作如上,然后选择Xrefs graph from...
这些操作还是蛮方便的,功能还是挺好的。


3.IDA可以代替一些PE32文件分析工具查看导出函数和导入函数。
   主要是可以分析PE32+文件。


4.View->Toolbars这个里面的操作无用,主要是在界面(工具条)上显示一个东西。


5.View->graph  overview 只有在特定的情况下会显示。
   这个用于在函数中定位,不至于迷失方向。说是图形概览,不如说函数的定位图。


6.View->graphs->Flow char
   这个看函数的比较好,快捷键是F12。


7.堆栈平衡的指针
   Options->general...->Disassembly->Stack pointer.

没有评论:

发表评论