第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次)替换了。