对象/数组/链表的汇编形态
定义:由高级编程语言构筑的程序中往往会出现大量的对象/数组/链表等数据结构,特别的,当程序的构筑使用了面向对象思想时,程序中传输的数据将大量的被对象封装,因此对于各类数据结构的汇编形态的熟悉是必要的。
示例1:对象数组示例
PS1:如上图所示,在找到一个数组里的某一个对象中的属性的地址如以上的[[[[0x141925158]+30]+rdx*8+10]+188]+E8 (刚找到时其只是一个普通的地址如0x7FFCDD712219,通过逆向搜索可得到类似形态的组合地址。一个基址在经过多次运算之后最终指向一个保存在对象数组中的对象的属性)后,对其进行分析。
PS2:由[[[[0x141925158]+30]+rdx*8+10]+188]+E8指向对象的一个属性可知,[[[[0x141925158]+30]+rdx*8+10]+188]应当为该对象的属性表的起始地址;则[[[0x141925158]+30]+rdx*8+10]+188应当为该对象的起始地址;进一步推断出[[[0x141925158]+30]+rdx*8+10]应当为该对象数组的对象列表的起始地址;则[[0x141925158]+30]为该对象数组的起始地址,[0x141925158]+30为数组的头部中存储的数值。
示例2:对象数组头部的内存视角