几年前,我遇到了一个修改过的 moufiltr 驱动程序(由 Povohat 制作),它允许用户设置自定义的鼠标加速。该驱动程序使用浮点运算。 我在 WDK7 示例中找到了一个 mouclass 示例驱动程序,它基于 povohat 的 moufiltr 驱动程序我已经修改了这个示例以包括可调加速度(来自 Quake 3 cl_input.c 的方程式),但使用放大的整数而不是 double ,因此不需要 KeSaveFloatingPointState。这样做的目的是为 Windows XP 也提供一些东西。
如果在计算中只使用 LONGLONG 类型的变量 (+,/,*,%),是否可以假设没有使用浮点运算?
最佳答案
即使您的代码没有浮点文字、浮点变量和浮点强制转换,假设它在编译的机器代码级别没有浮点操作也是不安全的。通常,在关闭优化的情况下,编译后的代码基本上是源代码的直接翻译,在这种情况下,如果源代码中没有浮点机制,那么编译后的代码中也不会。然而,编译器通常可以完全访问目标体系结构的指令集,并且启用优化后,它们将根据优化标准(通常是速度和/或大小)对最终编译输出进行大量修改。在这种情况下,如果某些(或全部)浮点指令被编译器认为是必要的,那么即使您的源代码中没有它们,它们也会出现在编译后的机器代码中。如果你的编译器不支持限制它可以使用的机器代码(汇编程序)指令,而 VS 2013 Express 不支持,那么唯一的方法就是反编译你的编译代码并自己寻找浮点指令。
关于c - 如何确保 C 代码中没有浮点运算(Visual Studio 2013 express + WDK 8.1,WDM 内核驱动程序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58494798/