查找在二进制中使用 Pi 的数学计算

逆向工程 艾达 x86 静态分析
2021-06-29 15:03:46

给定一个为 X86 64 位系统编译的大 (~14MB) 二进制文件,为了找到 Pi (π) 用于计算某个参数 (标志) 的用法,需要经过哪些基本步骤?

我是相当新的这一点,我试图寻找通过串找到不同的数学术语和数字,我也走了过来职能窗口,发现名称,如_tan_pow_sqrt_sin等,但没有提及特别是 Pi。

谁能推荐另一种方法来解决这个问题?不幸的是,我无法分享我正在处理的特定二进制文件。

1个回答

关于 Pi 的值如何包含在代码中,有几种可能的可能性 -

1) 使用三角函数计算。例如

4.0 * atan( 1.0 )

2) 它被存储为一个浮点常量。在十六进制表示中,这些可能是 -

0x40490FDB            // 32-bit floating point
0x400921FB54442D18    // 64-bit floating point

但是,您需要了解编译器优化,包括常量折叠

即使源代码使用我的第一种可能性,编译器也可能将其优化为浮点常量。(即我的第二种可能性)

然后,如果值 Pi 仅在它出现在具有其他常量值的计算中的上下文中使用,则编译器可能会在编译时执行任何计算的该部分,并且仅将结果包含在目标文件中。例如

pi = 4.0 * atan( 1.0 );                   // may become = 3.1415926536..
circumference = 2.0 * pi * radius;        // may become = 6.2831853.. * radius
degrees = radians * 180 / pi;             // may become = radians * 57.2957795..
result = fourier_integral / (2.0 * pi);   // may become = fourier_integral * 0.1591549..

因此,总而言之,您可能根本找不到 Pi 的值,可能必须搜索可能相关的常数值。