商家名称 | 信用等级 | 购买信息 | 订购本书 |
C++反汇编与逆向分析技术揭秘(作者钱林松) | |||
C++反汇编与逆向分析技术揭秘(作者钱林松) |
版权页:
插图:
下标寻址方式也可以被指针寻址方式所代替,但指针寻址方式需要两次间接访问才能访问到数组内的元素,第一次是访问指针变量,第二次才能访问到数组元素,故指针寻址的执行效率不会高于下标寻址,但是在使用的过程中更加方便。
数组下标和指针的寻址如此相似,如何在反汇编代码中区分它们呢?只要抓住一点即可,那就是指针寻址需要两次以上间接访问才可以得到数据。因此,在出现了两次间接访问的反汇编代码中,如果第一次间接访问得到的值作为地址,则必然存在指针。图8.6就使用寄存器作为指针变量,保存全局数组的地址,从而利用保存了全局数组首地址的寄存器对该数组进行间接访问操作。
数组下标寻址的识别相对复杂,下标为常量时,由于数组的元素长度固定,siZeof(type)*n也为常量,产生了常量折叠,编译前可直接算出偏移量,因此只需使用数组首地址作为基址加偏移即可寻址相关数据,不会出现二次寻址现象。当下标为变量或者变量表达式时,会明显体现出数组的寻址公式,且发生两次内存访问,但是和指针寻址明显不同,第一次访问的是下标,这个值一般不会作为地址使用,且代入公式计算后才得到地址。值得注意的是,在打开优化选项02后,需留心各种优化方式。
相关阅读:
更多图书资讯可访问读书人图书频道:http://www.reAder8.cn/book/