64 ビット Linux 用の動的ライブラリがあり、C++ コードからコンパイルされた多くの関数が含まれています。コードはオープン ソースではありませんが、関数の 1 つがどのように見えるべきかについての考えがあります。数式が含まれており、この数式の定数の 1 つを変更したいと考えています。
私にはある程度のプログラミング スキルがありますが、コンパイルされたオブジェクトや実行可能ファイルを調べたことはありません。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
ファイル内のこの定数の位置を見つけ、定数を 16 進形式に変換し、ファイル内の値を 16 進値に置き換える方法を知りたいです。誰かがこれを行う方法を説明できますか? また、適切なツールに関する提案も非常に価値があります。