本文主要写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.
2012年7月5日星期四
ida-pro常见用法
订阅:
博文评论 (Atom)
没有评论:
发表评论