给定一个为 X86 64 位系统编译的大 (~14MB) 二进制文件,为了找到 Pi (π) 用于计算某个参数 (标志) 的用法,需要经过哪些基本步骤?
我是相当新的这一点,我试图寻找通过串找到不同的数学术语和数字,我也走了过来职能窗口,发现名称,如_tan,_pow,_sqrt,_sin等,但没有提及特别是 Pi。
谁能推荐另一种方法来解决这个问题?不幸的是,我无法分享我正在处理的特定二进制文件。
给定一个为 X86 64 位系统编译的大 (~14MB) 二进制文件,为了找到 Pi (π) 用于计算某个参数 (标志) 的用法,需要经过哪些基本步骤?
我是相当新的这一点,我试图寻找通过串找到不同的数学术语和数字,我也走了过来职能窗口,发现名称,如_tan,_pow,_sqrt,_sin等,但没有提及特别是 Pi。
谁能推荐另一种方法来解决这个问题?不幸的是,我无法分享我正在处理的特定二进制文件。
关于 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 的值,可能必须搜索可能相关的常数值。