第60章
举个例子,我们可能会对用户如何在微软的Excel中输入计算公式感兴趣,比如除法操作。
如果我们加载excel.exe(Offic 2010)版本为14.0.4756.1000 到IDA中,列出所有的条目,查找每一条FDIV指令(除了使用常量作为第二个操作数的——显然不是我们所关心的):
然后我们就会看到有144条相关结果。
通过使用调试器或者tracer(一次性检查4条指令)检查指令,我们幸运地发现目标指令是第14个:
ST(0)存放了第一个参数,[EBX]存放了第二个参数。
FDIV(FSTP)之后的指令在内存中写入了结果:
我们也可以恶作剧地修改一下这个值:
Excel在这个单元中显示666,我们也可以确信的确找到了正确的位置。
看起来似乎许多浮点数和双精度类型的除法操作都被编译器用SSE指令比如DIVSD(DIVSD总共出现了268次)替换了。