有一个用于 64 位 linux 的动态库,它包含许多从 C++ 代码编译的函数。该代码不是开源的,但我知道其中一个功能应该是什么样子。它包含数学表达式,我想更改此表达式中的一个常量。
我有一些编程技能,但从未研究过编译对象和可执行文件。通过objdump -RDC
命令获取的汇编代码的相关部分如下。感兴趣的常数应该是类型double
,并且它似乎在乘法命令中使用7e1cc
。
7e1b8: 00
7e1b9: f2 0f 59 74 24 78 mulsd 0x78(%rsp),%xmm6
7e1bf: f2 41 0f 59 f0 mulsd %xmm8,%xmm6
7e1c4: f2 0f 58 ce addsd %xmm6,%xmm1
7e1c8: f2 0f 58 ca addsd %xmm2,%xmm1
7e1cc: f2 0f 59 0d fc 0e 0c mulsd 0xc0efc(%rip),%xmm1 # 13f0d0 <typeinfo name for RestorableCreator<Model>+0x90>
7e1d3: 00
7e1d4: 48 81 c4 88 00 00 00 add $0x88,%rsp
7e1db: 66 0f 28 c1 movapd %xmm1,%xmm0
7e1df: c3 retq
我想知道如何找到这个常量在文件中的位置,将我的常量转换为十六进制格式并将文件中的值替换为我的十六进制值。谁能解释如何做到这一点?此外,有关适当工具的建议也非常有价值。