《IDA Pro权威指南》读书笔记

IDA 6.1 预破解版 种子下载地址 http://thepiratebay.se/torrent/7686769/。 如果不能下了,谷歌搜索 “Hex-Rays Ida Pro Advanced Edition v6.1.1 PreCracked”。


Names窗口:

F,常规函数

L, 库函数

I,导入的名称。与库函数的区别:没有代码

G,命名代码

D,数据

A,字符串数据。

用于自动生成名称的一些常用前缀包括以下一些:

sub_xxxxxx:地址xxxxxxx处的子例程

loc_xxxxxx:地址xxxxxx处的一个指令

byte_xxxxxx:位置xxxxxx处的8位数据

word:16位

dword:32位

unk_xxxxxx:位置xxxxxx处的大小未知的数据


x86 fastcall约定:是stdcall约定的一个变体,它向CPU寄存器(而非程序栈)最多传递两个参数。 传递给函数的前两个参数将分别位于ECX和EDX寄存器中。剩余的其他参数则以类似stdcall约定的方式从右到左放入栈上。


push和pop会修改esp,要记住


在x86程序中,EBP寄存器通常专门用作栈帧指针。

bp-based frame:

push  ebp   ; save the caller's ebp value
mov  ebp, esp   ; make ebp point to the saved register value
sub  esp, 76   ; allocate space for local variables
……
mov esp, ebp   ; clears local variables by reseting esp
pop   ebp    ; restore the caller's value of ebp
ret      ; pop return address to return to the caller
使用一个专用的帧指针,所有变量相对于帧指针寄存器的偏移量得以计算出来。正偏移量用于访问函数参数,负偏移量用于访问局部变量。


反汇编清单可能会有错误,你可能需要对反汇编分析和显示过程进行更多的控制。

IDA提供的代码转换包括以下几类:

将数据转换为代码

将代码转换为数据

指定一个指令序列为函数

更改现有函数的起始或结束地址

更改指令操作数的显示格式


Edit->Array菜单中,可以指定连续的数据空间为数组。指定后,反汇编清单会更好看


为了字节对齐,编译器会插入几个字节

结构体在反汇编中看到的就是数据块,并不知道是结构体。可以自己创建。

可以反汇编自己编写一些程序来认识自己使用的编译器得到的结果


编译器会为每一个包含虚函数的类(或通过继承得到的子类)生成一个表,其中包含指向类中每一个虚函数的指针。这样的表就叫做虚表(vtable)。此外,每个包含虚函数的类都获得另外一个数据成员,用于在运行时指向适当的虚表。这个成员通常叫做虚表指针(vtable pointer),并且是类中的第一个数据成员。

通过虚表的分析,可以看出两个类间的关系。

如果两个虚表包含相同数量的条目,则与这两个虚表对应的类之间可能存在着某种继承关系

如果类x的虚表包含的条目比类y多,则x可能是y的子类

如果x包含的条目也可以在y的虚表中找到,则必定存在下面一种关系:x是y的子类,y是x的子类,或者x和y全都是同一个超类z的子类。

如果x包含的条目也可以在类y的虚表中找到,并且x的虚表中至少包含一个纯调用条目,而y的虚表中并没有这个条目,那么y是x的子类


代码交叉引用用于表示一条指令将控制权转交给另一条指令。在IDA中,指令转交控制权的方式叫做流(flow)。IDA中有3种基本流:普通流、跳转流和调用流。j表示跳转流jump,p表示调用,procedure。

数据交叉引用最常用的3种数据交叉引用分别用于表示某个位置何时被读取、何时被写入以及何时被引用。r后缀表示read cross-reference,w表示write,o表示偏移量交叉引用offset cross-reference。


常用快捷键:

g:jump to address

alt+t:搜索

ctrl+t:搜索下一个

ctrl+x:交叉引用列表

F5:反编译成C伪码


Mac OS X版的IDA没有破解,目前只发现6.0的试用版。 Mac版的IDA能更好地识别objective-c函数,并且反汇编结果是AT&T语法,可以和windows版互补一起用。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hursing

来一个五羊香芋甜筒~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值